# Jenkins 分布式与权限
# 1. Jenkins 分布式介绍
# 1.1 什么是分布式
Jenkins ⾃带分布式特性,Master/Slave 模型。在 Master 上进⾏任务分配。然后由 Slave 或 Master 来完成。
- 1、能够分担主节点上的压⼒,加快构建速度。
- 2、能够将特定的任务在特定的主机上运⾏。
# 1.2 为何需要分布式
- 1、如果项⽬需要定期集成,同时每次集成都需要较⻓时间。当所有任务都运⾏在 master 上,会消耗过多资源,造成构建任务缓慢。那么这个时候就需要建⽴多台 Slave 节点服务器,来为 master 提供负载服务。
- 2、需要不同的环境集成。如⼀个项⽬,包含 web 端,包含 Android 端,也包含 iOS 端,不同的测试需要的环境都不同,此时可以为每个环境配置⼀个 slave 进⾏测试。
注意:Slave 节点服务器不需要安装 jenkins,构建事件的分发由 master 端(jenkins 主服务)来执⾏。
# 2. Jenkins 分布式实践
| 系统 | IP | 环境 | 角色 |
|---|---|---|---|
| Centos7 | 192.168.1.120 | java17 | jenkins-master |
| Centos7 | 192.168.1.50 | java17 | jenkins-slave |
# 2.1 配置 Slave 节点
1、点击系统管理 --> 全局安全配置 --> 代理 --> 打开随机端⼝ (默认是禁⽤),否则后续 Slave ⽆法正常上线(会出现 404 错误)

2、点击系统管理 --> 节点和云管理 --> 新建节点

3、配置丛节点基本信息

4、从节点安装 git、maven、jdk、sonarscanner,配置丛节点的⼯具位置

注意:如果没有这些⼯具则可以通过 yum 进⾏安装,保持 Master 版本⼀致即可。
5、将 jenkins-master 的公钥给 slave 推送⼀份,这样他就能与所有节点免密
[root@jenkins ~]# scp /root/.ssh/id_rsa.pub root@192.168.1.50:/root/.ssh/ |
6、安装 ansible 并将脚本、maven 配置推送至 jenkins-slave
[root@jenkins-slave ~]# yum install ansible -y | |
[root@jenkins ~]# scp /etc/ansible/hosts* root@192.168.1.50:/etc/ansible/ | |
[root@jenkins ~]# scp -rp /scripts/* root@192.168.1.50:/scripts/ | |
[root@jenkins ~]# scp /usr/local/maven/conf/settings.xml root@192.168.1.50:/usr/local/maven/conf/ |
7、从节点需要配置域名解析
[root@gitlab ~]# cat /etc/hosts | |
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 | |
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 | |
192.168.1.50 gitlab.hmallleasing.com | |
192.168.1.32 nexus.hmallleasing.com | |
192.168.1.8 sonar.hmallleasing.com | |
192.168.1.8 jenkins.hmallleasing.com |
8、启动从节点
curl -sO http://jenkins.hmallleasing.com/jnlpJars/agent.jar | |
java -jar agent.jar -url http://jenkins.hmallleasing.com/ -secret 8260ed5b9e77bc6ac338d74f8218fecc041febf72fb82d91eedaf9814ca976db -name "jenkins-slave" -webSocket -workDir "/home/jenkins" &> /var/log/jenkins.log & |

# 2.2 测试 Slave-Freestyle
1、如果是 FreeStyle 的项⽬,按照如下⽅式配置

# 2.3 测试 Slave-pipeline
1、修改 pipeline 的脚本
# 修改前 | |
pipeline { | |
agent any | |
} | |
# 修改后 | |
pipeline { | |
agent { label 'slave-node01' } | |
} |
# 2.4 分布式注意事项
1. 确保 Master 和 Slave 环境⼀致。
2. 确保使⽤的 JDK 版本、Maven 版本、Git 版本⼀致。
3. 确保 Slave 主机能免秘钥登陆 Gitlab、以及需要部署的 web 节点。
4. 确保 Master 上的部署脚本也存放⾄于 Slave 节点上。
5. 指定节点运⾏ agent
# 3. Jenkins 权限管理
# 3.1 权限基本概念
基于⻆⾊的访问控制可以设定更加详细的访问控制,需要安装 Role-based Authorization Strategy 插件,并将授权策略更改未 Role-Based Strategy

全局⻆⾊配置(控制登陆⽤户能操作 jenkins 的那些资源)
● 1、⾸先创建⻆⾊,设定好对应的权限
● 2、然后创建⽤户
● 3、最后将⽤户与⻆⾊进⾏关联
项⽬⻆⾊配置⽅式 (控制⽤户能看到哪些项⽬,并且有什么样的权限)
● 1、⾸先创建⻆⾊,然后将⻆⾊与项⽬名进⾏关联。
● 2、其次给⻆⾊分配对应的权限。
● 3、最后将⽤户关联⾄该⻆⾊。
# 3.2 全局⻆⾊配置实例
1. 系统管理 ->Manage and Assign Roles -> 创建⻆⾊,并为⻆⾊分配权限

2. 创建⽤户,并将⽤户关联该⻆⾊

# 3.3 项⽬⻆⾊配置实例
1. 为⻆⾊(名称可随意)关联项⽬名称,并分配权限

2. 将⽤户关联该⻆⾊

# 3.4 登录⽤户测试权限


# 3.5 权限操作失误
在研究⽤户权限的时候可能会遇到因为权限设置失败导致⽆法正常登录 Jenkins,连 admin ⽤户也⽆法正常使⽤。这个时候就需要通过关闭 Jenkins 的权限认证功能,然后进⾏重新配置;
# 1. 停⽌ jenkins,并进⾏配置修改 | |
[root@jenkins ~]# systemctl stop jenkins | |
# 2. 修改配置 | |
[root@jenkins ~]# vim ${JENKINS_HOME}/config.xml | |
<useSecurity>true</usrSecurity> #修改前 | |
<useSecurity>false</usrSecurity> #修改后 | |
# 3. 启动 Jenkins | |
[root@jenkins ~]# systemctl start jenkins |
访问 Jenkins,重新配置管理的权限,然后开启权限认证功能。

