Jenkins 多用户及权限分配

在公司团队使用 Jenkins 来做 CI/CD 时,DevOps 循环走一圈下来,通常需要研发人员、测试人员、运维人员、售后人员等多种角色参与。那么 Jenkins 作为一款几乎贯穿始终的工具,面向不同的部门、不同的角色,提供不同的服务和访问权限是必须的。

从协作角度来说,Jenkins 工具上有多个任务,每个任务又有多个团队成员负责各自的工作,配置多个账户,在工作场景中是协作的基本要求。

从权限角度来说,如研发人员,需要具备创建任务、配置任务、工作区读写的权限;测试人员需要配置配置任务的权限,但不需要工作区读写的权限;A 项目的成员,不希望 B 项目的成员访问其 Jenkins 任务;不同的团队性质,不同角色需要的权限也不尽相同。

用户管理

登陆 Jenkins 管理员账户后,在左侧菜单栏中点击“系统管理”,在系统管理中点击“管理用户”,可以看到目前仅有1个管理员用户。

接下来,我们来添加一个新用户。

添加新用户

  1. 点击该账户的设置按钮,可以进行修改密码、邮箱等操作。

jenkins给用户指定项目权限 jenkins 用户权限_权限管理

  1. 点击左侧“新建用户”,进入新建用户页面,输入新建用户的信息。

jenkins给用户指定项目权限 jenkins 用户权限_权限管理_02

  1. 填写完成后,点击“新建用户”。
  2. 回到用户列表,新建的用户会显示在列表中,同样可以点击右侧设置按钮对用户信息进行修改完善。

完成上述步骤,我们就可以使用新建用户来登陆 Jenkins 并且创建任务了,但是,所有的用户权限都是相同的,每个用户都可以操作全部 Jenkins 面板,这显然不同角色是没必要的,也是不安全的。所以,需要接着对用户的权限进行配置,请继续看下文。

用户权限

Jenkins 本身,并不支持对用户进行权限管理,这一点确实有点令人遗憾。PS:我分析可能是 Jenkins 的插件是分丰富,而且权限管理插件已经做的十分优秀,那 Jenkins 本身可能就没必要再开发权限管理功能了。

启动权限插件

这里我们需要安装一款权限管理插件:“Role-based Authorization Strategy”。

Jenkins 的插件安装方法,请学习《Jenkins 插件管理》Jenkins 插件管理链接

插件安装完成后,需要配置使能该插件来接管权限管理。

  1. 插件安装完成之后,在 Jenkins “系统管理”–>“全局安全配置”
  2. jenkins给用户指定项目权限 jenkins 用户权限_新建用户_03

  3. 在“全局安全配置中”–>“授权策略”–>勾选 “Role-Based Strategy”

jenkins给用户指定项目权限 jenkins 用户权限_Jenkins_04

  1. 点击“保存”

配置角色

  1. 回到“系统管理面板”,点击 “Manage and Assign Roles”,进入权限策略配置页面

jenkins给用户指定项目权限 jenkins 用户权限_Jenkins_05

  1. 首先需要管理角色,即创建具备相应权限特征的角色,然后再角色分配给具体用户,或者说将用户设置为某个角色。点击 “Manage Roles”,进入管理角色页面。

jenkins给用户指定项目权限 jenkins 用户权限_jenkins给用户指定项目权限_06

管理角色页面分为三部分,分别是 “Global roles” 全局角色,“Project roles” 项目角色,“Slave roles” 从属角色

Global roles

Global roles(全局角色):主要控制与 Jenkins 工具本身相关的权限,角色可以具体访问 Jenkins 的那些功能、凭据等。目前该栏已经含有 “admin” 角色,可以看到 “admin” 角色享有全部权限。

jenkins给用户指定项目权限 jenkins 用户权限_新建用户_07

权限解释:

添加全局角色的方法是:

在 “Role to add” 栏–>输入角色名–>点击 “Add”–>按照需求勾选权限

我这里仅勾选全部中的 “Read” 权限

jenkins给用户指定项目权限 jenkins 用户权限_新建用户_08

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”–>按照需求勾选权限

jenkins给用户指定项目权限 jenkins 用户权限_jenkins给用户指定项目权限_09

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” 设置的角色,分配给具体的用户。

jenkins给用户指定项目权限 jenkins 用户权限_jenkins给用户指定项目权限_10

全局角色分配
  1. 首先输入建好的用户名,这里觉得不够人性化,最好是可以自动获取用户列表,通过下拉的方式进行选择,因此在输入时务必注意用户名的准确性;
  2. 点击 “Add” 添加用户到角色
  3. 按照需求,勾选该用户对应的 “Global roles”,例如这里勾选了 “helloglobal” 则表示 “hello2019” 用户的全局角色为 “helloglobal”。

jenkins给用户指定项目权限 jenkins 用户权限_Jenkins_11

任务角色分配
  1. 首先输入用户名,点击 “Add” 添加用户到角色;
  2. 按照需求,勾选该用户对用的 Projects roles,例如这里勾选了 helloproject 则表示 hello2019 用户的任务角色为 helloproject,在角色管理中 helloproject 为以 world 结尾的任务的一些权限,那么 hello2019 用户将只能看到和操作以 world 结尾的任务了。

jenkins给用户指定项目权限 jenkins 用户权限_jenkins给用户指定项目权限_12

节点角色分配

最后还有一个 Node roles,其实对应 Manager roles 中的 Slave Roles。这里看到并没有角色也是因为在 “Manage roles” 中没有配置 “Slave Roles” 的原因

jenkins给用户指定项目权限 jenkins 用户权限_jenkins给用户指定项目权限_13

最后,点击底部的“保存”,权限配置完成。

多用户登陆测试

重新打开 Jenkins 或注销原管理员用户,使用新用户 “hello2019” 登录。

jenkins给用户指定项目权限 jenkins 用户权限_jenkins给用户指定项目权限_14

登录后,看到的页面与管理员账户确有不同

jenkins给用户指定项目权限 jenkins 用户权限_权限管理_15

我们点击任务 “hellowolrd“ 进入任务页面,也与管理员页面有所不同

jenkins给用户指定项目权限 jenkins 用户权限_新建用户_16

这里页面能够显示或操作的任务,就是在 Projects roles 中使能的权限。

Jenkins的多用户操作,就介绍到这里。