繁体   English   中英

如何在Pull Request Merge事件中在Jenkins中触发构建并忽略特定用户的提交?

[英]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

它看起来像这样: 有效负载必须为JSON

然后我们可以转到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM