一、环境准备:

1 jenkins:

假如你已经搭建了自己的jenkins环境,我这里使用的是k8s上运行的jenkins,见下链接:

二、jenkins集成ldap配置:

2.1 定位:

jenkins首页 ---> Manage Jenkins ---> Configure Global Security

2.2 配置:

配置解释:

Server:服务器地址,可以直接填写LDAP服务器的主机名或IP,例如ldap.fengzhihai.com(默认端口389),或者ldap.fengzhihai.com:1389,如果用了SSL,可以填写ldaps://ldap.fengzhihai.com(默认端口636),或者ldaps://ldap.fengzhihai.com:1636。

root DN:这里的root DN只是指搜索的根,并非LDAP服务器的root dn。由于LDAP数据库的数据组织结构类似一颗大树,而搜索是递归执行的,理论上,我们如果从子节点(而不是根节点)开始搜索,因为缩小了搜索范围那么就可以获得更高的性能。这里的root DN指的就是这个子节点的DN,当然也可以不填,表示从LDAP的根节点开始搜索。

User search base:这个配置也是为了缩小LDAP搜索的范围,例如Jenkins系统只允许ou为employees下的用户才能登陆,那么你这里可以填写ou=employees,这是一个相对的值,相对于上边的root DN,例如你上边的root DN填写的是dc=fenghzihai,dc=com,那么user search base这里填写了ou=employees,那么登陆用户去LDAP搜索时就只会搜索ou=employees,dc=fengzhihai,dc=com下的用户了。

User search filter:这个配置定义登陆的“用户名”对应LDAP中的哪个字段,如果你想用LDAP中的uid作为用户名来登录,那么这里可以配置为uid={0}({0}会自动的替换为用户提交的用户名),如果你想用LDAP中的mail作为用户名来登录,那么这里就需要改为mail={0}。在测试的时候如果提示你user xxx does not exist,而你确定密码输入正确时,就要考虑下输入的用户名是不是这里定义的这个值了。

Group search base:参考上边User search base解释。

Group search filter:这个配置允许你将过滤器限制为所需的objectClass来提高搜索性能,也就是说可以只搜索用户属性中包含某个objectClass的用户,这就要求你对你的LDAP足够了解,一般我们也不配置。

Manager DN:这个配置在你的LDAP服务器不允许匿名访问的情况下用来做认证,通常DN为cn=admin,dc=domain,dc=com这样。

Manager Password:上边配置dn的密码。

Display Name LDAP attribute:配置用户的显示名称,一般为显示名称就配置为uid,如果你想显示其他字段属性也可以这里配置,例如mail。

Email Address LDAP attribute:配置用户Email对应的字段属性,一般没有修改过的话都是mail,除非你用其他的字段属性来标识用户邮箱,这里可以配置。

2.3 验证:

这以后,jenkins的登录就需要使用ldap里的账号了:

三、需求:

我上图的这种jenkins结构是生产环境实际使用结构图的一种改造,在此我屏蔽了涉及公司的敏感信息。对此图的解释:

01-CI-IMAGES:制作对应app的docker镜像包,在这里我有两个应用:inf-sync、inf-timer。

权限分配为:研发人员--->郭靖、黄蓉,运维人员--->宋远桥、宋青书。

02-CD-DEV:研发环境发布。

权限分配为:研发人员--->郭靖、黄蓉,运维人员--->宋远桥、宋青书。

03-CD-QA:测试环境发布。

权限分配为:测试人员--->张无忌、张三丰,运维人员--->宋远桥、宋青书。

04-CD-RC:预发环境发布。

权限分配为:运维人员--->宋远桥、宋青书。

05-CD-PROD:生产环境发布。

权限分配为:运维人员--->宋远桥、宋青书。

06-CD-JOINT:联调环境发布。

权限分配为:研发人员--->郭靖、黄蓉,运维人员--->宋远桥、宋青书。

07-yunwei-items:运维任务。

权限分配为:jenkins管理员--->乔峰、段誉。

补充:

乔峰、段誉为jenkins维护人员,即:管理员,拥有所有权限。

为了完成上诉权限分配,jenkins需要安装一个插件"Role-based Authorization Strategy"。

四、jenkins插件"Role-based Authorization Strategy":

4.1 jenkins插件的安装很容易,在此省。

4.2 启用:

jenkins ---> Manage Jenkins ---> Configure Global Security下:

4.2 配置:

4.2.1 启用策略后,在jenkins ---> Manage Jenkins下会出现"Manage and Assign Roles",进去后是这样的:

下面先贴一下,我所有的配置:

4.2.2 "Manage Roles" Global roles配置:

4.2.3 "Manage Roles" Item roles配置:

4.2.4 "Assign Roles" Global roles和Item roles配置:

4.2.5 解释:

auth-ldap:可以把它理解为全局用户组,一个用户组里面有多个用户,我们给auth-ldap这个组分配了一组权限后,auth-ldap这个组里的用户也就有了这组权限,我们在Manage Roles--->Global roles里面添加了auth-ldap这个组后,在Assign Roles--->Global roles里面就可以看到这个组。admin这个组是默认存在的,现在可以按照我们的需求,如图所示,将上面的用户添加到对应的组里面了。

然后,给这两个组分配权限,默认admin这个组有所有的权限,auth-admin这个组这里我给了:Overall--->read,Job--->read,View--->read,这里是全局授权,具体每个是啥意思,不多解释,因为涉及jenkins的一些基本概念,不明白的,可以多测试测试,时间问题而已,求快的话,按照我上面的来就行了,还有疑问的,欢迎下方留言。

Item roles:这个你可以给它理解为你所创建的items的权限组了。我这里创建几个权限组:CD-DEV、CD-JOINT、CD-PROD、CD-QA、CD-RC、CI-IMAGES,它的一边是pattern,即:匹配到的items(支持正则),另一边就是加到这个权限组的用户了。它就像一条纽带,将应用或者应用集与用户做了捆绑。

经过前面的设置后,我上面提出的需求就完全解决了。这块的配置还是相当灵活的,你完全可以先规划好,你想达到的权限隔离目标,然后再进行实施。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