Jenkins 进阶篇 - 权限配置
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 进阶篇 - 权限配置的更多相关文章
- Jenkins 进阶篇 - 权限案例实践
为了演示方便,我这里创建了如下的一些任务,各个任务由包含在对应的目录中树形结构大概如下: jenkins-authority 目录类型任务 ├── dev-project-group 目录类型任务 │ ...
- Jenkins 进阶篇 - 节点配置
当我们使用 Jenkins 构建的项目达到一定规模后,一个 Jenkins 服务可能承受不了负载,会导致很多的构建任务堆积,严重的话还会拖垮这台服务器,导致上面的服务无法使用.例如我们公司目前在 Je ...
- Jenkins 基础篇-凭证配置
我们在正式开始使用 Jenkins 之前还要先配置一些凭证,这些凭证的作用主要是用于认证,例如我们要从代码仓库拉取代码,就需要用到代码仓库的账号密码或者密钥:我们要登录远程服务器也需要用户名密码或者密 ...
- Jenkins 1.x权限配置(兼容2.x)
说明: 1.x版本的jenkins默认是没有任何权限限制,任何人都可以访问. 需要用到的插件: [Role-based Authorization Strategy] 具体配置: 0.设置Jenkin ...
- Jenkins进阶-用户权限管理(10)
在版本发布的由于大家的分工不同,所以想通过控制用户的账号达到权限管理,对每个角色进行权限控制,最初通过"项目矩阵授权策略"的策略对每个项目进行单一的权限控制,当时也满足了效果,随着 ...
- Jenkins 基础篇 - Server 配置
我们使用 Jenkins 部署服务之前要先配置我们的目标服务器,配置目标服务器也很简单,就是将服务器的 IP.账号密码或者账号密钥配置在 Jenkins中.在演示服务器配置之前我们要先知道 Linux ...
- Jenkins 进阶篇 - 任务关联
有时候我们的一个任务里面会进行很多的步骤,例如构建一个后端的 Java 服务,可能会有代码静态扫描,静态扫描通过后会打包成 jar 或者 war 文件,打包成功后可能还会对制品进行存档备份,然后可能会 ...
- Jenkins 进阶篇 - 数据备份
随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...
- Jenkins 进阶篇 - 参数化构建
我们在构建任务时经常会遇到这样的情景,一个任务配置好了以后,在后面的构建过程中,又会修改一些配置.例如,我们构建项目的代码可能是拉取指定的分支或者是Tag进行构建,又或者是在构建是需要指定特定的运行平 ...
随机推荐
- 005.Python条件if语句
一 流程控制 流程控制的定义 流程:代码执行的过程 流程控制:对代码执行过程的管控 流程控制三大结构: 顺序结构:从上到下,代码依次执行 分支结构: 一共4个 循环结构:while for 分支结构 ...
- linux系统的负载详解
系统的平均负载 如何理解平均负载 单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数. 平均负载多少合理 核心数 平均负载 含义 4 2 有50%的cpu是空闲状态,见 ...
- REST 架构风格详解
什么是 REST 架构风格 REST(Representational State Transfer)是表述性状态转移.分布式超媒体软件的一种架构风格,它基于使用 HTTP.URI 等现有的广泛流行的 ...
- Python3冒泡排序
练习:将路径为 D:\data.txt 的文件读取,并取出数字部分进行排序(不能使用内置排序方法),这里我们使用冒泡排序法 文件读取并取出数字部分(略) 一:什么叫冒泡排序 冒泡排序(Bubble S ...
- Jsoup_Select 选择器
Jsoup_Select 选择器 一,概述 可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数 ...
- android设置时钟
<TextClock android:id="@+id/timeText" android:layout_width="match_pa ...
- Netty 框架学习 —— Netty 组件与设计
Channel.EventLoop 和 ChannelFuture 这一节将对 Channel.EventLoop 和 ChannelFuture 类进行讨论,它们组合在一起,可以被认为是 Netty ...
- 为鸿蒙OS说两句公道话(我对鸿蒙OS的一些看法)
为鸿蒙说两句公道话 今天看了鸿蒙系统的评测,看完后我感觉很欣慰,为什么这么说 ? 不是很多人吐槽鸿蒙是 Android 套壳吗 ?或者叫鸿蒙 UI 吗?说鸿蒙没有自己的核心技术.看了鸿蒙系统的设计,底 ...
- AI推理与Compiler
AI推理与Compiler AI芯片编译器能加深对AI的理解, AI芯片编译器不光涉及编译器知识,还涉及AI芯片架构和并行计算如OpenCL/Cuda等.如果从深度学习平台获得IR输入,还需要了解深度 ...
- Camera噪声问题
Camera噪声问题 Camera RGB 域的噪声 以上部分属于sensor processing,接下来的部分属于color.luminance processing. gamma gamma是在 ...