Запускать несколько веток в jenkinsfile с другими условиями - PullRequest
0 голосов
/ 04 мая 2018

У меня есть файл jenkins, содержащий все шаги для сборки и развертывания новейшего кода на нашем промежуточном сервере. Теперь мне нужно изменить это, чтобы поддержать строительство для производства. Но сборка для производства может быть выполнена ТОЛЬКО вручную, и Jenkins не может запустить ее автоматически.

Итак, у меня есть две разные ветви: развивай и властвуй. Развивающая ветвь будет использоваться для постройки и промежуточной ветки для производства. Для основной ветки мне нужно запустить конвейер вручную, а для развивающей ветви это можно сделать полностью автоматически (в фиксированное время дня).

Чтобы упростить модернизацию моего кода до рабочей версии, я хочу иметь только один jenkinsfile, который является копией друг друга в разных ветвях (поэтому рабочий jenkinsfile не может быть перезаписан с помощью jenkinsfile of development branch после объединения).

Как мне добиться этого в jenkinsfile?

Мой текущий файл jenkinsfile выглядит так:

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        bat 'mvn clean package -Dmaven.test.skip=true'
            }
        }
    stage('Unit/Integration Test') {
      parallel {
        stage('All Tests') {
          steps {
            bat 'mvn verify'
                    }
                }
            }
        }
     stage('SonarQube analysis') { 
      when {
                branch 'develop'
            }
      steps {
        withSonarQubeEnv('SonarQube') { 
         bat 'mvn sonar:sonar'
                }
            }
        }
     stage("SonarQube Quality Gate") { 
      when {
                branch 'develop'
            }
      steps {
        timeout(time: 10, unit: 'MINUTES') { 
        script {
            sleep 120
           def qg = waitForQualityGate() 
           if (qg.status != 'OK') {
             error "Pipeline aborted due to quality gate failure: ${qg.status}"
                        }
                    }
                }
            }
        }
    stage('Deploy Staging') {
     parallel {
     stage('Deploy APAC') {
     when {
                branch 'develop'
                    }
      steps {
        script {
           build job: 'APAC Staging', parameters: []
                        }
                    }
                }

         stage('Deploy NASA') {
     when {
                branch 'develop'
                    }
      steps {
        script {
           build job: 'NASA Staging', parameters: []
                        }
                    }
                }

         stage('Deploy EMEA') {
     when {
                branch 'develop'
                    }
      steps {
        script {
           build job: 'EMEA Staging', parameters: []
                        }
                    }
                }
            }
        }
    }
     post { 
        always { 
            cleanWs()
        }
    }
}

1 Ответ

0 голосов
/ 04 мая 2018

Я полагаю, что вы пытаетесь консолидировать файл Jenkinsfile для развертывания как для подготовки, так и для производства , чтобы упростить конвейер.

Сначала определите этапы / этапы для производственной среды и включите их, только если ветвь является главной .

if env.BRANCH_NAME == "master" {
    EXECUTE STEPS
}

Таким образом, вы можете получить один и тот же Jenkinsfile для основной и развивающей веток Эти шаги / этапы не будут выполняться для других ветвей, кроме главной ветви.

Наряду с этим вы можете указать отправителя для продвижения в производственную среду, например .

input message: ''Deployment looks good?', ok: 'deploy to Production', submitter: 'USERID'

Надеюсь, это поможет. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...