Jenkins-分布式
1、分布式基础知识
1.1、简介
虽然我们可以借助于自由风格任务里的构建部分“Execute Shell”方式来实现分布式远程执行的效果,毕竟是手工方式,而jenkins提供了默认的远程分布式执行的机制
分布式构建通常用来平衡项目构建的任务负载,对于jenkins来说,它支持了 主/从架构来管理分布式构建。
1.2、角色
1.2.1、主节点
处理调度构建作业,把构建分发到从节点来进行实际执行,监视从节点,并且记录和发布构建产物。
- 构建结果和构建产物最后总是会在主服务器上
1.2.2、从节点
执行主节点分派的构建作业。配置可分为如下三种情况: - 配置一个项目总是在特定的从节点运行 - 在某个特定类型的从节点运行 - 让Jenkins挑选下一个可用的从节点 一旦从节点实例运行,两者就通过TCP/IP连接主实例进行通信。
1.3、通信策略
jenkins为了实现分布式的节点连接功能 -- 即能够让master将slave节点识别出来,我们需要在各个slave节点上运行特定的代理程序,以使得其能够与master主机建立双向通信功能。它在不同的平台中,提供了很多中连接通信方式
1.3.1、The SSH connector - 专用的ssh连接方式
这是首选的而且是最稳定的双向连接机制,借助于jenkins内置的SSH客户端实现双向的通信功能。 - 各slave节点,必须部署并且启动ssh服务 - 支持基于秘钥和口令的认证方式,但认证机制必须保存在maser主机的凭证里面 - 如果是基于秘钥认证,这所有slave节点保存master的公钥文件 该功能依赖于 ssh plugin插件
1.3.2、The inbound connector - 特殊的Inbound方式
在slave节点上以手动或者系统服务的方式经由JNLP协议触发双向连接,slave上的agent主动触发连接
1.3.3、The JNLP-HTTP connector - 特殊的JNLP-HTTP方式
这种方法与 JNLP-TCP Java Web Start 方法非常相似,不同之处在于代理以无头方式执行,并且连接可以通过 HTTP(s) 建立隧道。
1.3.4、Custom-script
创建自定义脚本来初始化控制器和代理之间的通信,为特定用例提供足够的灵活性。
要求脚本在代理上将 java 程序作为 java -jar agent.jar 运行。
1.3.5、注意事项
注意:Slave节点实际上在其他主机上运行的agent进程,无需再安装完整的Jenkins服务。
2、环境部署
2.1、slave节点安装jenkins
步骤与master上的操作一样 注意: 主要是 Java的环境问题,其他的都无所谓 -- 即是jenkins软件, 默认情况下,master在进行认证的时候,是依赖于 /usr/local/java/bin/ 路径下的java命令
2.2、安装 SSH Agent插件
2.3、创建ssh登陆凭据
# jenkins master 配置 ssh-keygen -t rsa -b 2048 -C "root@192.168.10.21" ssh-copy-id root@192.168.10.28 # 注意,是配置密钥:# cat .ssh/id_rsa
2.4、创建节点
2.4.1、创建
节点名称:jenkins-slave-10.28
节点类型:勾选持久性节点
2.4.2、配置
名称:节点的名称
描述:节点的基本信息
并发构建数:使用处理器个数作为其值会是比较好的选择,设置为0即表示不删除该节点的配置但是不启动该节点
远程工作目录:远程slave节点操作的工作目录,slave节点上该目录允许默认不存在
标签:当前slave节点对于master来说,非常重要的标识,必须唯一
用法:
Use this node as much as possible
Only build jobs with label expressions matching this node 勾选
启动方式:这里是选择通过的ssh
主机:输入slave节点的地址
Credentials: 选择远程主机联通的认证秘钥或者密码
Host Key Verification
其他的几种方式限制比较多
Strategy:选择不验证(non verifying verification strategy)
可用性:尽量保持slave处于在线状态
注意:
因为我们在安装jenkins或者java、git的时候,都是自己定制的,所以默认情况下,如果我们不配置这些信息的话,会因为相关工具找不到,导致无法实验成功。
2.5、查看主机列表效果
# 主机会生成一个java进程序 root@localhost:~# ps -ef | grep java root 2336 2300 1 03:49 ? 00:00:22 /usr/local/java/bin/java -jar remoting.jar -workDir /data/jenkins-slave -jar-cache /data/jenkins-slave/remoting/jarCache
3、实践
3.1、自由风格
3.1.1、创建my-slave项目
3.1.2、配置运行节点
3.1.3、关闭ssh校验
3.1.4、构建测试
root@localhost:~# ll /data/jenkins-slave/workspace/ total 16 drwxr-xr-x 4 root root 4096 Jun 19 04:00 ./ drwx------ 4 root root 4096 Jun 19 03:57 ../ drwxr-xr-x 4 root root 4096 Jun 19 04:04 my-slave/ drwxr-xr-x 2 root root 4096 Jun 19 04:04 'my-slave@tmp'/
3.2、流水线定制任务执行的节点标识
这里使用以前的项目直接测试
3.2.1、配置节点构建
3.2.2、查看构建结果
root@localhost:~# ll /data/jenkins-slave/workspace/ drwxr-xr-x 6 root root 4096 Jun 19 04:15 ./ drwx------ 5 root root 4096 Jun 19 04:15 ../ drwxr-xr-x 4 root root 4096 Jun 19 04:17 my-blue-ocean_master/ drwxr-xr-x 2 root root 4096 Jun 19 04:17 'my-blue-ocean_master@tmp'/ -rw-r--r-- 1 root root 42 Jun 19 04:09 workspaces.txt