前言
如果使用Jenkins来管理整个公司的CICD,特别是有一定规模的公司,需要严格的权限管理。因为一般公司内部有多个开发部门,每个部门又有多个产品,做权限分割是相当重要的。大家都不希望其他组的人,意外触发了自己组的Job。
本文章是给大家介绍一些Jenkins权限管理的插件。希望大家喜欢。
彩蛋在最后!!!
登录验证插件
说到Jenkins的登录验证,不得不提下面的两个插件:
- LDAP
- SAML
两个都是基于Active Directory (AD)的验证插件。只需要在Manage Jenkins -> Configure Global Security里面配置就可以了,具体细节笔者就不在这里赘述了,请参照插件的WIKI。配置好之后,符合规定的AD user就可以登录到Jenkins了。
但是笔者一般不会给AD user添加权限,因为如果每次有新用户都要Jenkins管理员添加一次权限,这个太繁杂了。所以这里笔者需要提一下AD group,笔者一般都是给AD group相应的权限,这样所有在该AD group里面的AD user都会拥有一样的权限,而AD group的管理,都可以交还给项目组。
这里笔者还需要提到,有一些公司,用的是AD来管理所有的员工,但是使用其他形式的组来管理权限。这样显然是不能使用这两个插件的,因为他们只能关联相应的AD group。笔者也遇到过这样的问题,最后通过修改这两个插件的代码,做到了其他“group”的集成。
分享一下插件的源码跟需要改动的文件,具体如何修改,读者自己可以研究研究。
- LDAP:
https://github.com/jenkinsci/ldap-plugin/blob/master/src/main/java/hudson/security/LDAPSecurityRealm.java - SAML:
https://github.com/jenkinsci/saml-plugin/blob/master/src/main/java/org/jenkinsci/plugins/saml/SamlSecurityRealm.java
权限管理插件
商业版Jenkins(Cloudbees)有一个比较好用的插件,但是本文章主要是针对免费用户的,所以笔者这边介绍一个免费的插件:Role-based Authorization Strategy。这个插件的具体配置,笔者就不在这里赘述了,具体请参照插件的说明。
下面,笔者给大家说一下这个插件的小技巧:
- role item可以对folder/job进行权限设置(Manage Jenkins -> Manage And Assign Roles -> Manage Roles)
- 多层次folder配置权限,必须每个层级都配置一次权限
- 点击pattern的条目,可以看到正则表达式匹配的job
- 双击修改匹配的正则表达式的条目,可以进行修改
Role-based Authorization Strategy的高级使用
如果公司项目组太多,要处理的分组太多,这个往往要耗费大量时间在这个人员管理上。而且Role-based这个工具,配置起来其实是相当麻烦的。
笔者在这里提供两个方案。
- 可以使用“Role Strategy Macros”这个功能,创建自己的Macro,这个可以参考Role-based这个插件的代码,里面有一些简单的例子,如:@BuildableJob这个macro。笔者之前尝试过写这样的macro,但是发现有巨大的坑,而且是比较熟悉Jenkins的源码才能比较快的写出相应的macro。所以笔者这里也不建议读者用这种方法,但是如果读者Java技术很强,有兴趣研究Jenkins源码的话,去尝试一下,也是个不错的选择。
- 使用Role-based Authorization Strategy提供的api。大家没有看错,这个插件有自己的API!!!!!笔者一开始的时候,查阅了这个插件的所谓文档,发现根本就没有关于API的描述,所以很绝望。本来打算直接模拟页面POST的操作的,但是要花费大量的开发时间,而且还不一定稳定,所以就放弃了。直到笔者看看了这个插件的源码,发现原来源码上有相关的API的注释!!!!!!
这些都是笔者辛苦研究出来的,所以脚本就不共享了。具体大家可以参考开源代码里面的注释:
https://github.com/jenkinsci/role-strategy-plugin/blob/master/src/main/java/com/michelin/cio/hudson/plugins/rolestrategy/RoleBasedAuthorizationStrategy.java
总结
Jenkins集中了很多人的智慧,大家其实可以在里面学到很多东西。如果有兴趣的话,读者可以自行寻找Jenkins的源码,认真研读。
笔者下一篇想写一下Jenkins关于shared library的文章。敬请期待。