我有一个Jenkins工作来构建我的GitHub仓库的master
分支。当我将提交推送到master
时,它会很好地触发,我对它非常满意。
我还希望有一个Jenkins工作,可以在此存储库中构建任何其他分支。即无论何时我将提交推送到分支(不是master
),我都希望让这个Jenkins工作来构建该分支,并且只有那个分支。
使用GitHub pull-request插件需要我创建一个pull-request,并将我的提交与master
合并。我想在不创建拉取请求的情况下执行此操作,并且仅在不将其与master
合并的情况下构建我的提交。
设置Git插件来构建所有分支意味着无论何时我推送到掌握,都会构建所有分支。我只想构建一个已修改的分支。
这可以在詹金斯做吗?
答案 0 :(得分:8)
我遇到了同样的问题所以我设置了一个虚拟项目进行实验并找到了解决方案。并且发现是的,你可以只构建被推入的分支。
简短的回答是使用"分支说明符" 。例如origin/feature**
。
如果您正在使用GitFlow并且所有功能分支都以feature/
前缀命名,那么这就是解决方案。
如果你在这里好奇,我是怎么想的。
从存储库的设置中,我使用Jenkins钩子https://<jenkin server>/github-webhook/
设置服务“Github插件”。
请注意,至少对我而言,在按 &#34; test&#34; 后出于某种原因,发送的有效负载的消息从未更改为确认它被收到/承认或任何东西。也许没有回复。这令人困惑,但无论如何......
我创建了一个新的Jenkins作业并将 分支说明符 设置为 空白 - 然后Jenkins会自动设置到**
。
我创建了一个功能分支feature/foo
并将其推入其中。
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-foo
和origin/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)
答案 3 :(得分:0)
实际上,似乎在Jenkins 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,您还可以选择指定要构建的分支。只需取一个分支的名称而不是主分区(默认值)。