在企业项目中,Jenkins 往往同时管理多个不同前缀、不同业务线的项目,例如:
jxc-*(进销存)th-*(通号 / 测试环境)finance-*(财务系统)
如果使用 Role-Based Authorization Strategy(基于角色的权限控制)插件,就不可避免地会遇到一个问题:
👉 如何给同一个角色,授权多个不同命名规则的 Jenkins 项目?
本文将从 基础 → 进阶 → 最佳实践,一次讲清楚。
一、Jenkins 项目权限的核心机制
在 Jenkins 的 角色权限管理插件中:
- 项目权限是通过 Pattern(正则表达式) 来匹配 Job 名称的
- 使用的是 Java 正则表达式
- ❗️不是 Linux 通配符,也不是 Ant 风格
📍 配置路径一般为:
Manage Jenkins
→ Configure Global Security
→ Role-Based Authorization Strategy
→ Manage Roles
二、最基础:给角色授权单一前缀项目
示例:授权所有 jxc- 开头的项目
text
jxc-.*
含义解释:
| 部分 | 含义 |
|---|---|
jxc- |
固定前缀 |
.* |
任意字符,任意长度 |
可匹配的项目:
jxc-testjxc-backendjxc-prod-01
示例:授权所有 th- 开头的项目
text
th-.*
可匹配:
th-testth-backth-prod
三、进阶:一个角色匹配多个不同前缀项目 ⭐
场景说明
你希望一个角色 同时拥有以下项目权限:
jxc-*th-*
正确写法(推荐)
text
(jxc|th)-.*
解释:
(jxc|th):表示 jxc 或 th-.*:后面跟任意内容
✔ 可匹配项目:
jxc-testth-backendth-prod-01
再扩展一个前缀(如 finance)
text
(jxc|th|finance)-.*
四、常见错误与踩坑点(非常重要)
❌ 错误写法 1:直接用 *
text
th-*
❌ 错误原因:
*在正则中表示:重复前一个字符th-*实际含义是:th-----
👉 不会匹配任何正常项目名
❌ 错误写法 2:使用逗号分隔
text
jxc-.*, th-.*
❌ 正则中 逗号不是"或"
✅ 正确的"或"写法
text
(jxc|th)-.*
五、完整实战示例(真实配置参考)
角色:项目开发人员
Pattern:
text
(jxc|th)-.*
权限勾选建议:
- ✅ Read
- ✅ Discover
- ✅ Build
- ✅ Cancel
- ❌ Configure(可选,谨慎)
- ❌ Delete(一般不建议)
适用人群:
- 开发人员
- 测试人员
- 项目协作成员
六、权限设计最佳实践(强烈推荐)
1️⃣ 项目命名统一规范
text
<系统名>-<环境>-<模块>
示例:
jxc-dev-apith-test-webfinance-prod-job
这样正则可以非常干净:
text
(jxc|th|finance)-(dev|test)-.*
2️⃣ 一个角色 ≠ 一个项目
❌ 不推荐:
- 每个项目建一个角色
✅ 推荐:
- 按 系统 / 业务线 / 职责 建角色
- 用正则控制项目范围
3️⃣ 避免使用 .* 授权全部项目
text
.*
⚠️ 风险极高,等于 超级管理员
七、常用 Pattern 速查表
| 需求 | Pattern | ||
|---|---|---|---|
| jxc- 开头 | jxc-.* |
||
| th- 开头 | th-.* |
||
| 多前缀 | `(jxc | th)-.*` | |
| 多系统 | `(jxc | th | finance)-.*` |
| 所有项目 | .*(不推荐) |
八、总结
Jenkins 的角色权限控制,本质是正则表达式匹配 Job 名称。
记住三点就不会出错:
.*才是"任意项目名"- 多前缀用
(a|b|c) - 不要把
*当通配符用