[DO-963] Conan clean task (!44)
DO-963 Co-authored-by: denis.patrakeev <denis.patrakeev@avroid.tech> Reviewed-on: https://git.avroid.tech/DevOps/jenkins-pipelines/pulls/44
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
@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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user