本文將介紹如何配置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文件,配置示例如下:
<?xml version='1.0' encoding='UTF-8'?> <user> <fullName>admin</fullName> <properties> <jenkins.security.ApiTokenProperty> <apiToken>EfowsOP9H5arYxMmuFrbPjjITgu/fjtvHib5okFJ9DmPTu/088cvHxlE9RHwVv+S</apiToken> </jenkins.security.ApiTokenProperty> <hudson.model.MyViewsProperty> <views> <hudson.model.AllView> <owner class="hudson.model.MyViewsProperty" reference="http://www.cnblogs.com/.."/> <name>All</name> <filterExecutors>false</filterExecutors> <filterQueue>false</filterQueue> <properties class="hudson.model.View$PropertyList"/> </hudson.model.AllView> </views> </hudson.model.MyViewsProperty> <hudson.search.UserSearchProperty> <insensitiveSearch>false</insensitiveSearch> </hudson.search.UserSearchProperty> <hudson.security.HudsonPrivateSecurityRealm_-Details> <passwordHash>uAEYii:02e0cd0d78abf90e42b28e7d3d4fe64776ae8fa9500e379f2598cc65e1b0fb70</passwordHash> </hudson.security.HudsonPrivateSecurityRealm_-Details> <hudson.tasks.Mailer_-UserProperty> <emailAddress>gaoliang@esrichina.com.cn</emailAddress> </hudson.tasks.Mailer_-UserProperty> </properties> </user>
角色配置在$Jenkins_home/config.xml文件中,示例如下:
<useSecurity>true</useSecurity> <authorizationStrategy class="com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy"> <roleMap type="globalRoles"> <role name="admin" pattern=".*"> <permissions> <permission>hudson.model.Hudson.Read</permission> <permission>hudson.model.Hudson.Administer</permission> <permission>hudson.model.View.Delete</permission> <permission>hudson.model.Computer.Create</permission> <permission>hudson.model.Computer.Delete</permission> <permission>hudson.model.Hudson.RunScripts</permission> <permission>hudson.model.View.Read</permission> <permission>hudson.model.Run.Update</permission> <permission>hudson.model.Item.Workspace</permission> <permission>hudson.model.Computer.Connect</permission> <permission>hudson.model.Computer.Configure</permission> <permission>hudson.model.Item.Cancel</permission> <permission>hudson.model.Item.Configure</permission> <permission>hudson.model.Item.Discover</permission> <permission>hudson.model.Item.Create</permission> <permission>hudson.model.View.Configure</permission> <permission>hudson.model.Computer.Disconnect</permission> <permission>hudson.model.Item.Delete</permission> <permission>hudson.model.Item.Read</permission> <permission>hudson.model.Item.Build</permission> <permission>hudson.model.Run.Delete</permission> <permission>hudson.model.View.Create</permission> <permission>hudson.scm.SCM.Tag</permission> </permissions> <assignedSIDs> <sid>admin</sid> </assignedSIDs> </role> <role name="anonymous" pattern=".*"> <permissions> <permission>hudson.model.Hudson.Read</permission> </permissions> <assignedSIDs> <sid>anonymous</sid> </assignedSIDs> </role> </roleMap> <roleMap type="projectRoles"> <role name="Online Program" pattern="GeoQPortal|GeoQUserPortal"> <permissions> <permission>hudson.model.Item.Read</permission> <permission>hudson.model.Item.Build</permission> <permission>hudson.model.Run.Delete</permission> <permission>hudson.model.Item.Workspace</permission> <permission>hudson.model.Run.Update</permission> <permission>hudson.scm.SCM.Tag</permission> <permission>hudson.model.Item.Cancel</permission> <permission>hudson.model.Item.Discover</permission> </permissions> <assignedSIDs> <sid>caox</sid> <sid>wangwh</sid> <sid>yuh</sid> <sid>chenjj</sid> <sid>lim</sid> <sid>zhangy</sid> </assignedSIDs> </role> <role name="test" pattern="Compress"> <permissions> <permission>hudson.model.Item.Delete</permission> <permission>hudson.model.Item.Read</permission> <permission>hudson.model.Item.Build</permission> <permission>hudson.model.Run.Delete</permission> <permission>hudson.model.Item.Workspace</permission> <permission>hudson.model.Run.Update</permission> <permission>hudson.scm.SCM.Tag</permission> <permission>hudson.model.Item.Cancel</permission> <permission>hudson.model.Item.Configure</permission> <permission>hudson.model.Item.Discover</permission> </permissions> <assignedSIDs> <sid>wangwh</sid> </assignedSIDs> </role> </roleMap> </authorizationStrategy> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>false</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
如果發生用戶不能登錄的情況,可以嘗試以下幾種方法解決
1、方法1
- 刪除用戶相關的目錄
- 修改$Jenkins_home/config.xml文件:<useSecurity>false</useSecurity>
- 刪除authorizationStrategy、securityRealm節點
- 重新啟動Jenkins
使用該方法將刪除Jenkins的權限管理,恢復成為初始狀態。
2、方法2
- 修改$Jenkins_home/config.xml文件,修改授權方式為系統自帶的安全矩陣方式
authorizationStrategy節點class屬性修改為hudson.security.GlobalMatrixAuthorizationStrategy
- 配置示例如下,該示例是分配給admin用戶所有權限
-
<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy"> <permission>hudson.model.Computer.Configure:admin</permission> <permission>hudson.model.Computer.Connect:admin</permission> <permission>hudson.model.Computer.Create:admin</permission> <permission>hudson.model.Computer.Delete:admin</permission> <permission>hudson.model.Computer.Disconnect:admin</permission> <permission>hudson.model.Hudson.Administer:admin</permission> <permission>hudson.model.Hudson.Read:admin</permission> <permission>hudson.model.Hudson.Read:anonymous</permission> <permission>hudson.model.Hudson.RunScripts:admin</permission> <permission>hudson.model.Item.Build:admin</permission> <permission>hudson.model.Item.Cancel:admin</permission> <permission>hudson.model.Item.Configure:admin</permission> <permission>hudson.model.Item.Create:admin</permission> <permission>hudson.model.Item.Delete:admin</permission> <permission>hudson.model.Item.Discover:admin</permission> <permission>hudson.model.Item.Read:admin</permission> <permission>hudson.model.Item.Workspace:admin</permission> <permission>hudson.model.Run.Delete:admin</permission> <permission>hudson.model.Run.Update:admin</permission> <permission>hudson.model.View.Configure:admin</permission> <permission>hudson.model.View.Create:admin</permission> <permission>hudson.model.View.Delete:admin</permission> <permission>hudson.model.View.Read:admin</permission> <permission>hudson.scm.SCM.Tag:admin</permission> </authorizationStrategy> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>false</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
- 重新啟動Jenkins
使用該方法Jenkins將恢復為安全矩陣方式授權。