Backstage系列教程 - 05 集成 Jenkins
注意:
本文档基于 Backstage 1.32.0 版本编写,并采用自 1.24.0 版本以来官方推荐使用的新后端系统(New BackEnd System)。
Backstage 仍处于不断更新发展中,本文下述步骤可能将不适用于后续更新版本。
一、开发前准备
环境要求
- ✅ 确认 Jenkins 以及 GitLab 已经成功部署并能够运行
- ✅ 确认 Jenkins 和 GitLab 能够相互 ping 通
- ✅ 确认关闭 Jenkins 的 CSRF 机制(不关闭也可以,接下来的内容也会提到不关闭时的处理方案)
- ✅ 确认 Jenkins 已经安装如下插件
必装插件:
| 插件 | 说明 |
|---|---|
| Pipeline | 流水线支持 |
| GitLab Plugin | GitLab 集成 |
| Git | Git 版本控制 |
可选插件:
| 插件 | 说明 |
|---|---|
| Kubernetes CLI Plugin | Kubernetes 支持 |
| Docker Pipeline | Docker 流水线支持 |
参考文档
- 📖 Backstage 官方 | 编写自定义操作脚手架
- 📖 Backstage 官方 | YAML 文件格式
- 📖 Jenkins | REST API
二、在前端接入 Jenkins 插件
1. 安装支持插件
从项目的根目录开始:
1 | yarn --cwd packages/app add @backstage-community/plugin-jenkins |
2. 添加到合适的位置
编辑 packages/app/src/components/catalog/EntityPage.tsx:
1 | // ... other import |
依照上面这个例子,我们将 Jenkins 前端插件添加到每一个 Service 类型的 Catalog 中。此时打开 Backstage 中的某一个 Service 类型的项目,则能够看到 Jenkins 插件的大致框架。
但是下方内容区域应该不是如图所示的,而是提示缺少配置标签。
接下来我们还需要安装后端支持来使得 Jenkins 能够显示对应的内容。
三、在后端接入 Jenkins 依赖
1. 安装依赖
从项目的根目录开始:
1 | yarn --cwd packages/backend add @backstage-community/plugin-jenkins-backend |
2. 添加依赖
编辑 packages/backend/src/index.ts:
1 | // ... other feature additions |
3. 配置 Jenkins 全局实例
在 app-config.yaml 中添加:
1 | jenkins: |
配置说明:
baseUrl:Jenkins 服务所对应的地址username:最好填写 Admin 账号的名字(也就是 admin),个人开发使用可以填写自己的账号名apiKey:username 填写的账号对应的 apiToken
4. 为单个项目添加 Jenkins 实例
编辑 examples/template/content/catalog-info.yaml:
1 | apiVersion: backstage.io/v1alpha1 |
在 examples/template/content 文件夹下的 catalog-info.yaml 文件中的 annotations 下新增一行 jenkins.io/job-full-name: $。
Jenkins 插件将根据这里提供的 Job 命名,到整个 Jenkins 服务中查找对应的 Job,返回信息并展示到前端界面中。
当然,此处给出的示例是根据创建模板项目时填写的值,你也可以改为固定的值(若需要)。
具体含义可以参考这篇文章:如何为 Backstage 编写并添加自定义模板
此时,Jenkins 服务的接入算是圆满完成了。
接下来将要根据本内部开发者平台的需求,对 Jenkins 服务进行一些定制。
四、创建自定义操作脚手架用于为项目创建对应 Job
1. 新建自定义操作脚手架模板
从项目的根目录开始:
1 | yarn new |
使用上面这个命令,我们可以从中创建很多官方提供的自定义模板。
操作步骤:
- 输入命令后,按方向键翻动,找到用于新建一个 action 脚手架的选项
- Enter 键选中
- 为这个脚手架取一个名字(例如此处可以取名为:
backstage-jenkins) - Enter 键确认
- 等待脚手架及其依赖安装完成
2. 整理操作脚手架结构
将插件脚手架整理为如下的结构:
1 | plugins/backstage-jenkins/ |
说明:
actions/jenkins.ts:整个操作脚手架的逻辑部分index.ts和module.ts:负责将 jenkins.ts 中的内容向外暴露
3. 编写操作脚手架业务逻辑
编辑 src/actions/jenkins.ts:
1 | import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; |
代码逻辑说明:
在这里的例子中,按照非注释内容走通的逻辑为:
在关闭 Jenkins 服务的 CSRF 防御机制的情况下,通过创建项目模板时填写的数据:
- 先解析为一个正确的 repoUrl
- 再通过拥有者的用户名到 Jenkins Credentials 中查找该用户对应的 GitLab Credentials ID
- 将信息填充至准备好的一个 pipeline job 模板中
- 通过该模板,并使用 admin 账户的 token,完成对 job 的创建
注释的业务逻辑内容:
- ① 如果在开启 CSRF 机制的情况下,使用任何一个 Jenkins 的 REST API 都需要先获取一个会话 crumb,然后在 header 中带上这个 crumb 才能够去调用各个 API
- ② 使用 GitLab Webhook 实现提交时自动触发构建
4. 修改其他两个文件
module.ts
1 | import { createBackendModule } from "@backstage/backend-plugin-api"; |
注意事项:
- 主要是修改了一下函数的命名,此处修改为
JenkinsScaffolderModule - 其次就是
moduleId的命名,务必要确保是唯一的,独一无二的,并且最好是能够表示其作用的。此处是jenkins-create-job
index.ts
1 | export { JenkinsScaffolderModule as default } from './module'; |
将 index.ts 中向外暴露的函数命名改为和 module.ts 中的函数命名一致。
此时,整个 Jenkins 服务逻辑的定制也算是完成了。
五、如何调用自定义操作脚手架
在一个创建项目用的模板中的 spec: steps 下面新增如下内容:
1 | - id: jenkins-create-job |
通过上述内容,在创建项目时,将会在 Jenkins 服务器中创建与项目相同命名的 pipeline job,并会在配置中使用项目创建者的 Credentials 链接到 GitLab 对应项目。
总结:Backstage 与 Jenkins 的集成涵盖了前端展示、后端对接和自定义脚手架三个层面。通过官方插件可以快速实现基本的 CI/CD 信息展示,而通过开发自定义脚手架,我们可以将项目创建与 Jenkins Job 创建流程打通,实现真正的”一键创建项目”,大幅提升开发效率。
下一篇预告:[Backstage系列教程 06|Gitlab 和 Jenkins 的联动]
- 标题: Backstage系列教程 - 05 集成 Jenkins
- 作者: Zave
- 创建于 : 2026-08-09 16:30:00
- 更新于 : 2026-08-09 16:30:00
- 链接: https://zavex.cn/post/27310.html
- 版权声明: 版权所有 © Zave,禁止转载。