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

时间:2018-03-28 14:18:54

标签: jenkins github jenkins-plugins webhooks pull-request

我正在记录自己的经验,它已经很长很多但很值得,随着我们的开发团队的成熟,CI / CD变得越来越复杂,我们因为DevOps需要采取行动,我发现缺乏明确的简单指令关于如何实现这一点,所以我正在分享我的步骤,希望我可以节省一些其他宝贵的时间来专注于重要的细节而不是实现细节。不幸的是,我们有很多移动部件涉及至少一种源代码管理工具(GitHub或BitBucket或其他)和我们的CI / CD工具(在这种情况下是Jenkins),以下是基于Github存储库和webhooks触发的Jenkins服务器使用插件generic-webhook-trigger-plugin

2 个答案:

答案 0 :(得分:1)

首先,我将从SCM方面开始(Github),我们有一个回购,我们需要进入回购并配置钩子

enter image description here

当我使用jenkins插件generic-webhook-trigger-plugin时,我将设置此webhook以调用它的特定端点:

https://myjenkins.com/generic-webhook-trigger/invoke?token=AAABBBCCC

它看起来像这样:Payload must be JSON

然后我们可以去Jenkins我假设您已经安装了generic-webhook-trigger插件的Jenkins服务器,所以我将重点介绍如何配置Jenkins Job:

我的工作配置(此工作的相关部分)如下所示: enter image description here

这就是我的工作看起来的样子,基本上它会忽略一个名为“Jenkins”的用户提交的所有提交,你可以根据你的有效载荷进行调整。

,其中 $ .commits [0] .committer.name =“Jenkins”,这就是GitHub webhook提供有效载荷的方式。

$ COMMITTER是Post内容参数部分中定义的变量

最重要的部分:

^((?!jenkins).)*$这是正则表达式,负面评估以排除该jenkins用户

它可以扩展到更多这样的用户: ^((?!jenkins|anotherUser).)*$

更新:由于我们正在进行标记和推送,因此每次调用的有效负载都不同,因此您需要将帖子内容参数的expression部分设置为:

$.head_commit.committer.name代替$.commits[0].committer.name

答案 1 :(得分:0)

我错过了一个部分,即拉动请求合并逻辑,这显然非常特定于工作流程并且非常普遍,因此驱动这个的逻辑是你需要限制你的SCM(在我的情况下是github) )只应使用Pull Requests对特定分支进行合并。

我正在使用单主干开发,所以我有一个development分支,这是我设置的限制,我的webhook被配置为对该分支上的推送事件作出反应,从而触发希望詹金斯建立起来。

对特定用户的限制,当你因任何原因需要从作业更改提交到你的存储库时,在我的情况下我更新正在构建的工件的版本,这个设置的整个想法是避免无限循环场景,你有触发器直接提交到你的分支,因此触发器启动一个构建,构建提交到repo,从而触发另一个构建,所以来回。

重要的是要指出Jenkins用户(在我的情况下是一个服务帐户)有权在没有Pull请求的情况下直接提交开发,因此它可以推送标签以及与工件版本相关的更改。

问候。

EN