如何使用Jenkins预构建分支仅合并我要合并的分支?

时间:2014-03-29 14:10:53

标签: git jenkins

我正在阅读https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures,它允许在将提交提交到主分支之前预构建功能分支,从而有效地实现预提交构建/测试队列。

Using Git, Jenkins and pre-build branch merging下说:

  

设置Jenkins项目,然后离开'分支' Git中的字段   SCM空白。这将导致Jenkins考虑任何变化   建筑分支。

     

接下来,选择一个特定的分支名称作为集成目标   '高级'部分 - (例如' master'或' stable'),并选择'合并   在构建之前'。

     

选择'将GIT标签推回原始存储库'从后期制作   操作(这是使用。更新集中式git仓库所必需的   构建的结果)。

     

现在,开发人员不应该直接提交您的集成   分支(' master'或' stable')。相反,他们应该使用   功能分支,或在提交时创建新的远程分支(例如:" git   push origin HEAD:refs / heads / myNewFeature")。你也可以设置你的   GIT存储库只接受来自集成分支的提交   詹金斯。

     

你已经完成了。提交现在应该自动与合并   集成分支(如果它们没有干净地合并,它们将会失败),以及   建成。如果构建成功,则将推送合并的结果   回到远程git仓库。

现在我经常有我想要继续开发的功能分支,并且稍后只会将它们合并到master

据我了解,此设置将合并并在构建后立即将任何功能分支推送到master

(如何)Jenkins可以支持我的用例吗,构建所有功能分支,但只合并到那些我要合并的master

2 个答案:

答案 0 :(得分:7)

我有一个构建管道,我只希望开发分支合并回我的稳定分支。所有其他人不应合并。我解决这个问题的方法是为合并创建一个单独的工作。构建作业完成后,只有在环境变量GIT_BRANCH等于'develop'时才会触发'merge'作业。

Jenkins没有一个非常好的条件触发器,它按照我想要的方式工作。以下是我如何设置构建作业以有条件地触发合并步骤。

  • 添加构建步骤以删除名为trigger.properties的文件(我使用Execute Shell构建步骤)
  • 添加构建步骤(conditional-buildstep插件)如果$ GIT_BRANCH等于“origin / develop”,则运行条件步骤(单个)。如果为true,则运行shell命令以创建trigger.properties文件。 (touch trigger.properties)
  • 添加构建后操作(参数化触发器插件)以在构建稳定时触发我的合并作业。在“参数来自属性文件”部分中,使用“trigger.properties”填写该字段。有一个选项“如果缺少任何文件,请不要触发”,所以请检查。

因此,该过程首先删除trigger.properties文件以确保先前的运行不会发生冲突。然后,检查git分支是否正在开发。如果是,请重新创建trigger.properties文件。构建后的步骤要求存在文件以便下一个作业被触发。

现在,您可以在为此完成的工作中执行您喜欢的各种合并。您还可以修改此过程,以便多个分支进入合并作业。

答案 1 :(得分:3)

您是否看过Jenkins预先测试的提交插件? https://wiki.jenkins-ci.org/display/JENKINS/Pretested+Integration+Plugin

它的设计完全符合您所描述的目的。