Jenkins系列-Jenkins用戶權限和角色配置


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

下載插件

 

進入jenkins的插件管理,講下好的hpi文件上傳:

 

 配置插件

安裝插件后,進入系統設置頁面,配置如下:

 

 

官網上安全域設置為Servlet容器代理,實際操作發現Jenkins專有用戶數據庫也是可以的。

配置權限

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

 

 

進入之后:

 

1、管理角色(Manage Roles)
選擇該項可以創建全局角色、項目角色,並可以為角色分配權限。

 

各種權限如下(在配置頁面將鼠標放到該權限上即可查看幫助):

Overall(全局) Credentials(憑證) Slave(節點) Job(任務) View(視圖)
Administer Read RunScripts UploadPlugins ConfigureUpdateCenter Create Update View Delete ManageDomains Configure Delete Create Disconnect Connect Build Create Delete Configure Read Discover Build Workspace Cancel Create Delete Configure Read
管理員(最大) 閱讀 運行腳本 升級插件 配置升級中心 創建 更新 查看 刪除 管理域 配置 刪除 創建 斷開連接 連接 構建 創建 刪除 配置 閱讀 重定向 構建 查看工作區 取消構建 創建 刪除 配置 閱讀

如上圖,分別創建了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或名稱都可以修改用戶信息。

 

選擇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將恢復為安全矩陣方式授權。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM