本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理。

由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin

一、配置插件

安装插件后,进入系统设置页面,配置如下:


官网上安全域设置为Servlet容器代理,实际操作发现Jenkins专有用户数据库也是可以的。

二、配置权限

在系统管理页面点击Manage and Assign Roles进入角色管理页面:



1、管理角色(Manage Roles)

选择该项可以创建全局角色、项目角色,并可以为角色分配权限。


如上图,分别创建了admin、anonymous两个全局角色,Online Program、test两个项目角色。

项目角色与全局角色的区别就是,项目角色只能管理项目,没有管理jenkins的权限配置。

添加项目角色时,需要制定匹配项目的模式,如上图中的Pattern,官方文档介绍该选项支持正则表达式,如“Roger-.”表示所有以Roger-开头的项目,“(?i)roger-.*”表示以roger-开头的项目并且不区分大小写,如以ABC开头的项目可以配置为“ABC|ABC.*”,也可以使用“abc|bcd|efg”直接匹配多个项目。

2、创建用户

在分配角色之前需要先创建用户。

在系统管理页面,点击管理用户:



点击新建使用者可以创建新用户,如果之前有项目与scm版本管理系统(如svn、git等)连接并获取源码构建过,jenkins会从svn中读取到一些用户信息,可以在查看用户菜单中看到这些用户:



点击用户id或名称都可以修改用户信息。

3、分配角色(Assign Roles)


选择Assign Roles可以为用户分配所属角色,可以分配全局角色和项目角色。


如上图,将不同的用户分别分配给不同的角色,这样用户就可以具有角色所拥有的权限。

三、深入了解

该插件从2011年10月发布1.1.2版本后就不再维护了,因此会有一些小问题,但不影响使用,比如在分配角色后点击保存按钮时有可能会发生异常,浏览器点击后退按钮后重新提交就可以操作成功。

另外如果配置失败导致不能登录,可以通过修改配置文件恢复初始设置。

首先了解一下配置文件。

进入jenkins安装目录,用户配置信息和角色配置信息都以配置文件的形式存储。


上图中users目录存放了各个用户的配置信息,每个用户都会创建与用户名相同的文件夹,文件夹中包含config.xml文件,配置示例如下:


admin
EfowsOP9H5arYxMmuFrbPjjITgu/fjtvHib5okFJ9DmPTu/088cvHxlE9RHwVv+S
All
false
false
false
uAEYii:02e0cd0d78abf90e42b28e7d3d4fe64776ae8fa9500e379f2598cc65e1b0fb70
gaoliang@esrichina.com.cn

角色配置在$Jenkins_home/config.xml文件中,示例如下:


true
hudson.model.Hudson.Read
hudson.model.Hudson.Administer
hudson.model.View.Delete
hudson.model.Computer.Create
hudson.model.Computer.Delete
hudson.model.Hudson.RunScripts
hudson.model.View.Read
hudson.model.Run.Update
hudson.model.Item.Workspace
hudson.model.Computer.Connect
hudson.model.Computer.Configure
hudson.model.Item.Cancel
hudson.model.Item.Configure
hudson.model.Item.Discover
hudson.model.Item.Create
hudson.model.View.Configure
hudson.model.Computer.Disconnect
hudson.model.Item.Delete
hudson.model.Item.Read
hudson.model.Item.Build
hudson.model.Run.Delete
hudson.model.View.Create
hudson.scm.SCM.Tag
admin
hudson.model.Hudson.Read
anonymous
hudson.model.Item.Read
hudson.model.Item.Build
hudson.model.Run.Delete
hudson.model.Item.Workspace
hudson.model.Run.Update
hudson.scm.SCM.Tag
hudson.model.Item.Cancel
hudson.model.Item.Discover
caox
wangwh
yuh
chenjj
lim
zhangy
hudson.model.Item.Delete
hudson.model.Item.Read
hudson.model.Item.Build
hudson.model.Run.Delete
hudson.model.Item.Workspace
hudson.model.Run.Update
hudson.scm.SCM.Tag
hudson.model.Item.Cancel
hudson.model.Item.Configure
hudson.model.Item.Discover
wangwh
false
false


如果发生用户不能登录的情况,可以尝试以下几种方法解决

1、方法1

删除用户相关的目录

修改$Jenkins_home/config.xml文件:false

删除authorizationStrategy、securityRealm节点

重新启动Jenkins

使用该方法将删除Jenkins的权限管理,恢复成为初始状态。

2、方法2

修改$Jenkins_home/config.xml文件,修改授权方式为系统自带的安全矩阵方式

authorizationStrategy节点class属性修改为hudson.security.GlobalMatrixAuthorizationStrategy

配置示例如下,该示例是分配给admin用户所有权限


true
hudson.model.Computer.Configure:admin
hudson.model.Computer.Connect:admin
hudson.model.Computer.Create:admin
hudson.model.Computer.Delete:admin
hudson.model.Computer.Disconnect:admin
hudson.model.Hudson.Administer:admin
hudson.model.Hudson.Read:admin
hudson.model.Hudson.Read:anonymous
hudson.model.Hudson.RunScripts:admin
hudson.model.Item.Build:admin
hudson.model.Item.Cancel:admin
hudson.model.Item.Configure:admin
hudson.model.Item.Create:admin
hudson.model.Item.Delete:admin
hudson.model.Item.Discover:admin
hudson.model.Item.Read:admin
hudson.model.Item.Workspace:admin
hudson.model.Run.Delete:admin
hudson.model.Run.Update:admin
hudson.model.View.Configure:admin
hudson.model.View.Create:admin
hudson.model.View.Delete:admin
hudson.model.View.Read:admin
hudson.scm.SCM.Tag:admin
false
false


重新启动Jenkins

使用该方法Jenkins将恢复为安全矩阵方式授权。