Jenkins 的用户权限管理和Jenkins凭证管理
一: Jenkins的用户权限管理
jenkins 的用户权限取决于所绑定的角色。如果该角色(如role1)在某个项目(如apple01)上拥有某些权限(如读,创建,删除等),那么,所有和该角色绑定的用户,则拥有该角色相同的权限
1.1 安装角色绑定插件, 配置授权策略
我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权

点击 Manage Jenkins,然后找到 Configure Global Security

进入权限全局配置( Configure Global Security)后,在Authentication 配置部分,将授权策略修改为Role-Based Strategy, 如果没有该选项,则重新安装插件,重启Jenkins

点击Save 保存配置

1.2 创建角色
点击Manage Jenkins ,找到Manage and Assign Roles 管理和分配角色选项

点击Manage Role ,进行管理角色,添加角色,或者修改角色权限

角色介绍:
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Project roles(项目角色): 针对某个或者某些项目的角色 ,在老版本里,项目角色叫做project roles
Slave roles(奴隶角色):节点相关的权限
我们添加以下三个角色:
baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
role1:该角色为项目角色。使用正则表达式绑定"apple.*",意思是只能操作apple开头的项目。
role2:该角色也为项目角色。绑定"orange.*",意思是只能操作orange开头的项目。
在管理角色页面的全局角色配置(Global roles) 部分, 在Role to add 栏添加角色.
添加baseRole 角色,点击Add 添加

为baseRole 添加全局可读权限(将baseRole行的Overall 栏下的Read栏勾选)

添加第一个项目角色,为角色匹配项目(正则匹配),表明该角色在那些项目拥有权限

为第一个项目角色勾选权限,并添加第二个项目角色,勾选权限


添加完角色后,点击Save 保存

1.3 创建用户
点击Manage Jenkins ,然后点击Manage Uers ,用户管理

点击Create User , 创建角色

创建两个用户,Tom和Jerry



1.4 给用户分配角色
用户分配(绑定)了角色后,就拥有了角色所拥有的权限
点击Manage Jenkins ,然后点击Manage and Assign Roles ,然后点击 Assign Roles,进行角色分配


将用户Tom 和 Jerry 加入到全局角色分配列表中


为Tom 和Jerry 分配全局角色,baseRole

将Tom 和Jerry 用户加入到 项目角色分配列表中


为Tom 和Jerry 分配项目角色.Tom 和Role1 绑定, Jerry 和 Role2绑定.这样,
Tom用户只能查看到 apple 开头的项目
Jerry用户只能查看到orange开头的项目

点击Save保存

1.5 创建项目,测试权限
以管理员账创建两个项目,分别为apple01 和orange01
点New Item,新建项目





分别使用不同用户登录,
Tom 用户登录只能看到 apple01项目
Jerry用户登录只能看到orange01 项目



二: Jenkins 凭证管理
Jenkins的素材来自于gitlab,那么Jenkins是如何获取到gitlab的数据呢?其实也是通过本地git复制远程gitlab 的方式.整个过程如下:
开发人员将代码推送到本地git 然后和远端的gitlab服务器复制,这样远端的gitlab服务器就获取到了开发人员本地的git数据
然后,Jenkins服务器的本地git 复制远端gitlab服务器的数据,通过git插件推送给Jenkins服务

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
2.1 安装Credentials Binding 插件
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件

点击Manage Jenkins,然后能找到Manage Credentials 和 凭据配置,如果没有,重新安装插件并重启

2.2 安装git插件和git工具
在安装插件页面,搜索git,安装Git插件

Jenkins服务器安装Git工具
yum -y install git
git --version #安装后查看git版本


2.3 Jenkins 的5种凭证类型
在Manage Jenkins 页,点击 Manage Credentials

点击global的下拉菜单,添加凭据

或者先点击(global)

在点击Add Credentials

可以添加的凭证有5种
- Username with password:用户名和密码
- SSH Username with private key: 使用SSH用户和密钥
- Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
- Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
- Certificate:通过上传证书文件的方式
常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH密钥)

2.4 创建用户密码类型
创建凭证
Jenkins-->Manage Jenkins-->Manage Credentials -->global -->Add Credentials



测试凭证是否可用
创建一个 FreeStyle 项目
New Item --->FreeStyle Project--->确定







点击Build Now ,开始构建项目


在Jenkins服务器上查看

2.5 SSH 密钥类型
SSH免密登录示意图

在Jenkins服务器上,使用root用户生成密钥对
ssh-keygen -t rsa
ls /root/.ssh/
#id_rsa:私钥文件
#id_rsa.pub:公钥文件

把生成的公钥放在Gitlab中
以root账户登录gitlab--->点击头像--->Settings->SSH Keys
(或者给zhangsan 用户也可以,因为zhangsan 用户的权限是owner)


在生成密钥对的Jenkins服务器上,复制公钥内容

在Gitlab上,粘贴公钥内容


在Jenkins中添加凭证,配置私钥
Manage Jenkins ---> Manage Credentails --->global --->Add Credentials

注意Username项填写的是生成密钥对的用户

在Jenkins服务器上复制私钥



测试凭证是否可用
新建"test02"项目->源码管理->Git,这次要使用Gitlab的SSH连接,并且选择SSH凭证




同样尝试构建项目,如果代码可以正常拉取,代表凭证配置成功!


同样,在/var/lib/jenkins/workspace下也可以看到test02的项目

