使用 Jenkins 根据情况部署到暂存和生产环境

问题描述 投票:0回答:2

我的项目有一个运行流畅的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
2个回答
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.'
        }
    }

0
投票

您需要使用 Jenkins 的多分支管道功能来完成此操作。查看此文档 https://www.jenkins.io/doc/tutorials/build-a-multibranch-pipeline-project/#add-deliver-and-deploy-stages-to-your-pipeline

© www.soinside.com 2019 - 2024. All rights reserved.