运行 jenkinsfile 中的多个分支具有其他条件
Run multiple branches in jenkinsfile with other conditions
我有一个 jenkinsfile,其中包含构建最新代码并将其部署到暂存服务器的所有步骤。现在我需要修改它以支持构建到生产。但是构建到生产环境只能手动完成,Jenkins 无法自动启动它。
所以我有两个不同的分支:开发和掌握。
develop 分支将用于构建到 staging,master 分支用于生产。对于 master 分支,我需要手动启动管道,而对于 develop 分支,它可以完全自动完成(在一天的固定时间)。
为了方便将我的代码升级到生产环境,我希望只有一个 jenkinsfile,它是不同分支中彼此的副本(因此生产环境的 jenkinsfile 不能在合并后被 develop 分支的 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()
}
}
}
我相信您正在尝试合并 Jenkinsfile 以部署暂存和生产以简化管道。
首先为生产环境定义steps/stages,只有当分支是master时才启用它们。
if env.BRANCH_NAME == "master" {
EXECUTE STEPS
}
通过这种方式,您可以为主分支和开发分支实现相同的 Jenkinsfile。 这些steps/stage不会在master分支之外的其他分支执行。
除此之外,您还可以像这样指定提交者以提升到生产环境。
input message: ''Deployment looks good?', ok: 'deploy to Production', submitter: 'USERID'
希望这对您有所帮助。谢谢!
我有一个 jenkinsfile,其中包含构建最新代码并将其部署到暂存服务器的所有步骤。现在我需要修改它以支持构建到生产。但是构建到生产环境只能手动完成,Jenkins 无法自动启动它。
所以我有两个不同的分支:开发和掌握。 develop 分支将用于构建到 staging,master 分支用于生产。对于 master 分支,我需要手动启动管道,而对于 develop 分支,它可以完全自动完成(在一天的固定时间)。
为了方便将我的代码升级到生产环境,我希望只有一个 jenkinsfile,它是不同分支中彼此的副本(因此生产环境的 jenkinsfile 不能在合并后被 develop 分支的 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()
}
}
}
我相信您正在尝试合并 Jenkinsfile 以部署暂存和生产以简化管道。
首先为生产环境定义steps/stages,只有当分支是master时才启用它们。
if env.BRANCH_NAME == "master" {
EXECUTE STEPS
}
通过这种方式,您可以为主分支和开发分支实现相同的 Jenkinsfile。 这些steps/stage不会在master分支之外的其他分支执行。
除此之外,您还可以像这样指定提交者以提升到生产环境。
input message: ''Deployment looks good?', ok: 'deploy to Production', submitter: 'USERID'
希望这对您有所帮助。谢谢!