continuous-integration/jenkins/pr-merge
,该流水线运行Jenkins管道以构建代码并执行单元测试。这使我们能够防止单元测试失败的PR合并到主分支中。例如,在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,包括:
- Payload URL:
https://jenkins.mycompany.com/github-webhook/
- 内容类型:
application/json
- 让我选择单独的事件:已选中Pull requests、Pushes和Repositories
- 激活状态:已选中
我按照完全相同的设置为B项目创建了Webhook。在提交B项目的PR后,我在B项目的Webhook下看到了一些带有绿色勾号和“200”响应代码的“最近交付”的条目,因此我认为它已经正确配置。
CloudBees Jenkins Enterprise
在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天
- 自动分支项目触发: 自动构建的分支名称: .*
有什么问题/缺失吗?
鉴于Project B的GitHub PR无法启动continuous-integration/jenkins/pr-merge
,似乎我遗漏了某些配置。不幸的是,我们的GitHub/Jenkins管理员还没有能够找出问题所在。
更新
我们已确认,当提交PR时,Project B实际上会在Jenkins代理上启动构建。问题在于GitHub在PR网页上没有显示continuous-integration/jenkins/pr-merge
。我们需要它来阻止PR构建失败,并快速查看出错原因。
检查分支 branch-name-a 找到 'Jenkinsfile' 符合条件
...根据我的经验,在Jenkins中使用的帐户总是被指定为所有者,以便对存储库等具有正确访问权限,然后可以使用令牌范围(如repo、admin:org_hook等)来限定访问级别。 - Pamela Sarkisyan