我有一个 Jenkins 工作,它构建与"origin/feature/**"匹配的分支。
Bitbucket 会在通过存储库挂钩 (https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management) 对存储库进行更改时触发要构建的作业。
每当功能分支发生更改时,作业都会识别出分支已更改并生成它,这就可以正常工作。
但是,当提交到非功能分支(例如,合并到开发或主分支)时,bitbucket 仍会触发作业。任何功能分支都没有更改,因此它只是再次构建最后一个构建的功能分支。
有没有办法控制这种情况?
经过一番研究,我终于找到了一个很好的解决方案:
- 在你的 Jenkins 上安装 Bitbucket 插件
- 将一个普通的帖子作为钩子添加到您的 Bitbucket 存储库(设置 -> 钩子)并使用以下 url:
https://呵呵。詹金斯。服务器:端口/位桶钩/
- 按如下方式配置 Jenkins 项目:
- 在"生成触发器"下,启用将更改推送到 BitBucket 时的生成
- 在"源代码管理"下,选择"GIT";输入凭据并定义要生成的分支(如 **功能/*)
通过这种方式,我有三个构建项目,一个用于所有功能,一个用于开发,一个用于发布分支。
答案在您链接到的评论部分。Bitbucket 将始终调用您的作业的钩子。
你需要在 Jenkins 前面有一个代理来隔离帖子。
https://github.com/oveddan/gitBuildForwarder
如果这是SVN,我会告诉你如何改变SVN钩子,只根据正则表达式过滤有选择地触发钩子。
因为我无法回答评论顶部(为什么)
"你是对的,但我想在詹金斯管道工作中做"
为了让管道作业在推送后自动构建(每个钩子),我创建了另一个作业,该作业配置为仅由 bitbucket/git 触发,并且有一个后续作业,该作业指向构建后操作中的管道作业。这是我能做到这一点的唯一方法
你可以使用通用的Webhook触发器插件来做到这一点。
- 将分支名称从 JSON 有效负载解析为变量,如
reference
。 - 可选的筛选器文本可以设置为
$reference
,筛选器正则表达式设置为^(refs/heads/feature/.+)$