Jenkins的授权策略

Jenkins 默认的授权策略是【登录用户可以做任何事】,也就是人人都是管理员,可以修改所有的设置以及构建所有的任务,不用做任何设置,有账号登录到 Jenkins 系统即可,这对于测试研究 Jenkins 来讲是不错的,但将这种策略用于生产环境绝对不是我们想要的。试想一下,原本很多的 Jenkins 配置信息已经设置好了,结果来了一个新手,由于不是很会使用 Jenkins,结果把 Jenkins 的设置打乱了,如果没有文档记录的话,你都不知道之前是怎么设置的。同样的,有些任务不是任何人都可以去构建的,特别是用于部署生产环境的的一些任务,随便去构建了,那就可能会部署到生产环境去,没做好控制的话很容易被误操作,这是会出生产事故的,所以做好权限控制是非常有必要的。

Jenkins 默认的授权策略显然满足不了我们的高要求,那有方式实现我们的权限精细化控制吗?肯定是有的。其实 Jenkins 除了前面说的默认“登录用户可以做任何事”的策略外还内置了其他几种授权策略:任何用户可以做任何事(没有任何限制,不登录就可以进行管理操作),安全矩阵、遗留模式、项目矩阵授权策略。其中安全矩阵策略和项目矩阵授权策略比较相似,都是对用户或组进行权限设置,但是可设置的权限还不算很细,做简单的权限控制还是够了的,但有个明显的缺点是要给所有的用户都要设置一遍。下面我将介绍另一种授权策略  Role-Based Strategy,从名称我们就可以知道这是基于角色的权限控制。

在使用 Role-Based Strategy 授权策略之前我们要先安装一个插件 Role-based Authorization Strategy。在【插件管理】的【可选插件】中过滤搜索关键词 Role,就会看到 Role-based Authorization Strategy 插件,安装好后重启下 Jenkins。Jenkins 有个很方便的重启方式,浏览器中登录到 Jenkins 系统,然后访问地址 http://jenkins_host:port/restart 确定是后就会重启 Jenkins

如下图:

Role-based Authorization Strategy 插件安装好后,在 Jenkins 的【全局安全配置】中的【授权策略】会多出【Role-Based Strategy】选项,我们将授权策略调整为【Role-Based Strategy】后保存下:

这时候在 Jenkins 的【系统管理】中会看到 【Manage and Assign Roles】的设置选项以及还有一块如下图的黄色警告。

这个警告内容翻译过来就是默认情况下,Jenkins中的构建以具有完整 Jenkins 权限的虚拟 Jenkins 系统用户身份运行。如果某些用户对某些作业有限制或没有访问权限,但可以配置其他作业,则可能会出现问题。如果是这样的话,建议安装一个实现构建身份验证的插件,并覆盖这个默认值。我这里的警告里面是一个,如果你的警告里面有两个,则需要再安装一个插件 Authorize Project。安装好 Authorize Project 插件后,去到【全局安全配置】中的【Access Control for Builds】进行如下设置,添加两个如下的配置警告就消失了:

角色和权限的设置

我们进入到【Manage and Assign Roles】,进行角色和权限设置,它的步骤是这样的:首先在【Manage Roles】里面添加角色并对角色进行赋权,然后在【Assign Roles】里面对用户进行角色指定。

在进行角色和权限分配之前我们先讲下应用场景,最常见的一个场景是,一个公司的 IT 团队中有专门做开发的,有做测试的还有做线上运维发布的,这个场景下开发者就只能去构建开发环境的任务,测试就只能去构建测试环境的任务,生产环境的任务就只能由线上运维人员进行操作。明白了场景要求我们就可以划分角色和权限了。我们可以分为三种角色:开发者角色 dev-role、测试员角色 test-role、运维员角色 prod-role,假定开发者角色就只能构建开发环境的任务,测试人员只能构建测试环境的任务,运维人员可以构建所有环境的任务。还有一点需要注意的是,角色权限的设置最终会落实到对任务的操作权限,那么任务的命名就需要规范化,因为是采用正则匹配,规范任务的命名才要写正则表达式,否则写正则表达式就会劝退不少人。

接下来就开始我们的角色权限配置,首先我们先创建几个 Jenkins 用户账号进行测试。用管理账号登录到 Jenkins 系统,去到 Jenkins 【系统管理】的【管理用户】功能设置里面新创建用户:张三、李四、王五:







我们假定张三、李四、王五分别是开发人员角色、测试人员角色和运维人员角色,他们的权限分别是张三可以构建开发环境任务、李四可以构建测试环境任务、王五可以构建开发、测试和生产环境的任务。除了构建任务和对任务的配置进行设置,他们都不能修改 Jenkins 的其他配置。创建好用户后,我们再去到【Manage and Assign Roles】的【Manage Roles】里面创建角色和配置权限。

在【Global roles】里面保持 admin 角色的权限不变,新添加 dev、test、prod 三个角色,然后将这三个角色设置上只读权限,如果不设置读取相关权限,用户登录后什么也看不到。在【Item roles】里面依旧添加 dev、test、prod 三个角色,并将所有的权限都勾选上,需要注意的是添加【Item roles】角色时还有填入 Pattern 信息,这个 Pattern 表示正则匹配哪些任务。例如我这里 dev 的角色可以管理所有名称包含 dev 关键字的任务,test 角色可以管理所有名称包含 test 关键字的任务,prod 角色可以管理所有名称包含 prod 关键字的任务,所以任务名称规范非常重要。

