Jenkins 在 Linux 上的多用户协作实践
一 架构与总体思路
- 在 Linux 上,Jenkins 的多用户协作通常由两层构成:
- Linux 系统层:创建专用的 UNIX 用户与用户组(如 ci 组、jenkins 用户),规范目录与进程权限,避免多人共用高权限账户;
- Jenkins 应用层:启用安全域与授权策略,使用 Role-based Authorization Strategy 插件按“全局角色 / 项目角色 / 节点角色”进行细粒度授权,实现项目隔离与最小权限。以上做法既提升安全性,也便于团队协作与审计。
二 系统层安全与用户隔离
- 创建专用用户与组,并规范目录权限(示例以 ci 组为例):
sudo groupadd ci
sudo useradd -g ci jenkins
sudo mkdir -p /data/software
sudo chown -R jenkins:ci /data/software
- 如需变更 Jenkins 运行用户(避免直接使用 root),在 Debian/Ubuntu 可编辑 /etc/default/jenkins,设置例如:
JENKINS_USER=jenkins-admin
并同步调整相关目录属主后重启服务:sudo chown -R jenkins-admin:jenkins-admin /var/lib/jenkins /var/cache/jenkins /var/log/jenkins
sudo systemctl restart jenkins
- 原则:服务进程以最小权限的专用系统用户运行,项目/工具目录按组共享并设置合适的 umask/gid,实现“人-系统-凭据”解耦与隔离。
三 Jenkins 应用层用户与权限模型
- 启用安全与用户管理
- 进入 Manage Jenkins → Configure Global Security:
- 勾选 启用安全;
- 安全域选择 Jenkins 专有用户数据库(如需开放注册,可临时勾选“允许用户注册”);
- 授权策略选择 Role-Based Strategy 并保存。
- 安装并启用 Role-based Authorization Strategy 插件
- 路径:Manage Jenkins → Manage Plugins → Available,搜索并安装;重启后在 Manage Jenkins → Manage and Assign Roles 进行角色与用户的绑定。
- 角色设计与分配要点
- Global roles(全局角色):控制 Overall/管理/凭据/节点 等全局能力,建议仅给管理员 Administer,为普通用户授予 Overall/Read 等最小权限;
- Project roles(项目角色):按项目命名空间隔离,使用 Pattern 正则匹配任务,例如:
- 模式 Roger-.* 匹配以 Roger- 开头的任务;
- 模式 .*world 匹配以 world 结尾的任务;
- 文件夹可用 ^foo/bar.*;
常见权限包括 Job/Run/Credentials 的 Build、Cancel、Configure、Create、Delete、Read、Workspace、Replay、Tag 等;
- Node roles(节点角色):控制 Agent/从节点 相关操作;
- 在 Assign Roles 中将用户或用户组绑定到相应角色,实现“项目到人”的精细化授权与隔离。
四 协作流程与凭证管理
- 用户与项目生命周期
- 管理员在 Manage Users 创建账号;
- 依据项目命名规范创建 Folder/Job,并为对应项目角色授予所需权限(如 dev-.* → 开发组、test-.* → 测试组);
- 用户登录后仅能发现/构建/配置被授权的项目,实现 A 项目与 B 项目 的天然隔离。
- 凭据与代码访问
- 在 Manage Credentials 中集中管理 SSH 私钥、用户名/密码、Secret text 等;
- 典型方式:
- SSH Username with private key(配合 Git over SSH);
- Username with password(配合 Git over HTTPS);
- 服务器侧需安装 git 等依赖,确保拉取与构建流程顺畅。
五 常见故障与应急
- 误回收管理员权限导致无法登录
- 匿名无 Read 权限导致页面空白或 403
- 检查 全局角色 是否为普通用户授予了 Overall/Read,以及项目角色是否匹配到相应任务;必要时为临时排查授予最小 Read 权限后再收敛。