Jenkins配置基於角色的項目權限管理--轉

本文將介紹如何配置jenkins,使其能夠支持基於角色的項目權限管理。html

因爲jenkins默認的權限管理體系不支持用戶組或角色的配置,所以須要安裝第三發插件來支持角色的配置,本文將使用Role Strategy Plugin,介紹頁面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugingit

1、配置插件

安裝插件後,進入系統設置頁面,配置以下:正則表達式

官網上安全域設置爲Servlet容器代理,實際操做發現Jenkins專有用戶數據庫也是能夠的。數據庫

2、配置權限

在系統管理頁面點擊Manage and Assign Roles進入角色管理頁面: api

1、管理角色(Manage Roles

選擇該項能夠建立全局角色、項目角色,並能夠爲角色分配權限。瀏覽器

如上圖,分別建立了adminanonymous兩個全局角色,Online Programtest兩個項目角色。安全

項目角色與全局角色的區別就是,項目角色只能管理項目,沒有管理jenkins的權限配置。svn

添加項目角色時,須要制定匹配項目的模式,如上圖中的Pattern,官方文檔介紹該選項支持正則表達式,如「Roger-.」表示全部以Roger-開頭的項目,「(?i)roger-.*」表示以roger-開頭的項目而且不區分大小寫,如以ABC開頭的項目能夠配置爲「ABC|ABC.*」,也可使用「abc|bcd|efg」直接匹配多個項目。ui

2、建立用戶

在分配角色以前須要先建立用戶。spa

在系統管理頁面,點擊管理用戶:

點擊新建使用者能夠建立新用戶,若是以前有項目與scm版本管理系統(如svn、git等)鏈接並獲取源碼構建過,jenkins會從svn中讀取到一些用戶信息,能夠在查看用戶菜單中看到這些用戶:

點擊用戶id或名稱均可以修改用戶信息。

3、分配角色(Assign Roles

選擇Assign Roles能夠爲用戶分配所屬角色,能夠分配全局角色和項目角色。

如上圖,將不一樣的用戶分別分配給不一樣的角色,這樣用戶就能夠具備角色所擁有的權限。

3、深刻了解

該插件從201110月發佈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將恢復爲安全矩陣方式受權。

參考文獻:

http://www.cnblogs.com/gao241/archive/2013/03/20/2971416.html

https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin

http://blog.csdn.net/jmyue/article/details/9763021

相關文章
相關標籤/搜索