Jenkins 多用户及权限分配
在公司团队使用 Jenkins 来做 CI/CD 时,DevOps 循环走一圈下来,通常需要研发人员、测试人员、运维人员、售后人员等多种角色参与。那么 Jenkins 作为一款几乎贯穿始终的工具,面向不同的部门、不同的角色,提供不同的服务和访问权限是必须的。
从协作角度来说,Jenkins 工具上有多个任务,每个任务又有多个团队成员负责各自的工作,配置多个账户,在工作场景中是协作的基本要求。
从权限角度来说,如研发人员,需要具备创建任务、配置任务、工作区读写的权限;测试人员需要配置配置任务的权限,但不需要工作区读写的权限;A 项目的成员,不希望 B 项目的成员访问其 Jenkins 任务;不同的团队性质,不同角色需要的权限也不尽相同。
用户管理
登陆 Jenkins 管理员账户后,在左侧菜单栏中点击“系统管理”,在系统管理中点击“管理用户”,可以看到目前仅有1个管理员用户。
接下来,我们来添加一个新用户。
添加新用户
- 点击该账户的设置按钮,可以进行修改密码、邮箱等操作。
- 点击左侧“新建用户”,进入新建用户页面,输入新建用户的信息。
- 填写完成后,点击“新建用户”。
- 回到用户列表,新建的用户会显示在列表中,同样可以点击右侧设置按钮对用户信息进行修改完善。
完成上述步骤,我们就可以使用新建用户来登陆 Jenkins 并且创建任务了,但是,所有的用户权限都是相同的,每个用户都可以操作全部 Jenkins 面板,这显然不同角色是没必要的,也是不安全的。所以,需要接着对用户的权限进行配置,请继续看下文。
用户权限
Jenkins 本身,并不支持对用户进行权限管理,这一点确实有点令人遗憾。PS:我分析可能是 Jenkins 的插件是分丰富,而且权限管理插件已经做的十分优秀,那 Jenkins 本身可能就没必要再开发权限管理功能了。
启动权限插件
这里我们需要安装一款权限管理插件:“Role-based Authorization Strategy”。
Jenkins 的插件安装方法,请学习《Jenkins 插件管理》Jenkins 插件管理链接
插件安装完成后,需要配置使能该插件来接管权限管理。
- 插件安装完成之后,在 Jenkins “系统管理”–>“全局安全配置”
- 在“全局安全配置中”–>“授权策略”–>勾选 “Role-Based Strategy”
- 点击“保存”
配置角色
- 回到“系统管理面板”,点击 “Manage and Assign Roles”,进入权限策略配置页面
- 首先需要管理角色,即创建具备相应权限特征的角色,然后再角色分配给具体用户,或者说将用户设置为某个角色。点击 “Manage Roles”,进入管理角色页面。
管理角色页面分为三部分,分别是 “Global roles” 全局角色,“Project roles” 项目角色,“Slave roles” 从属角色
Global roles
Global roles(全局角色):主要控制与 Jenkins 工具本身相关的权限,角色可以具体访问 Jenkins 的那些功能、凭据等。目前该栏已经含有 “admin” 角色,可以看到 “admin” 角色享有全部权限。
权限解释:
添加全局角色的方法是:
在 “Role to add” 栏–>输入角色名–>点击 “Add”–>按照需求勾选权限
我这里仅勾选全部中的 “Read” 权限
Project roles
Project roles(项目角色):主要控制针对具体不同项目相关的权限,角色可以访问某个具体项目的凭据、任务、运行等。目前该栏默认为空
权限解释:
- 凭据权限:Create(创建)\ Delete(删除)\ Update(更新)\ View(查看);
- 任务权限:Build(构建)\ Cancel(任务取消)\ Configure(任务配置)\ Create(任务创建)\ Delete(任务删除)\ Discover(任务发现)\ Move(移动任务)\ Read(读取任务)\ Workspace(工作区访问权限);
- 运行权限:Delete(删除构建)\ Replay(重复构建)\ Update(编辑编译信息)
- SCM 权限:Tag(创建 Tag)
- Lockable Resources:暂不明确
添加项目角色的方法是:
在 “Role to add” 栏–>输入角色名–>点击 “Add”–>按照需求勾选权限
Role to add 是角色名称,Pattern 是一个任务名字的匹配正则,角色权限适用于正则匹配成功的任务。
例如:
- 将 pattern 设置为 “Roger-.*”,则该角色将匹配名称以 “Roger-” 开头的所有任务;
- 将 pattern 设置为 “.*world”,则该角色将匹配名称以 “world” 结尾的所有任务;
- 也可以匹配文件夹,可以使用以下表达式匹配文件夹 “^foo/bar.*”;
Slave roles
Slave roles (从属权限):主要控制与 Jenkins 节点有关的权限。
分配角色
配置好角色后,可以为用户分配角色了,在 “Manage and Assign Roles” 根页面,点击 “Assign Roles”,进入角色分配页面,该页面主要是将上一步 “Manage Roles” 设置的角色,分配给具体的用户。
全局角色分配
- 首先输入建好的用户名,这里觉得不够人性化,最好是可以自动获取用户列表,通过下拉的方式进行选择,因此在输入时务必注意用户名的准确性;
- 点击 “Add” 添加用户到角色
- 按照需求,勾选该用户对应的 “Global roles”,例如这里勾选了 “helloglobal” 则表示 “hello2019” 用户的全局角色为 “helloglobal”。
任务角色分配
- 首先输入用户名,点击 “Add” 添加用户到角色;
- 按照需求,勾选该用户对用的 Projects roles,例如这里勾选了 helloproject 则表示 hello2019 用户的任务角色为 helloproject,在角色管理中 helloproject 为以 world 结尾的任务的一些权限,那么 hello2019 用户将只能看到和操作以 world 结尾的任务了。
节点角色分配
最后还有一个 Node roles,其实对应 Manager roles 中的 Slave Roles。这里看到并没有角色也是因为在 “Manage roles” 中没有配置 “Slave Roles” 的原因
最后,点击底部的“保存”,权限配置完成。
多用户登陆测试
重新打开 Jenkins 或注销原管理员用户,使用新用户 “hello2019” 登录。
登录后,看到的页面与管理员账户确有不同
我们点击任务 “hellowolrd“ 进入任务页面,也与管理员页面有所不同
这里页面能够显示或操作的任务,就是在 Projects roles 中使能的权限。
Jenkins的多用户操作,就介绍到这里。