Jenkins 多分支流水线: 如何创建用于 Jenkins 状态检查的 GitHub 应用

使用 Jenkins 多分支流水线时,您可以将状态检查与 GitHub 拉取请求集成。

以下是状态检查的示例

要实现这些类型的状态检查,您需要创建一个与 Jenkins 主实例集成的 GitHub 应用。

在本博客中,我们将介绍如何创建一个 GitHub 应用,以便在流水线中启用状态检查。

创建 GitHub 应用

要创建 GitHub 应用,请选择您的 GitHub 个人资料,然后转到"设置",如下所示。

向下滚动并选择开发者设置

然后点击 New GitHub App 按钮创建一个新的 GitHub 应用

您需要在配置中填写以下详细信息。

  1. GitHub 应用名称:此名称必须是唯一的。例如,jenkins-auth-app。请将其替换为所需的名称。
  2. 主页 URL:输入您的 Jenkins URL。
  3. Webhook URL:包含 webhook 路径的 Jenkins URL(http://3.107.8.66:8080/github-webhook/)

在"仓库权限"下,从下拉菜单中选择以下权限。

  1. 管理:只读
  2. 检查:读写
  3. 提交状态:读写
  4. 内容:只读(用于在 git fetch 期间读取 Jenkinsfile 和仓库内容)。
  5. 元数据:只读
  6. 拉取请求:只读

在"订阅事件"下,选择以下事件:

  1. 检查运行
  2. 检查套件
  3. 拉取请求
  4. 推送
  5. 代码库

创建应用程序后,您将看到生成私钥的通知,如下所示。

单击生成私钥选项,然后单击生成私钥按钮,如下所示。

它会下载一个私钥。

现在,您需要使用以下命令将密钥转换为 Jenkins 可以使用的格式。将 key-in-your-downloads-folder.pem 替换为您下载的私钥。

复制代码
ninjamac@ip-192-168-1-95 key % openssl pkcs8 -topk8 -inform PEM -outform PEM -in rockjenkinsgithubapp.2025-04-18.private-key.pem -out converted-github-app.pem -nocrypt 

我们需要将转换后的密钥添加到 Jenkins 凭证中。

安装 Github 应用

现在,在应用配置页面上,您将看到一个名为"安装应用"的选项,如下所示。点击该选项即可为所有仓库启用此应用。

您可以选择所需的全部或单个存储库,然后单击"安装"。

将私钥添加到 Jenkins 凭证

现在,我们需要将转换后的 PEM 密钥添加到 Jenkins 凭证中。

前往 Jenkins 主页 --> 管理 Jenkins --> 凭证。

在"凭据"下,选择全局选项。

然后,选择"添加凭据"选项以添加新凭据。

现在,您需要选择"类型"为"GitHub 应用"。

我们还需要 Github 应用 ID。您可以从 Github 应用配置中获取它,如下所示。

在key字段中,添加我们之前转换好的converted-github-app.pem私有文件内容,然后点击Create按钮,如下图所示。

差不多就是这样了。

现在,您可以在多分支管道中使用此凭证来启用 PR 期间的检查。

提交PR验证Jenkins status

修改readme文件,然后commit到develop分支,然后创建PR到master分支。

这时github 会通过github app来通知Jenkins webhook,触发PR pipeline

从下面的示例中可以看到有一个状态检查已经成功,单还有一个状态还没有完成。

我们还可以在github -repo上设置分支保护rule: 在合并之前启用状态检查

总结

通过安装github app,你在通过github创建一个拉取请求的时候,会通过Jenkins webhook触发Jenkins PR 流水线,Jenkins 会将流水线的状态上报给github,这样可以确保该PR请求在从 Jenkins 构建作业获取所需的状态检查通知之前不会合并,通过与保护分支规则结合,你可以确保分支被合并之前必须通过所有的状态检查,从而有效地保护分支。

相关推荐
miofly20 小时前
百度开源ERNIE 5.5 Flash Base,总参数280B仅激活14B
开源·github
dong_junshuai21 小时前
每天一个开源项目#154 Nushell:结构化管道怎样跨过文本边界
github
Jason_gao9991 天前
Github Copilot 新手极速上手指南
人工智能·github·copilot
GitHub实测笔记1 天前
hexyl 本机实测:8MiB 转储中位 102ms、od 696ms(约 6.8×);默认双面板,NO_COLOR 下要 --color=force
github
MoRay1 天前
放弃云端 Computer Use,我用 Python 手搓了一个带“物理防呆”的本地 GUI Agent 底座
python·github
用户2991422196801 天前
GitHub 热榜项目:日榜(2026-11-07)
人工智能·开源·github
拖累斯1 天前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug
无人生还别怕1 天前
如何搭建docker仓库(轻量级)registry
linux·运维·docker·云原生·容器·registry·openanolisos
分布式存储与RustFS1 天前
Hudi 表想摆脱 HDFS 绑定?用 Spark + Hudi 直接写进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
逐流人1 天前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops