【问题标题】:Using Jenkins to deploy to staging and production based on condition使用 Jenkins 根据条件部署到 staging 和 production
【发布时间】:2017-11-17 04:01:56
【问题描述】:

我的项目有一个运行流畅的 Jenkinsfile。问题是我只需要在某些情况下运行一些命令。我正在使用 Github 插件。我只需要在主标签或新标签中运行部署,一个用于暂存,另一个用于生产。

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'
      }
    }
  }
}

我需要主人部署到一个桶,当它是新标签到另一个。如何创建此条件?

【问题讨论】:

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


    【解决方案1】:

    以下如何作为两个独立部署场景的两个条件?我认为最好使用变量来指示部署场景,而不是将其拆分为两个截然不同的步骤。例如,您可以编写一个 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.'
            }
        }
    

    【讨论】:

    • 这将在任何分支上部署提交。我需要主人和标签发布,这可能吗?
    • @IbnClaudius,修改了答案以包括对when 条件如何工作的解释。请注意!(GIT_BRANCH == 'master') in Deploy_NonMaster` 阶段,它明确指出该阶段是为除 master 以外的分支执行的。
    • 但我需要在 master 和 github 标签版本上部署更改。在主部署到暂存和标记到生产。您的 Jenkinsfile 中的哪个位置是仅在标签上运行的条件?
    • @IbnClaudius 你可以使用git describe HEAD 而不是在expression 中检索分支名称。然后,如果有标签 - 做其他事情而不是没有标签。
    • 您的解决方案会找出是否有新标签(而不是仅仅有标签)吗?因为据我了解,这将是部署到生产的适当触发器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2019-04-27
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多