我有一份Jenkins的工作,要构建我的GitHub代码库的master分支。当我将提交推送到master时,它会很好地触发,我对此感到非常高兴。
我也希望有一个单独的Jenkins工作,可以在这个存储库中构建任何其他分支。也就是说,每当我将提交推送到一个分支(不是master)时,我希望使用这个Jenkins作业来构建那个分支,并且只构建那个分支。
使用GitHub pull-request插件需要我创建一个pull-request,并将我的提交与master合并。我希望在不创建pull-request的情况下这样做,并且只构建我的提交,而不将其与master合并。
设置Git插件来构建所有分支意味着每当我推送到master时,所有分支都会构建。我只想构建一个已经修改过的分支。
在Jenkins中可以做到这一点吗?
发布于 2016-10-06 06:22:48
我也有同样的问题,所以我建立了一个虚拟项目进行实验,并找到了解决方案。结果发现,是的,您只能构建被推入的分支。
简短的答案是使用“分支说明符”。例如origin/feature**。
如果您正在使用GitFlow,并且您的所有功能分支都使用feature/前缀命名,那么这就是解决方案。
如果你好奇,这是我是怎么弄明白的。
在存储库的设置中,我使用Jenkins https://<jenkin server>/github-webhook/设置了服务钩子“Github plugin”。请注意,至少对我来说,由于某种原因,在按下测试“”之后,发送的有效负载的消息从未更改,以确认它已被接收/确认或其他任何东西。也许没有回复。这很让人困惑但不管怎样..。
我创建了一个新的Jenkins作业,并将分支说明符设置为 -which Jenkins,然后自动设置为**。
我创建了一个功能分支feature/foo并将其推入其中。
触发了
master上,feature/foo分支上也触发了Build 2。因此,使用**或空白说明符,无论何时推送到某个repo的所有分支上,插件都会触发这些构建。
然后我尝试使用pattern refs/heads/feature/foo,并将另一个更改推送到feature/foo分支。
feature/foo分支上触发。还可以,但这太死板了。这将迫使我们为每个功能分支都有一个构建作业。我想为所有的功能分支使用一个构建任务。
然后,我尝试了一个带有模式refs/heads/feature\*\*的通配符,并将更改推送到feature/foo。
然后我尝试了分支说明符refs/heads/feature/\*\*并进行了推送。
然后,我看到在“通配符”部分下的“分支说明符”字段的帮助下显示如下:
语法的形式为:
REPOSITORYNAME/BRANCH。此外,BRANCH被识别为*/BRANCH的简写,*被识别为通配符,**被识别为包含分隔符/的通配符。因此,origin/branches*将匹配origin/branches-foo,但不匹配origin/branches/foo,而origin/branches**将同时匹配origin/branches-foo和origin/branches/foo。
所以我尝试了origin/feature**
在origin/feature/foo.上启动了
尤里卡!似乎不能对引用使用通配符(以refs/开头),但可以对实际分支的名称(以origin/开头)使用通配符。
然后,我创建了分支feature/bar并将其推送到它。为了验证是否只会构建这个分支,而不是其他也以feature/开头的分支。
在origin/feature/bar.上启动了
看起来差不多就在那里。只需要再做几个测试。
然后,我将另一个更改推给了origin/master
激发了
然后,我将另一个更改推送到feature/bar,以测试是否只会构建此分支。尽管origin/master也被推入了。
在feature/bar.
我觉得挺不错的。
发布于 2015-04-01 22:23:27
您可以看到使用Jenkins配置多个分支的插件。使用该方法可以从Jenkins获得任何分支的反馈。
https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin
我希望它能有所帮助。
发布于 2017-09-26 17:24:40
发现Build Trigger部分中列出了whitelist配置:


在这里,您可以指定构建/测试PR将合并到哪个分支。
https://stackoverflow.com/questions/27403576
复制相似问题