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. 标准Gitlab命令行操作指导

    gitlab是一个分布式的版本仓库,总比只是一个本地手动好些,上传你的本地代码后后还能web GUI操作,何乐不为? 贴上刚刚搭建的gitlab,看看git 如何操作标准命令行操作指导 1.命令行操作 ...

  2. 第7讲 | ICMP与ping:投石问路的侦察兵

    第7讲 | ICMP与ping:投石问路的侦察兵 ping 是基于 ICMP 协议工作的.ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议. ...

  3. Locust性能测试工具核心技术@task和@events

    Tasks和Events是Locust性能测试工具的核心技术,有了它们,Locust才能称得上是一个性能工具. Tasks 从上篇文章知道,locustfile里面必须要有一个类,继承User类,当性 ...

  4. 解决mysql无法远程连接的问题

    前言 最近开发中遇到一个问题,mysql在服务器本地可以登录,但是远程通过3306端口却不可以.这个问题困扰了我一周之久,终于在今天解决了.在解决的过程中试了很多的方法,遂记录下来,希望能给大家一些提 ...

  5. 书列荐书 |《黑天鹅·如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著

    你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...

  6. 批量执行异步任务CompletionService

    批量执行异步任务CompletionService 核心思想,就是将异步结果放入到阻塞队列中,然后再消费队列,实现异步任务批量执行 接口方法说明 Future<V> submit(Call ...

  7. Xilinx FPGA全局介绍

    Xilinx FPGA全局介绍 现场可编程门阵列 (FPGA) 具有诸多特性,无论是单独使用,抑或采用多样化架构,皆可作为宝贵的计算资产:许多设计人员并不熟悉 FPGA,亦不清楚如何将这类器件整合到设 ...

  8. MindSpore算子支持类

    MindSpore算子支持类 Q:在使用Conv2D进行卷积定义的时候使用到了group的参数,group的值不是只需要保证可以被输入输出的维度整除即可了吗?group参数的传递方式是怎样的呢? A: ...

  9. Spring Cloud系列(六):配置中心

    在使用Spring Boot的时候,我们往往会在application.properties配置文件中写一些值,供应用使用,这样做的好处是可以在代码中引用这些值,当这些值需要作出修改的时候,可以直接修 ...

  10. 十二、iptables基本管理

    关闭firewalld,启动iptables服务 [root@proxy ~]# systemctl stop firewalld.service     //关闭firewalld服务器 [root ...