Автоматическое управление версиями артефактов нексуса с использованием сценария Jenkins 2 Jenkinsfile

В настоящее время у меня есть сценарий Jenkins DSL, определяющий мой конвейер выпуска (ниже). Мне было интересно, есть ли способ автоматически увеличивать номер версии выпущенного артефакта для каждой сборки, чтобы я мог публиковать его в Nexus с новым уникальным номером версии, а не устанавливать его вручную. В прошлом я использовал плагин, который делает это автоматически с обычными заданиями Jenkins, но я не могу понять, как это сделать с помощью скрипта конвейера.

node('master') {
       //input 'Proceed?'

       stage 'Checkout'
              checkout scm

       stage 'Build'
              dir('./collector') {
                     sh "./gradlew clean build -Penv=${ENVIRONMENT}"
              }

       stage 'Flyway Migrate'
              dir('./database') {
                     sh "./gradlew flywayMigrate -i -Penv=${ENVIRONMENT}"
              } 

       stage 'Run cucumber Tests'
              dir('./collector') {
                     sh "./gradlew cucumber -Penv=${ENVIRONMENT}"
              }

       stage 'Publish artifact to Nexus'
              dir('./collector') {

                withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'NEXUS_PASSWORD',
                    usernameVariable: 'NEXUS_USERNAME', passwordVariable: 'NEXUS_PASSWORD']]) {
                            sh ("./gradlew publish -Pnexus_username=" + env.NEXUS_USERNAME+" -Pnexus_password=" + env.NEXUS_PASSWORD+ " -Penv=${ENVIRONMENT}--stacktrace")
                     }       


                  }

           //stage ''
    }

person user1712258    schedule 17.06.2016    source источник
comment
Мы просто используем метку времени ГГГГммДДЧЧММ, когда сборка началась + короткий хэш нашей версии git. Теперь, если вы хотите иметь атомарный порядковый номер, вам понадобится место для его хранения. Возможно, поместите его в БД и прочитайте/обновите по мере необходимости.   -  person Jason De Arte    schedule 27.06.2016
comment
Я решил поместить файл под контроль версий и увеличить значение дополнительной версии для каждой успешной сборки. Не самый лучший способ сделать это, но он достигает желаемого результата.   -  person user1712258    schedule 27.06.2016
comment
Вы можете использовать $BUILD_NUMBER, и он будет автоматически увеличиваться, но я не уверен, что это хорошая практика.   -  person agusgambina    schedule 01.11.2017


Ответы (2)


Вы можете использовать VersionNumberPlugin в своем конвейере, чтобы установить номер версии в очень настраиваемый способ.

Тупой пример:

script{
    version = VersionNumber(versionNumberString: '1.0.${BUILDS_ALL_TIME}')
}
person István Rábel    schedule 14.11.2017

Вы можете просто использовать переменную ${env.BUILD_NUMBER} в своем конвейере.

Основываясь на этом ответе, вы можете установить его явно в командной строке gradle как

-Pversion=${env.BUILD_NUMBER} (но нужна предварительная настройка, см. ответ)

person biruk1230    schedule 29.11.2018