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

 

posted @ 2023-06-19 12:21  小粉优化大师  阅读(188)  评论(0编辑  收藏  举报