Jenkins配置基于角色的项目权限管理

本文将介绍怎样配置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、test两个全局角色。baifei一个项目角色。

此处一定注意:全局角色admin不能删除。且必须在全局角色中创建一个仅仅有Overall/Read的角色。这个角色是分配给以下的项目角色使用的,否则。分配了项目角色的用户登录后会提示“ username is missing the Overall/Read permission”

项目角色与全局角色的差别就是,项目角色仅仅能管理项目。没有管理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能够为用户分配所属角色。能够分配全局角色和项目角色。

注意此处:必须给角色baifei分配全局角色test。否则。分配了项目角色baifei的用户登录后会提示“ username is missing the Overall/Read permission”。

在版本号1.653中,依照上面的设置了用户。但仍然提示“ username is missing the Overall/Read permission”,重新启动jenkins所在的tomcat服务后问题攻克了,不知是否是jenkins的bug。

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

三、深入了解

该插件从201110月公布1.1.2版本号后就不再维护了,因此会有一些小问题。但不影响使用,比方在分配角色后点击保存button时有可能会发生异常,浏览器点击后退button后又一次提交就能够操作成功。

另外假设配置失败导致不能登录。能够通过改动配置文件恢复初始设置。

首先了解一下配置文件。

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

上图中users目录存放了各个用户的配置信息,每一个用户都会创建与username同样的目录。目录中包括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将恢复为安全矩阵方式授权。

posted @ 2017-08-17 14:48  mfmdaoyou  阅读(1469)  评论(0编辑  收藏  举报