为什么 "continuous-integration/jenkins/pr-merge" 没有被 GitHub 在拉取请求中触发?
Why is "continuous-integration/jenkins/pr-merge" not being triggered by GitHub on a pull request?
在 GitHub Enterprise 中,我们在组织 A 下有项目 A。当我向项目 A 提交 PR(拉取请求)时,continuous-integration/jenkins/pr-merge
被触发,其中 运行 是 Jenkins管道来构建代码和执行单元测试。如果单元测试失败,这允许我们防止 PR 被合并到 master 中。
例如,这是我在 GitHub 中的项目 A 的 PR 中看到的内容,其中包括一个损坏的单元测试:
现在我正在尝试将组织 B 下的项目 B 配置为以相同的方式运行。但是,它不起作用。这是我在 GitHub 的项目 B 的 PR 中看到的内容,其中包括损坏的单元测试:
请注意项目 B 的 PR 没有启动 continuous-integration/jenkins/pr-merge
。
项目A和项目B的配置
GitHub -> 设置 -> 分支 -> 分支保护规则
GitHub 中的项目 A 有一个 master
的分支保护规则,只启用了一个设置:
- 合并前需要拉取请求审查
有趣的是,“合并前需要通过状态检查”设置未启用。出于好奇,我启用了它(没有保存它)并注意到“continuous-integration/jenkins/pr-merge”作为一个选项出现在它下面。
我将项目 B 配置为对 master
具有完全相同的分支保护规则,仅启用“合并前需要拉取请求审查”。出于好奇,我启用了“合并前需要通过状态检查”(没有保存),它甚至没有显示 continuous-integration/jenkins/pr-merge
作为选项。它只是说“未找到状态检查。抱歉,我们在上周找不到此存储库的任何状态检查。”
GitHub -> 设置 -> 挂钩 -> Webhooks
GitHub 中的项目 A 的 webhook 配置为:
- 有效载荷URL
https://jenkins.mycompany.com/github-webhook/
- 内容类型
application/json
- 让我 select 个别事件:检查拉取请求、推送、存储库
- 有效:选中
我使用完全相同的设置为项目 B 创建了一个 webhook。在我为项目 B 提交 PR 后,我在项目 B 的 webhook 的“最近交付”下看到几个项目带有绿色复选标记和“200”响应代码,所以我认为它配置正确。
CloudBees Jenkins 企业
在 Jenkins Enterprise 中,项目 A 的管道类型为“GitHub 组织”,并具有以下设置:
- API 端点:kubernetes-cbs-automation (https://git.mycompany.com/api/v3)
- 凭据:[特定于项目 A 的凭据]
- 所有者:[项目 A 的 GitHub 组织]
- 行为:存储库:按名称过滤(使用正则表达式):正则表达式:[项目 A 的 GitHub 存储库名称]
- 行为:在存储库中:从源发现拉取请求:策略:将拉取请求与当前目标分支修订合并
- 项目识别器:管道 Jenkinsfile:脚本路径:ci-cd/jenkins/ProjectA-pipeline.groovy
- 属性策略:所有分支获得相同的属性
- 扫描组织触发器:“如果没有,则定期 运行”已检查:间隔:1 天
- 孤立项目策略:选中“丢弃旧项目”
- 子项孤立项策略:策略:继承
- 儿童扫描触发器:“如果没有,则定期 运行” 已检查:间隔:1 天
- 自动触发分支项目:要自动构建的分支名称:.*
我在 Jenkins Enterprise 的“GitHub 组织”类型的项目 B 下创建了一个项目,具有相同的设置(除了项目 A 的任何特定设置被适当的项目 B 特定设置替换)。
什么是wrong/missing?
鉴于项目 B 的 GitHub PR 未能启动 continuous-integration/jenkins/pr-merge
,似乎我缺少某些配置。不幸的是,我们的 GitHub/Jenkins 管理员无法找出问题所在。
更新
我们已经确认项目 B 在提交 PR 时实际上是在 Jenkins 代理上启动构建。问题是 GitHub 没有在 PR 的网页上显示 continuous-integration/jenkins/pr-merge
。我们需要它,以便在构建失败时可以阻止 PR,也可以让我们快速查看哪里出了问题。
将我们在评论中得到的解决方案作为答案发布。
问题是在 Jenkins 中使用令牌的用户没有正确级别的访问权限,无法对存储库进行 post 状态检查。
组织和项目之间的差异
- OrgA/ProjectA - 用户是组织 (OrgA) 的 成员,也添加到具有读取访问权限的回购协议的协作者部分,以及团队的成员,对回购本身(项目A)具有写入权限。
- OrgB/ProjectB - 用户是组织 (OrgB) 的 成员,也是回购本身 (ProjectB) 的合作者部分,但 读取权限.
这导致了 projectB 状态检查的问题没有填充来自构建的 Jenkins 信息:
continuous-integration/jenkins/pr-merge
GitHub 存储库的状态检查中缺失。
总结:
在 GitHub 和 Jenkins 之间建立连接时,我们需要为令牌的用户持有者提供所需的访问权限。
在这种情况下,我们要更新需要 Write access level:
的 github 状态
用户的令牌应具有范围repo:status
在 GitHub Enterprise 中,我们在组织 A 下有项目 A。当我向项目 A 提交 PR(拉取请求)时,continuous-integration/jenkins/pr-merge
被触发,其中 运行 是 Jenkins管道来构建代码和执行单元测试。如果单元测试失败,这允许我们防止 PR 被合并到 master 中。
例如,这是我在 GitHub 中的项目 A 的 PR 中看到的内容,其中包括一个损坏的单元测试:
现在我正在尝试将组织 B 下的项目 B 配置为以相同的方式运行。但是,它不起作用。这是我在 GitHub 的项目 B 的 PR 中看到的内容,其中包括损坏的单元测试:
请注意项目 B 的 PR 没有启动 continuous-integration/jenkins/pr-merge
。
项目A和项目B的配置
GitHub -> 设置 -> 分支 -> 分支保护规则
GitHub 中的项目 A 有一个 master
的分支保护规则,只启用了一个设置:
- 合并前需要拉取请求审查
有趣的是,“合并前需要通过状态检查”设置未启用。出于好奇,我启用了它(没有保存它)并注意到“continuous-integration/jenkins/pr-merge”作为一个选项出现在它下面。
我将项目 B 配置为对 master
具有完全相同的分支保护规则,仅启用“合并前需要拉取请求审查”。出于好奇,我启用了“合并前需要通过状态检查”(没有保存),它甚至没有显示 continuous-integration/jenkins/pr-merge
作为选项。它只是说“未找到状态检查。抱歉,我们在上周找不到此存储库的任何状态检查。”
GitHub -> 设置 -> 挂钩 -> Webhooks
GitHub 中的项目 A 的 webhook 配置为:
- 有效载荷URL
https://jenkins.mycompany.com/github-webhook/
- 内容类型
application/json
- 让我 select 个别事件:检查拉取请求、推送、存储库
- 有效:选中
我使用完全相同的设置为项目 B 创建了一个 webhook。在我为项目 B 提交 PR 后,我在项目 B 的 webhook 的“最近交付”下看到几个项目带有绿色复选标记和“200”响应代码,所以我认为它配置正确。
CloudBees Jenkins 企业
在 Jenkins Enterprise 中,项目 A 的管道类型为“GitHub 组织”,并具有以下设置:
- API 端点:kubernetes-cbs-automation (https://git.mycompany.com/api/v3)
- 凭据:[特定于项目 A 的凭据]
- 所有者:[项目 A 的 GitHub 组织]
- 行为:存储库:按名称过滤(使用正则表达式):正则表达式:[项目 A 的 GitHub 存储库名称]
- 行为:在存储库中:从源发现拉取请求:策略:将拉取请求与当前目标分支修订合并
- 项目识别器:管道 Jenkinsfile:脚本路径:ci-cd/jenkins/ProjectA-pipeline.groovy
- 属性策略:所有分支获得相同的属性
- 扫描组织触发器:“如果没有,则定期 运行”已检查:间隔:1 天
- 孤立项目策略:选中“丢弃旧项目”
- 子项孤立项策略:策略:继承
- 儿童扫描触发器:“如果没有,则定期 运行” 已检查:间隔:1 天
- 自动触发分支项目:要自动构建的分支名称:.*
我在 Jenkins Enterprise 的“GitHub 组织”类型的项目 B 下创建了一个项目,具有相同的设置(除了项目 A 的任何特定设置被适当的项目 B 特定设置替换)。
什么是wrong/missing?
鉴于项目 B 的 GitHub PR 未能启动 continuous-integration/jenkins/pr-merge
,似乎我缺少某些配置。不幸的是,我们的 GitHub/Jenkins 管理员无法找出问题所在。
更新
我们已经确认项目 B 在提交 PR 时实际上是在 Jenkins 代理上启动构建。问题是 GitHub 没有在 PR 的网页上显示 continuous-integration/jenkins/pr-merge
。我们需要它,以便在构建失败时可以阻止 PR,也可以让我们快速查看哪里出了问题。
将我们在评论中得到的解决方案作为答案发布。
问题是在 Jenkins 中使用令牌的用户没有正确级别的访问权限,无法对存储库进行 post 状态检查。
组织和项目之间的差异
- OrgA/ProjectA - 用户是组织 (OrgA) 的 成员,也添加到具有读取访问权限的回购协议的协作者部分,以及团队的成员,对回购本身(项目A)具有写入权限。
- OrgB/ProjectB - 用户是组织 (OrgB) 的 成员,也是回购本身 (ProjectB) 的合作者部分,但 读取权限.
这导致了 projectB 状态检查的问题没有填充来自构建的 Jenkins 信息:
continuous-integration/jenkins/pr-merge
GitHub 存储库的状态检查中缺失。
总结:
在 GitHub 和 Jenkins 之间建立连接时,我们需要为令牌的用户持有者提供所需的访问权限。
在这种情况下,我们要更新需要 Write access level:
的 github 状态用户的令牌应具有范围repo:status