10.Jenkins分布式与权限等实践
1.Jenkins分布式构建
1.什么是Jenkins分布式构建
Jenkins自带分布式特性,Master/Slave模型。在Master上进行任务分配。然后由Slave或Master来完成。
(1)能够分担主节点上的压力,加快构建速度。
(2)能够将特定的任务在特定的主机上运行。
2.为什么要实现Jenkins分布式构建
1、如果项目需要定期集成,同时每次集成都需要较长时间。当所有任务都运行在master上,会消耗过多资源,造成构建任务缓慢。那么这个时候就需要建立多台Slave节点服务器,来为master提供负载服务。
2、需要不同的环境集成。如一个项目,包含 web 端,包含 Android 端,也包含 iOS端,不同的测试需要的环境都不同,此时可以为每个环境配置一个 slave 进行测试。
PS: Slave节点服务器不需要安装jenkins,构建事件的分发由master端(jenkins主服务)来执行。
3.如何实现Jenkins分布式构建
1.点击系统管理-->节点管理-->新建节点
2.添加节点名称-->建议写完整这样好区分是哪台主机
3.配置丛节点基本信息-->以及master要能通过ssh-key连接丛节点
4.配置丛节点的工具位置-->git、maven、jdk、sonarqube
注意: 如果没有这些工具则可以通过 yum 进行安装,保持Master版本一致即可。
4.测试分布式构建效果
5.分布式构建注意事项
1.确保Master和Slave环境一致。
2.确保使用的JDK版本、Maven版本、Git版本一致。
3.确保Slave主机能免秘钥登陆Gitlab、以及需要部署的web节点。
4.确保Master上的部署脚本也存放至于Slave节点上。
5.指定节点运行 agent { label 'slave-node1' }
2.Jenkins权限管理
基于角色的访问控制,可以设定更加详细的访问控制,需要Role-based Authorization Strategy
插件支持。
全局角色配置
1.首先创建角色,设定好对应的权限
2.然后创建用户
3.最后将用户与角色进行关联
项目角色配置方式
1.首先创建角色,然后将角色与项目名进行关联。
2.其次给角色分配对应的权限。
3.最后将用户关联至该角色。
全局角色:控制登陆用户能操作jenkins的那些资源。
项目角色:控制用户能看到哪些项目,并且有什么样的权限。
在操作之前先安装插件,然后创建用户,查看用户在没有配置权限时登陆是什么状态。
全局角色配置实例
1.为角色分配权限
2.将用户关联该角色
项目角色配置实例
1.为角色关联项目名称,并分配权限
2.将用户关联该角色
3.Jenkins权限操作失误
1.Jenkins误操作权限导致无法登陆
在研究用户权限的时候可能会遇到因为权限设置失败导致无法正常使用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
4.再次访问Jenkins,重新配置管理的权限,然后开启权限认证功能。
4.Jenkins破解管理员密码
#1.找到用户的路径
[root@jenkins-node1 ~]# cd /var/lib/jenkins/users/
[root@jenkins-node1 users]# tree
.
├── 552408925_8628634723176281851
│ └── config.xml
├── admin_8092868597319509744
│ └── config.xml
├── jenkins_3327043579358903316 #我使用的jenkins作为管理员(如果你是admin就进admin目录)
│ └── config.xml #修改config.xml
└── users.xml
3 directories, 4 files
#2.修改jenkins用户目录下的config.xml,定位到<passwordHash>那行删除,改为如下内容
[root@jenkins-node1 users]# vim config.xml
<passwordHash>#jbcrypt:$2a$10$slYx6.2Xyss6w9LnuiwnNOReuvkcSkaI.Y.Z2AC6Sp7hdF7hhxlsK</passwordHash>
#3.新密码为bgx.com 记得重启jenkins生效
5.Jenkins分组部署的插件
extended Choice parameter该插件能够实现设置固定变量传入脚本中,比如设定变量web_node有如下三个值192.168.1.1,192.168.1.2,192.168.1.3
那么我们可以在选择的时候只选择需要部署的主机。
6.Jenkins课程作业练习
1.持续集成:开发-->提交代码-->jenkins拉取代码-->sonar质量检测-->返回结果
2.持续交付:开发-->提交代码-->jenkins拉取代码-->编译-->部署测试环境
3.持续部署:jenkins填写指定的tag-->拉取tag-->编译打包-->部署生产环境
4.使用pipeline实现cms的自动部署 并且 要基于tag的方式 (参数化构建,文本参考)
5.分布式和权限