【问题标题】:How git merge works for multibranch pipeline?git merge 如何用于多分支管道?
【发布时间】:2019-08-22 06:27:57
【问题描述】:

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

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

master: 1. 构建 2.测试 3.部署到PROD 4. 用电子邮件告诉所有人

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

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

从第 1 天开始,master 具有用于生产版本的 Jenkinsfiledevelop 使用相同的 Jenkinsfile 内容进行了分支,进行了更改以部署到 DEV 并删除了最后一步,即提交更改。 第 2 天:feature-1 分支 develop,进行了更改以删除部署步骤并提交。

feature-1 完成时,我们将feature-1 合并到develop 分支中,因为删除最后一步的提交是在开发提交之后日期的,这将导致自动合并并将“开发” " 分支未部署。当develop 合并到master 时也会发生同样的情况

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

【问题讨论】:

    标签: jenkins continuous-integration multibranch-pipeline


    【解决方案1】:

    实施一些流控制 (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' }

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

    【讨论】:

    • 谢谢!这是多分支管道的设计用途吗?如果是,这与静态脚本有何不同(在 jenkin 中硬编码为配置代码)
    • 我想是的,它是设计使然,它至少对我有用。我的奴隶是 Windows、RedHat、AIX 和 SunOS,在我的情况下维护脚本将是一场噩梦,但如果它对你有意义,为什么不正确。
    【解决方案2】:

    你可以使用类似的条件语句

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

    更多信息见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2019-08-23
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多