Я пытаюсь понять, как продвижение сборки должно работать с Maven, Jenkins Pipeline, Subversion и Artifactory. Что сделано для меня и что я должен делать, мне неясно.
В настоящее время мы используем задания Jenkins Maven для обработки нашего SNAPSHOT и сборок Release. Когда мы делаем релиз Maven, слово SNAPSHOT удаляется из версии, а сборка помещается в репозиторий релиза. Кроме того, в SVN создан тег для выпущенной версии. И POM обновляется увеличенной версией и словом SNAPSHOT. Я хочу сделать что-то похожее с Jenkins Pipeline.
Я использую Jenkins-2.222.1. Я настроил конвейер (см. Ниже) для типичного проекта Maven. Это работает, как и ожидалось, и я вижу мои сборки SNAPSHOT в Artifactory. Что я не могу понять, так это правильную процедуру выпуска Maven. Я использовал эту документацию в качестве руководства.
Сегодня я добавил закрытие для rtPromote
. Казалось, все, что нужно сделать, это добавить кнопку рядом со сборкой в Jenkins. ![enter image description here](https://i.stack.imgur.com/FlfIg.png)
Поэтому я нажал кнопку и получил экран, похожий на тот, что показан в документации Artifactory. Когда я нажимаю Promote Build, я получаю следующую ошибку, которая говорит мне, что у меня не может быть сборки SNAPSHOT в репозитории релизов. Очевидно, нам не нужна сборка снимков в репозитории релизов, но я не знаю, как сказать плагину Artifactory для обработки номера версии для меня.
Build #8 Promotion
Promotion is in progress:
Promoting build ....
Performing dry run promotion (no changes are made during dry run) ...
ERROR: Promotion failed during dry run (no change in Artifactory was done): HTTP/1.1 400 Bad Request
{
"messages" : [ {
"level" : "ERROR",
"message" : "The repository 'libs-release-local' rejected the path 'com/etisoftware/jenkins-pipeline-test-project/1.1.0-SNAPSHOT/jenkins-pipeline-test-project-1.1.0-20200420.181826-4.jar' due to a conflict with its snapshot/release handling policy."
}, {
"level" : "INFO",
"message" : "Skipping promotion status update: item promotion was completed with errors and warnings."
} ]
}
ERROR: Promotion failed due to Artifactory response.
Completed
Jenkins Pipeline
pipeline {
agent any
stages {
stage ('Artifactory configuration') {
steps {
rtMavenDeployer (
id: "RT_MAVEN_DEPLOYER",
serverId: "ETI_ARTIFACTORY",
releaseRepo: "libs-release-local",
snapshotRepo: "libs-snapshot-local"
)
rtMavenResolver (
id: 'RT_MAVEN_RESOLVER',
serverId: 'ETI_ARTIFACTORY',
releaseRepo: 'libs-release',
snapshotRepo: 'libs-snapshot'
)
rtAddInteractivePromotion (
// Mandatory parameters
// Artifactory server ID from Jenkins configuration, or from configuration in the pipeline script
serverId: 'ETI_ARTIFACTORY',
buildName: "${JOB_NAME}",
buildNumber: "${BUILD_NUMBER}",
)
}
}
stage('Maven exec') {
steps {
rtMavenRun (
pom: 'pom.xml',
goals: 'clean package install',
tool: 'M2_TOOL',
resolverId: 'RT_MAVEN_RESOLVER',
deployerId: 'RT_MAVEN_DEPLOYER'
)
}
}
stage ('Publish build info') {
steps {
rtPublishBuildInfo (
serverId: "ETI_ARTIFACTORY"
)
}
}
stage('Build a Docker image and push to Artifactory'){
steps {
sh 'mvn docker:build docker:push'
}
}
}
}