@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: hostPathWorkspaceVolume(hostPath: '/data'), 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' } finally { cleanWs() } } }