![](/img/trans.png)
[英]How can i block the user to merge pull-request on Bitbucket if the jenkins build gets failed
[英]How can I trigger a build in Jenkins on a Pull Request Merge event and ignore commits from a specific user?
我正在记录自己的经历,这是一个漫长而又令人担忧的经历,但是值得,随着我们的开发团队的成熟,CI / CD变得越来越复杂,因此,作为DevOps的我们需要采取行动,我发现缺乏明确的简单说明来说明如何实现这种事情,所以我分享自己的步骤,希望我可以节省一些其他宝贵的时间,将精力集中在重要细节上,而不是实现细节上。 不幸的是,我们有很多动人之处,涉及至少一种源代码管理工具(GitHub或BitBucket或其他)和我们的CI / CD工具(在本例中为Jenkins),以下内容基于Github存储库,并带有触发Webhooks的webhooks。 Jenkins服务器使用插件generic-webhook-trigger-plugin
。
首先,我将从SCM端(Github)开始,我们有一个仓库,我们需要进入仓库并配置钩子
当我使用jenkins插件generic-webhook-trigger-plugin
我将设置此webhook为其调用特定端点:
https://myjenkins.com/generic-webhook-trigger/invoke?token=AAABBBCCC
然后我们可以转到Jenkins,假设您已经安装了generic-webhook-trigger
插件,正在运行Jenkins服务器,因此我将重点介绍如何配置Jenkins Job:
这就是我的工作的样子,基本上它将忽略用户名为“ Jenkins”的用户所做的所有提交,您可以根据有效负载进行调整。
$ .commits [0] .committer.name =“ Jenkins”,这是GitHub webhook交付有效负载的方式。
$ COMMITTER是“发布内容参数”部分中定义的变量
最重要的部分是:
^((?!jenkins).)*$
是正则表达式,对它进行负面评估以排除该jenkins用户
它可以扩展为更多用户,例如: ^((?!jenkins|anotherUser).)*$
更新 :由于我们既要标记也要推送,因此每次调用的有效载荷都不同,因此您需要将发布内容参数的expression
部分设置为:
$.head_commit.committer.name
代替$.commits[0].committer.name
我错过了一个部分,即请求合并逻辑,这显然是特定于工作流的,并且非常普遍,因此,驱动该逻辑的原因是您需要限制合并的SCM(在我的情况下为github)仅应使用“拉取请求”对特定分支进行操作。
我也正在使用单主干开发,所以我有一个development
分支,这是我设置的限制。因此,我的webhook配置为对该分支上的推送事件做出反应,从而触发了钩子,并希望Jenkins构建。
对特定用户的限制是,当您出于任何原因需要从作业更改提交到存储库时,在我的情况下,我将更新所构建工件的版本,此设置的整个思想是避免无限循环场景,在这种情况下您将触发器直接提交到您的分支,从而该触发器开始构建,该构建提交到存储库,从而触发另一个构建,依此类推。
重要的是要指出,Jenkins用户(在我的情况下为服务帐户)有权直接提交以进行开发,而无需Pull请求,因此它可以推送标记并进行与工件版本相关的更改。
问候。
EN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.