仅构建已推送到的Git分支

时间:2014-12-10 14:31:51

标签: git github jenkins jenkins-plugins

我有一个Jenkins工作来构建我的GitHub仓库的master分支。当我将提交推送到master时,它会很好地触发,我对它非常满意。

我还希望有一个Jenkins工作,可以在此存储库中构建任何其他分支。即无论何时我将提交推送到分支(不是master),我都希望让这个Jenkins工作来构建该分支,并且只有那个分支。

使用GitHub pull-request插件需要我创建一个pull-request,并将我的提交与master合并。我想在不创建拉取请求的情况下执行此操作,并且仅在不将其与master合并的情况下构建我的提交。

设置Git插件来构建所有分支意味着无论何时我推送到掌握,都会构建所有分支。我只想构建一个已修改的分支。

这可以在詹金斯做吗?

6 个答案:

答案 0 :(得分:8)

我遇到了同样的问题所以我设置了一个虚拟项目进行实验并找到了解决方案。并且发现是的,你可以只构建被推入的分支。

简短的回答是使用"分支说明符" 。例如origin/feature**

如果您正在使用GitFlow并且所有功能分支都以feature/前缀命名,那么这就是解决方案。

如果你在这里好奇,我是怎么想的。

从存储库的设置中,我使用Jenkins钩子https://<jenkin server>/github-webhook/设置服务“Github插件”。 请注意,至少对我而言,在按 &#34; test&#34; 后出于某种原因,发送的有效负载的消息从未更改为确认它被收到/承认或任何东西。也许没有回复。这令人困惑,但无论如何......

我创建了一个新的Jenkins作业并将 分支说明符 设置为 空白 - 然后Jenkins会自动设置到**

我创建了一个功能分支feature/foo并将其推入其中。

  • 构建1被触发,但在master分支上。
  • 还在feature/foo分支上启动了构建2。

因此,对于**或空白说明符,只要推送到任何,插件就会在repo的所有分支上触发构建。

然后我尝试使用模式refs/heads/feature/foo并将另一个更改推送到feature/foo分支。

  • feature/foo分支上启动了构建3。
  • 没有其他版本被解雇。

排序好,但这太僵硬了。它会迫使我们为每个功能分支创建一个构建作业。我想为所有功能分支创建一个构建作业。

然后我尝试了一个带有模式refs/heads/feature\*\*的通配符,并将更改推送到feature/foo

  • 没有构建被解雇。

然后我尝试了分支说明符refs/heads/feature/\*\*并推送。

  • 没有构建被解雇

然后我看到 &#34; Branch Specifier&#34; 字段的帮助在&#34; Wildcards&#34;部分:

  

语法的格式为:REPOSITORYNAME/BRANCH。此外,BRANCH被识别为*/BRANCH的简写,*被识别为通配符,**被识别为包含分隔符/的通配符。因此,origin/branches*将匹配origin/branches-foo但不匹配origin/branches/foo,而origin/branches**则匹配origin/branches-fooorigin/branches/foo

所以我尝试了origin/feature**

  • origin/feature/foo上点击了Build 4。

尤里卡!似乎你不能在引用中使用通配符(从refs/开始),但可以包含实际分支的名称(以origin/开头)。

然后我创建了分支feature/bar并推送到它。要验证是否只构建了这个,而不是以feature/开头的其他分支。

  • origin/feature/bar上点击了Build 5。

几乎看着那里。只需要几个测试。

然后我将另一个更改推送到origin/master

  • 没有构建被解雇。太好了!

然后我将另一个更改推送到feature/bar,以测试只会构建此分支。尽管origin/master也已被推入。

  • feature/bar点击了Build 6。
  • 没有其他版本被解雇。

对我来说很好。

答案 1 :(得分:4)

你可以看到Jenkins的多个分支配置插件。使用该方法可以获得Jenkins任何分支的反馈。

https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin

我希望它可以提供帮助。

答案 2 :(得分:1)

发现whitelist部分中列出了Build Trigger个配置:

click advanced to expand all options

whitelist

您可以指定构建/测试PR将合并到哪个分支。

答案 3 :(得分:0)

实际上,似乎在Jenkins GitHub插件页面上确切地回答了这个问题:

Trigger a build when a change is pushed to GitHub

答案 4 :(得分:0)

就像@ thatway_3 mentioned一样,这可以通过插件实现。他们已链接到的多分支项目插件已被弃用,但您可以改用Pipeline Multibranch Plugin

如果安装该插件,然后创建“ Pipeline Multibranch”类型的新作业,则可以对其进行配置以跟踪特定的存储库。然后,它将(正确地!)从那里建立所有分支。

另请参阅:https://jenkins.io/blog/2015/12/03/pipeline-as-code-with-multibranch-workflows-in-jenkins/

希望这会有所帮助。

答案 5 :(得分:-3)

您可以在作业配置中轻松指定分支:

源代码管理部分中,您已经指定了git存储库URL,您还可以选择指定要构建的分支。只需取一个分支的名称而不是主分区(默认值)。