如何让 Jenkins 仅在从 bitbucket 触发时更改了功能分支时才构建功能分支



我有一个 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/.+)$

相关内容

最新更新