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 构建作业获取所需的状态检查通知之前不会合并,通过与保护分支规则结合,你可以确保分支被合并之前必须通过所有的状态检查,从而有效地保护分支。

相关推荐
p***c9493 小时前
后端在微服务中的服务网关
微服务·云原生·架构
2501_941881406 小时前
Kubernetes 容器集群资源调度与弹性扩容高可用架构在互联网业务实战经验总结
云原生·容器·kubernetes
究極の法則に通じた野犬6 小时前
k8s设计理念-k8s中哪些服务要部署成StatefulSet哪些部署成Deployment
云原生·容器·kubernetes
wuxingge6 小时前
k8s集群误删node节点,怎么添加回去
云原生·容器·kubernetes
star_111212 小时前
Jenkins部署后端springboot微服务项目
spring boot·微服务·jenkins
无限进步_13 小时前
C语言数组元素删除算法详解:从基础实现到性能优化
c语言·开发语言·windows·git·算法·github·visual studio
天外飞雨18 小时前
把代码提交到github
github
happyCoder18 小时前
VS Code Git 神器:内置功能与GitLens插件使用技巧
git·github
努力进修19 小时前
跨设备文件共享零烦恼!PicoShare+cpolar让跨设备传输更简单
云原生·eureka·cpolar
lkbhua莱克瓦2420 小时前
集合进阶8——Stream流
java·开发语言·笔记·github·stream流·学习方法·集合