Jenkins配置基於角色的專案許可權管理

iTech發表於2016-02-16

轉自: http://www.cnblogs.com/gao241/archive/2013/03/20/2971416.html, 版權歸原作者。 

本文將介紹如何配置jenkins,使其可以支援基於角色的專案許可權管理。

由於jenkins預設的許可權管理體系不支援使用者組或角色的配置,因此需要安裝第三發外掛來支援角色的配置,本文將使用Role Strategy Plugin,介紹頁面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin

一、配置外掛

安裝外掛後,進入系統設定頁面,配置如下:

官網上安全域設定為Servlet容器代理,實際操作發現Jenkins專有使用者資料庫也是可以的。

二、配置許可權

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

1、管理角色(Manage Roles

選擇該項可以建立全域性角色、專案角色,並可以為角色分配許可權。

如上圖,分別建立了adminanonymous兩個全域性角色,Online Programtest兩個專案角色。

專案角色與全域性角色的區別就是,專案角色只能管理專案,沒有管理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可以為使用者分配所屬角色,可以分配全域性角色和專案角色。

如上圖,將不同的使用者分別分配給不同的角色,這樣使用者就可以具有角色所擁有的許可權。

三、深入瞭解

該外掛從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將恢復為安全矩陣方式授權。

相關文章