git 合并如何用于多分支管道?

How git merge works for multibranch pipeline?

我正在为我的应用程序在 Jenkins 中设置一个多分支管道。我不确定签入存储库的不同 jenkinsfile 如何处理合并。

例如,我有 3 个分支,masterdevelopfeature-1,所有这些分支都需要不同的管道配置(见下文)。

master: 1.建造 2.测试 3.部署到产品 4. 用邮件告诉大家

develop: 1.建造 2.测试 3. 部署到 DEV

feature-1: 1.建造 2. 测试

从第 1 天开始,masterJenkinsfile 用于产品发布,develop 分支了相同的 Jenkinsfile 内容,进行了更改以部署到 DEV 并删除最后一步,承诺改变。 第 2 天:feature-1 分支 develop,进行更改以删除部署步骤并提交。

feature-1 完成后,我们将 feature-1 合并到 develop 分支,因为删除最后一步的提交日期在开发提交之后,这将导致自动合并并使 "develop" 分支不部署。当 develop 合并到 master

时也会发生同样的情况

基于以上潜在问题,我想我一定是在这里做错了什么,在多分支管道中管理 Jenkinsfile 的最佳实践是什么?

实施一些流量控制 (https://jenkins.io/doc/book/pipeline/syntax/#flow-control) 并在所有分支中保持相同的 Jenkinsfile

if (env.BRANCH_NAME == 'master'){ echo 'do all the things' } else if (env.BRANCH_NAME == 'develop'){ echo 'do a few things' } else if (env.BRANCH_NAME == 'feature-1'){ echo 'do a couple things' }

Jenkins 在使用多分支管道 (https://jenkins.io/doc/book/pipeline/multibranch/#additional-environment-variables) 时暴露了 BRANCH_NAME 信息。

您可以使用条件语句,例如

// Note: this is a declarative pipeline 
stage('deploy PROD'){
when { branch 'master' } 
  steps {
    ...do deploy... 
  }

}
stage('deploy DEV'){
when { branch 'develop' } 
  steps {
    ...do deploy... 
  }

}
...

有关详细信息,请参阅: