Co-authored-by: Yaroslav Bondarenko <yaroslav.bondarenko@avroid.tech> Reviewed-on: https://git.avroid.tech/DevOps/jenkins-pipelines/pulls/54 Reviewed-by: Denis Patrakeev <denis.patrakeev@avroid.team>
79 lines
2.9 KiB
Groovy
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'
|
|
}
|
|
}
|
|
}
|