Files
jenkins-pipelines/pipelines/Automation/DevOps/artifactory_repository_clean.groovy
2024-12-02 22:29:20 +03:00

79 lines
2.9 KiB
Groovy

@Library('shared-lib') _
import tech.avroid.api.Artifactory
// Parameters and variables
// Configure cleared repository on Conan Server
Map clearRepoMap = [
'avroid_dev' : [
repo: 'avroid_dev',
repoPathSearch: '*',
keepTimeItems: '12weeks',
regexFilteredAqlResponse: (java.util.regex.Pattern)~/^avroid_dev\/[^ \/]+\/[^ \/]+\/[^ \/]+$/
],
]
Artifactory artifactoryServer = new Artifactory(this, "${JENKINS_CONAN_URL}/artifactory", "${JENKINS_CONAN_CREDENTIALS}")
ArrayList listItemsForDeleteFiltered = []
properties([
buildDiscarder(logRotator(artifactDaysToKeepStr: '',
artifactNumToKeepStr: '100',
daysToKeepStr: '',
numToKeepStr: '100')),
disableConcurrentBuilds(),
parameters([
booleanParam(name: 'dryRun', defaultValue: false, description: 'Dry run for test remove artifacts'),
]),
pipelineTriggers([
cron('H 3 * * *')
])
])
podTemplate(workspaceVolume: emptyDirWorkspaceVolume(memory: false), yaml: getPodTemplate('alpine')) {
node(POD_LABEL) {
try {
stage('Search') {
// пробегаемся по содержимому Map и получаем результат
clearRepoMap.each { entry ->
// create AQL-request
String artifactoryAqlRequest = 'items.find(\n' +
' {\n' +
' "repo":{"$eq":"' + entry.value.repo + '"},\n' +
' "path":{"$match":"' + entry.value.repoPathSearch + '"},\n' +
' "type":"folder",\n' +
' "modified":{"$before":"' + entry.value.keepTimeItems + '"}\n' +
' }\n' +
').include("repo","path","name","modified")'
def aqlResponse = artifactoryServer.aqlRequest(artifactoryAqlRequest)
// get list all artefacts
ArrayList listItemsForDelete = artifactoryServer.convertAqlResponseItemToList(aqlResponse)
// debug
//println "${listItemsForDelete}"
// filtered list artefacts for remove
listItemsForDeleteFiltered += listItemsForDelete.findAll { it =~ entry.value.regexFilteredAqlResponse }
// debug
//println "${listItemsForDeleteFiltered}"
}
}
stage('Info') {
echo 'List artifacts for delete:\n' + listItemsForDeleteFiltered.join('\n')
}
stage('Clean') {
artifactoryServer.itemsDelete(listItemsForDeleteFiltered, params.dryRun)
}
}
catch(err) {
echo 'ERROR: ' + err.getMessage()
currentBuild.result = 'FAILURE'
}
}
}