【问题标题】:Run multiple branches in jenkinsfile with other conditions使用其他条件在 jenkinsfile 中运行多个分支
【发布时间】:2018-05-04 09:13:44
【问题描述】:

我有一个 jenkins 文件,其中包含构建最新代码并将其部署到我们的登台服务器的所有步骤。现在我需要修改它以支持构建到生产。但是构建到生产环境只能手动完成,Jenkins 无法自动启动它。

所以我有两个不同的分支:develop 和 master。 开发分支将用于构建到暂存和主分支到生产。对于主分支,我需要手动启动管道,而对于开发分支,它可以完全自动完成(在一天中的固定时间)。

为了便于将我的代码升级到生产环境,我希望在不同的分支中只有一个 jenkinsfile 是彼此的副本(因此在合并后不能用开发分支的 jenkinsfile 覆盖生产 jenkinsfile)。

如何在 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()
        }
    }
}

【问题讨论】:

    标签: jenkins-pipeline multibranch-pipeline


    【解决方案1】:

    我相信您正在尝试整合 Jenkinsfile 以用于暂存和生产部署以简化管道。

    首先定义生产环境的步骤/阶段,只有当分支是主分支时才启用它们

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

    通过这个,您可以为主分支和开发分支实现相同的 Jenkinsfile。 这些步骤/阶段将不会为除主分支之外的其他分支执行。

    除此之外,您还可以指定提交者以像这样推广到生产环境

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

    希望这会有所帮助。谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多