[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,42 @@
|
|||||||
|
pipelineJob('Automation/DevOps/artifactory-repository-clean') {
|
||||||
|
description('Automation clean old artifacts on Artifactory CPP (Conan)')
|
||||||
|
|
||||||
|
logRotator {
|
||||||
|
numToKeep(100)
|
||||||
|
artifactNumToKeep(100)
|
||||||
|
}
|
||||||
|
|
||||||
|
properties {
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
pipelineTriggers {
|
||||||
|
triggers {
|
||||||
|
cron {
|
||||||
|
spec('H 3 * * *')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
definition {
|
||||||
|
cpsScm {
|
||||||
|
scm {
|
||||||
|
git {
|
||||||
|
remote {
|
||||||
|
url("${JENKINS_GIT_REPOSITORY_URL}/DevOps/jenkins-pipelines.git")
|
||||||
|
credentials("${JENKINS_GIT_CREDENTIALS_HTTP}")
|
||||||
|
}
|
||||||
|
branch('master')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scriptPath('pipelines/Automation/DevOps/artifactory_repository_clean.groovy')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parameters {
|
||||||
|
booleanParam {
|
||||||
|
name('dryRun')
|
||||||
|
defaultValue(false)
|
||||||
|
description('Dry run for test remove artifacts')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ listView('DevOps') {
|
|||||||
description('DevOps service tasks')
|
description('DevOps service tasks')
|
||||||
recurse()
|
recurse()
|
||||||
jobs {
|
jobs {
|
||||||
regex(/^jobs-dsl$|^gitea*/)
|
regex(/^jobs-dsl$|^gitea*|^artifactory-repository-clean$/)
|
||||||
}
|
}
|
||||||
columns {
|
columns {
|
||||||
status()
|
status()
|
||||||
|
|||||||
@@ -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