Плагин Jenkins Artifactory для продвижения Maven Builds - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь понять, как продвижение сборки должно работать с 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

Поэтому я нажал кнопку и получил экран, похожий на тот, что показан в документации 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'
            }
        }
    }
}
...