管道在gitlab合并请求上执行哪个分支? (合并的源/目标/结果)

时间:2019-02-13 15:38:33

标签: git jenkins merge gitlab

我们正在尝试使用Gitlab / Gitlab + jenkins构建CI。我们希望拥有的流程是:

  1. 在功能分支中更新(提交+推送)
  2. 将功能分支中的请求合并到主服务器
  3. 合并请求应检查冲突,然后触发CI作业(GitLab管道或Jenkins作业)
  4. CI作业应仅对合并结果进行操作
  5. 审阅者应查看CI作业的状态,如果成功,他可以在GitLab GUI中批准合并

当前,我们看到CI作业在源分支(要合并)上而不是在合并分支上(冲突检查之后)进行操作。如果CI成功,是否可以在合并分支上执行CI而无需推送到主节点? (仅在审核员批准后按下)

谢谢

2 个答案:

答案 0 :(得分:1)

应该可以在GitLab Pipeline或Jenkins作业中为您手动进行此操作。像

branch=`git branch | grep \* | cut -d ' ' -f2`
git checkout master
git merge $branch

然后,您可以在已经合并到主版本中的版本上运行所有测试。我相信这已经是Bors-NG之类的程序了,但是对于GitHub:

https://github.com/bors-ng/bors-ng

如果存在合并冲突,则必须中止操作,并且还必须确保功能分支和母版都在运行器/执行器上。 git repos有一些优化,您只可以使用--depth克隆/获取部分历史记录。

对于GitLab,您还可以等待他们正在调用“预期的合并管道”的功能,并且可以在此处了解更多信息:

https://gitlab.com/gitlab-org/gitlab-ee/issues/7380

尽管它们会在用户按下合并后运行,但是我认为最终结果还是一样;您需要在实际合并完成之前对合并结果进行测试。

他们将3月22日作为里程碑,所以离它不是很远!看来它将成为GitLab企业版的一部分,因此要花钱。

答案 1 :(得分:0)

如果您是詹金斯档案,这将很容易: 您可以指定每次推送到分支时要尝试建立的分支名称。 Jenkinsfile将位于您项目的根目录中,您可以添加以下代码:

    stage('Git CheckOut') {
        node  ('your node name') {

           git branch:'your branchname', credentialsId: 'yourGlobalCredentials', url: 'git@url/yourProject.git'
        }
    }

因此eveytime开发人员准备提交代码,他们可以更改分支名称,而这将是触发构建的代码

请参见approved merge request