0

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

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

为了便于将我的代码升级到生产,我希望只有一个 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()
        }
    }
}
4

1 回答 1

1

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

首先定义生产环境的步骤/阶段,并仅在分支为 master 时启用它们

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

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

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

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

希望这可以帮助。谢谢!

于 2018-05-04T11:07:28.997 回答