这里说明一下正则匹配,拿 test 角色举例。我这里 test 角色填入的 Pattern 正则表达式为 .*(?i)test.* 这表示匹配所有名称包含 test 关键字的任务,其中 test 忽略大小写,这个任务是指所有 Jenkins 的任务类型,包括目录。

点击某个 Pattern 正则会弹窗提示匹配到哪些任务:

然后在【Assign Roles】角色分配里面对用户进行角色分配,【 Global roles】和【Item roles】的设置如下,需要注意的是添加时是根据登录用户名进行设置,这里的用户名最终会显示成完整名称。

到这里角色和权限的配置已经完成了,在下一节内容中我们将用实际的项目和不同角色的用户进行演示,看看我们角色权限是否配置正确。

Jenkins 进阶篇 - 权限配置的更多相关文章

  1. Jenkins 进阶篇 - 权限案例实践

    为了演示方便,我这里创建了如下的一些任务,各个任务由包含在对应的目录中树形结构大概如下: jenkins-authority 目录类型任务 ├── dev-project-group 目录类型任务 │ ...

  2. Jenkins 进阶篇 - 节点配置

    当我们使用 Jenkins 构建的项目达到一定规模后,一个 Jenkins 服务可能承受不了负载,会导致很多的构建任务堆积,严重的话还会拖垮这台服务器,导致上面的服务无法使用.例如我们公司目前在 Je ...

  3. Jenkins 基础篇-凭证配置

    我们在正式开始使用 Jenkins 之前还要先配置一些凭证,这些凭证的作用主要是用于认证,例如我们要从代码仓库拉取代码,就需要用到代码仓库的账号密码或者密钥:我们要登录远程服务器也需要用户名密码或者密 ...

  4. Jenkins 1.x权限配置(兼容2.x)

    说明: 1.x版本的jenkins默认是没有任何权限限制,任何人都可以访问. 需要用到的插件: [Role-based Authorization Strategy] 具体配置: 0.设置Jenkin ...

  5. Jenkins进阶-用户权限管理(10)

    在版本发布的由于大家的分工不同,所以想通过控制用户的账号达到权限管理,对每个角色进行权限控制,最初通过"项目矩阵授权策略"的策略对每个项目进行单一的权限控制,当时也满足了效果,随着 ...

  6. Jenkins 基础篇 - Server 配置

    我们使用 Jenkins 部署服务之前要先配置我们的目标服务器,配置目标服务器也很简单,就是将服务器的 IP.账号密码或者账号密钥配置在 Jenkins中.在演示服务器配置之前我们要先知道 Linux ...

  7. Jenkins 进阶篇 - 任务关联

    有时候我们的一个任务里面会进行很多的步骤,例如构建一个后端的 Java 服务,可能会有代码静态扫描,静态扫描通过后会打包成 jar 或者 war 文件,打包成功后可能还会对制品进行存档备份,然后可能会 ...

  8. Jenkins 进阶篇 - 数据备份

    随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...

  9. Jenkins 进阶篇 - 参数化构建

    我们在构建任务时经常会遇到这样的情景,一个任务配置好了以后,在后面的构建过程中,又会修改一些配置.例如,我们构建项目的代码可能是拉取指定的分支或者是Tag进行构建,又或者是在构建是需要指定特定的运行平 ...

随机推荐

  1. Lua中的元表与元方法学习总结

    前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了"+"符号,就可以进行类的加法运算.在Lu ...

  2. JavaEE 三层架构模式

    什么是架构模式 要理解三层架构模式,我们得先搞清楚什么是架构模式.(这里说的架构模式是针对后端开发) 所谓架构就是系统最高级别的设计,一个系统特别复杂时才需要架构设计,如果只是开发一个很小程序,就谈不 ...

  3. 1.3Linux 终端命令格式

    Linux 终端命令格式 目标 了解终端命令格式 知道如何查阅终端命令帮助信息 01. 终端命令格式 bashcommand [-options] [parameter] 说明: command:命令 ...

  4. 8.8-9 fsck、dd

    8.8 fsck:检查并修复Linux文件系统 fsck命令用于检查并修复文件系统中的错误,即针对有问题的系统或磁盘进行修复,类似的命令还有e2fsck命令.有关fsck的使用需要特别注意的是:    ...

  5. Linux-SSH介绍与认证方式

    Linux SSH 前言: 在实际的生产环境中,运维人员经常要使用本地的计算机对远程主机进行控制工作,TCP/IP协议提供了两种协议来完成这样的操作,分别为Telnet协议和SSH协议. 由于Teln ...

  6. 在Docker中安装MongoDB

    在Docker中安装MongoDB docker run -p 27017:27017 -v /data/mongodb:/data/db --name mongodb -d mongo --auth ...

  7. Jmeter- 笔记3 - Jmeter录制功能 / 抓包

    http代理服务器录制脚本: 1.新建线程组 2.添加 http代理服务器 元件 3.http代理服务器修改: 1)端口:8899,任意给个无占用的 2)目标控制器:改成刚刚新建的线程组.不改就录制会 ...

  8. Java设计模式(1:软件架构设计七大原则及开闭原则详解)

    前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,笔主特别开了这个博客来记录自己学习的 ...

  9. Clang:LLVM的C语言家族前端

    Clang:LLVM的C语言家族前端 Clang项目为LLVM 项目的C语言家族(C,C ++,Objective C / C ++,OpenCL,CUDA和RenderScript)中的语言提供了语 ...

  10. 目标检测数据集The Object Detection Dataset

    目标检测数据集The Object Detection Dataset 在目标检测领域,没有像MNIST或Fashion MNIST这样的小数据集.为了快速测试模型,我们将组装一个小数据集.首先,我们 ...