Декларативный конвейер Jenkins: как я могу выполнить одну и ту же стадию для разных репозиториев? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть несколько проектов Maven, которые обрабатываются одинаково для выпуска.

Можно ли повторно использовать один и тот же этап и повторять его, просто используя другое имя репозитория для клонирования?

stage('Maven_microservices') {
steps {

    checkout([$class: 'GitSCM', 
        branches: [[name: "*/${env.BRANCH}"]], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'CleanBeforeCheckout'], 
        [$class: 'RelativeTargetDirectory', relativeTargetDir: 'maven_microservice_1']], 
        submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: 'autouser',
        url: 'ssh://mygerrit:29418/maven/maven_microservice_1']]])

    container('maven') {                 
        configFileProvider([configFile(fileId: 'maven_settings', variable: 'MAVEN_SETTINGS')]) {
            dir('maven_microservice_1') {
                sh 'mvn -s $MAVEN_SETTINGS versions:update-parent'
                sh 'mvn -s $MAVEN_SETTINGS versions:resolve-ranges'
                sh 'mvn -s $MAVEN_SETTINGS versions:use-releases'
                sh 'mvn -s $MAVEN_SETTINGS --batch-mode release:prepare'
            }
        }                                   
    }
}

}

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Решение этой проблемы может решить использование декларативной общей библиотеки Jenkins. См. Расширение с помощью общих библиотек

Создайте GenericMavenRelease.groovy в папке библиотеки - vars и вставьте этот код

def call(body){
    //evaluate the body block, and collect configuration into the object
    def config = [:]
    def builder
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()


    pipeline{
        agent any
        stages{
            stage('Maven_Microservices'){
                steps{
                        checkout([$class: 'GitSCM', 
                        branches: [[name: "*/${env.BRANCH}"]], 
                        doGenerateSubmoduleConfigurations: false, 
                        extensions: [[$class: 'CleanBeforeCheckout'], 
                        [$class: 'RelativeTargetDirectory', relativeTargetDir: "${projectName}"]], 
                        submoduleCfg: [], 
                        userRemoteConfigs: [[credentialsId: 'autouser',
                        url: "ssh://mygerrit:29418/maven/${projectName}"]]])

                        container('maven') {                 
                        configFileProvider([configFile(fileId: 'maven_settings', variable: 'MAVEN_SETTINGS')]) {
                          dir("${projectName}") {
                            sh 'mvn -s $MAVEN_SETTINGS versions:update-parent'
                            sh 'mvn -s $MAVEN_SETTINGS versions:resolve-ranges'
                            sh 'mvn -s $MAVEN_SETTINGS versions:use-releases'
                            sh 'mvn -s $MAVEN_SETTINGS --batch-mode release:prepare'
                          }
                        }
                }
            }
            }
    }

}

Создайте Jenkinsfile, как показано ниже в каждом репозитории

@Library('maven-library@1.0.0') _
GenericMavenRelease {
}

Таким образом, вы следуете за DRY - не повторяйте себя и создайте код с несколькими хранилищами с одним конвейерным кодом

1 голос
/ 10 мая 2019

Не уверен на 100%, нужен ли вам этот ответ, но вы имеете в виду нечто подобное?

('maven_microservice_1', 'maven_microservice_2').each { projectName ->

  stage("${projectName}") {
    steps {

      checkout([$class: 'GitSCM', 
        branches: [[name: "*/${env.BRANCH}"]], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'CleanBeforeCheckout'], 
        [$class: 'RelativeTargetDirectory', relativeTargetDir: "${projectName}"]], 
        submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: 'autouser',
        url: "ssh://mygerrit:29418/maven/${projectName}"]]])

      container('maven') {                 
        configFileProvider([configFile(fileId: 'maven_settings', variable: 'MAVEN_SETTINGS')]) {
          dir("${projectName}") {
            sh 'mvn -s $MAVEN_SETTINGS versions:update-parent'
            sh 'mvn -s $MAVEN_SETTINGS versions:resolve-ranges'
            sh 'mvn -s $MAVEN_SETTINGS versions:use-releases'
            sh 'mvn -s $MAVEN_SETTINGS --batch-mode release:prepare'
          }
        }
      }                                   
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...