我同意,这个问题很棘手,因为Jenkins及其插件在这些年里发生了许多变化。让我告诉您我是如何完成您所要求的操作的。我将发布所有版本号(大多数是最新版本)。
Jenkins版本: 2.176.1(java -jar /usr/share/jenkins/jenkins.war --version)
插件:
- github 1.29.4
- github-api 1.9
- github-branch-source 2.5.3
- github-pullrequest 0.2.5
- pipeline-github-lib 1.0
此外,我使用Blue Ocean界面,可能会影响一些事情(谁知道呢)。
- blueocean 1.17.0
- blueocean-git-pipeline 1.17.0
- blueocean-github-pipeline 1.17.0
Github Webhooks
首先,为您的系统设置Webhooks。
这是Github Webhooks的好指南
转到您的Github存储库,然后单击“设置”选项卡。然后在左侧菜单中选择“Webhooks”:
我的Jenkins设置的URL是
https://jenkinsci.dorian.com。因此,在“有效载荷URL”框中,我放入了
https://jenkinsci.dorian.com/github-webhook/
我将设置保留为“application / json”和“发送所有内容”和“活动”
Webhooks区域有一个方便的“最近交付”部分,可以向您显示您的Webhooks是否到达Jenkins。起初,我的URL不正确,所以旁边有红色的X。现在,它们都是绿色的复选标记。
Github访问令牌
许多指南建议您向Jenkins提供个人访问令牌以与您的存储库通信。要做到这一点,转到右上角的帐户头像,选择“设置” ->“开发人员设置” ->“个人访问令牌” ->“生成令牌”。
在“选择范围”下,如果您只想让它工作,请选择列表中的每个复选框,并为描述输入任何内容。
我选择了:
- repo:status
- write:repo_hook
- read:repo_hook
- admin:org_hook
单击保存,您将看到您的秘密密钥。将其复制到安全的地方(我们很快会用到它)。
现在是Jenkins配置的难点。尝试安装我列出的所有插件。
转到Jenkins-Manage Jenkins->Configure System
找到
Github部分,然后点击添加Github服务器。
名称:Github
Api URL:
https://api.github.com
管理挂钩:true
在凭据下,点击“添加”。您将进入一个菜单。选择“Secret Text”
- 范围:全局
- 秘密:粘贴之前获取的访问令牌
- ID:(我留空了)
- 描述:DorianGithubCreds
点击保存。然后,从凭据列表中选择DorianGithubCreds。
要进行测试,请点击“测试连接”。我的返回结果为“用户dnrahamim的凭据已验证”,速率限制为4998
现在转到Github Pull Request Builder
- Github服务器API URL:https://api.github.com
- Jenkins URL覆盖:(留空)
- 共享密钥:(留空)
- 凭证:DorianGithubCreds
- 自动管理Webhooks:true
- 其他所有内容都为空
配置作业
转到应该构建您的存储库的作业
在左侧菜单中选择“配置”
在项目-> Github组织下
- 凭证:DorianGithubCreds
- 所有者:Dorian
- 行为:
- 发现分支
- 从源发现拉取请求
- 从分支发现拉取请求
- 策略:将拉取请求与当前目标分支修订合并
- 信任:来自具有管理或写入权限的用户
- 项目识别器
- 管道Jenkinsfile
- 路径:Jenkinsfile(我的Jenkinsfile位于项目根目录中)
- 构建策略:(故意空白)
通知
现在,当我发起拉取请求时,或每当我发布对拉取请求的更改时,Jenkins会为该分支运行新的构建。
Github中的拉取请求本身还在底部列出了其“状态检查”。当构建处于挂起状态时,状态检查为黄色。如果成功,它会得到绿色的勾号。如果失败,则会得到红色的X。
我最初遇到的问题是,我有一个旧的Jenkins服务器,它也配置了管理Github Webhooks和构建Pull Requests。它的构建失败了,因此它的通知是唯一成功到达我的Pull Request的。我通过阻止旧的Jenkins服务器构建我的最新分支来解决了这个问题。一旦旧的Jenkins服务器停止构建,新的Jenkins服务器的通知就能够传递到Github。
总之,这就是我有意配置的所有内容。请尝试使用我的配置并查看是否适用于您。如果我漏掉了什么,请告诉我。
配置Jenkins与Github的难点在于,虽然有许多指南,但建议经常相互冲突,并且很多已经过时(有时甚至官方文档也已过时)。
尽管如此,这里还是提供一些资源:
- 这是一个有关Github Webhooks的好指南
- Github关于与Jenkins集成CI的白皮书(它没有详细解释,但提供了很好的概述)
- Github拉取请求构建器插件
- 半官方SO帖子,用于在Github仓库上显示构建状态