使用Jenkins根据条件部署到分段和生产

时间:2017-11-16 15:41:28

标签: jenkins deployment continuous-integration jenkins-pipeline continuous-deployment

我的项目有一个运行顺利的Jenkins文件。问题是我只需要在某些情况下运行一些命令。我正在使用Github插件。我只需要在master或新标签中运行部署,一个用于登台,另一个用于生产。

pipeline {
  agent any
  stages {
    stage('Test') {
      steps {
        sh 'node -v'
        sh 'yarn install'
        sh 'yarn test -- --coverage'
      }
    }
    stage('Build') {
      steps {
        sh 'yarn build'
      }
    }
    stage('Deploy') {
      steps {
        sh 'aws s3 sync ./build s3://my.bucket --only-show-errors'
      }
    }
  }
}

我需要将master部署到存储桶以及何时是新标记到另一个存储桶。如何创建此条件?

1 个答案:

答案 0 :(得分:0)

以下两个独立部署方案的两个条件如何?我认为最好使用变量来指示部署方案,而不是将其拆分为两个截然不同的步骤。例如,您可以编写一个shell脚本来处理内部的所有内容,具体取决于标记/分支/您需要的任何内容,而不是强迫您自己在管道级别上控制它。

每个阶段只有在when部分满足时才执行它的步骤。阶段Deploy仅适用于master分支,而阶段Deploy_NonMaster仅适用于任何非主分支。使用when条件中编写的方法,您可以检查任何内容,包括标签或诸如此类的内容。

stage ('Deploy') {

        when {
            expression {
                GIT_BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
                return (GIT_BRANCH == 'master')
            }
        }
        steps {
            echo 'Do stuff/deploy.'
        }
    }
stage ('Deploy_NonMaster') {

        when {
            expression {
                GIT_BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
                return !(GIT_BRANCH == 'master')
            }
        }
        steps {
            echo 'Do stuff/deploy.'
        }
    }