[Jenkins]集群 节点管理| |分布式打包

场景描述:

  之前通过jenkins搭建过ios自动化打包,使用1台mac mini作为打包机.现在每次打包时间是55分钟左右,而且同时最多只能打包2个job,发版周,测试同事们经常会浪费很多时间在排队打包上.

为了解决这个问题,决定做分布式打包,这样同时有3台机器都可以打包,可以缩短排队时间.

  经过一番调研,一开始是打算在不同的机器上都安装jenkins,然后通过1个接口(自己写)去检测哪个机器上的jenkins是闲置可打包的,在搜索的过程中,发现jenkins可以做集群管理.再细细一看,完全能满足我的需求.且比自己写接口能更快实现功能.在这里记录下我的配置过程,以及配置过程中遇到的问题及解决办法.

我的需求:

  完成ios分布式打包

环境说明:

 共4台机器,我使用centOS7 上安装的jenkins作为 master

  • master centOS7
  • slave1 mac 
  • slave2 mac 
  • slave3 mac
  • slave4 windows(本文中暂时没有涉及windows_slave的配置) 

其它说明:

  1. centOS7机器 安装jenkins
  2. slave机器 不需要安装jenkins,在指定目录下新建一个文件夹: 
  3. 在slave机器新建一个文件夹:agent_jenkins(自定义文件名,目录),它将作为 job在slave机器的工作目录 

搭建完成效果:

1.通过master_jenkins 连接salve机器成功 

2.通过master_jenkins 创建job,即可控制该 job使用slave环境运行构建

3.在master_jenkins构建队列处,可以看到slave机器构建状态

具体配置:

step1:创建节点

jenkins>>系统管理>>节点管理>>新建节点>>填写节点名称,勾选 [固定节点]单选钮>>OK

注意:如果从来没有配置过节点,不会出现 Copy Existing Node选项

 

点“OK”后,进入node配置

step2:配置节点:

前置条件:

在slave新建文件夹:agent_jenkins

我创建文件夹目录位置是:/Users/xxx/agent_jenkins (你可以自己定义agent_jenkins在哪个目录新建,可以与我的不一样) 

如果没有找到“通过java web启动代理”,需要到 系统管理-全局安装配置 打钩“Enable Agent”。 

注意:在启动方法这一项,这里选择通过java Web的方式启动,我试了其它2项,jenkins都抛了异常

可能是我的配置有问题吧,但是为了不浪费时间,当我试到[通过Java Web启动代理]这个选项,不抛异常时,就果断把之前的异常抛到脑后了

 

配置参数说明:

结点名称:随意填,不过最好能见名知义,我这里用的格式是:slave机型_ip

描述:随意填

并发构建数:同时进行构建的最大数量,我这里设置为2

工作目录:从节点上的jenkins工作目录,即一开始我们创建的agent_jenkins所在的目录

标签:随意填,我们将项目关联到节点时,可以根据标签来(也可以根据结点名称)。即master_jenkins通过这个标签来判断job在哪个slave机器上构建

该项配置在 job >> configure>>General选项下

 

 

用法:因为我是用这台机器作IOS打包机,所以选择“只允许运行绑定到这台机器的job”,这外选项相当于设置结点优先级。

启动方式:通过java Web的方式启动,由master连接到slave来执行任务

可用性:尽量保持在线

工具位置:不设置

环境变量:不设置

 

注意配置slave机器的环境变量,否则在执行job时就有可能会遇到找不到环境变量的问题

比如,我遇到了在执行ios打包时,找不到pod命令的问题

配置方法:

远程连接你的slave机器,在终端中输入echo $PATH,终端会打印出一串字符串,几个路径,复制该路径,返回到Jenkins中,

勾选环境变量选项,填写格式如下:

变量名:PATH

值:echo $PATH的结果

 

 

 step3:解决配置完成后,slave连接不成功的问题

点击SAVE,这时候看到的界面如图: 并没有正确连接到slave52的机器

 点进去看一下报错信息:

 

 从提示信息可以看出,jenkins提供了2种解决方案:

注意:这2个方法都要在salve机器上操作

方法1.通过浏览器下载 slave-agent.jnlp文件,并安装

方法2.下载 agent.jar文件,并在命令行执行命令 

我操作过程中,这2个方法的区别是:

方法1我需要登录slave机器,在浏览器中下载slave_agent.jnlp,通过可视化的方式,进行安装;

方法2则是直接在本地下载jar文件,然后通过scp命令将jar文件复制到slave机器,最后通过java命令运行jar文件.在操作过程中,并不需要直接去登录slave机器(我本地环境是ubuntu,slave是mac,本地可以通过ssh远程连接mac)

方法1操作过程:

首先在slave_mac机器打开master_jenkins网址,jenkins>>节点管理>>打开slave_51节点>>点击Launch,浏览器将会下载一个文件,文件名是:slave-agent.jnlp

 

我在slave_mac上安装这个文件,此时可能会遇到一个错误:mac只允许安装来自appstore的应用. 

解决办法是,打开 系统偏好设置>>安全性与隐私>>通用>>在 允许从以下位置下载的应用选项栏中,选择 App Store和被认可的开发者选项 

然后双击 slave-agent.jnlp文件,就可以安装了,这时候会出现下面这个窗口

 

注意,不能将这个窗口关闭,否则master就会失去对该 slave的连接 

 

方法2操作过程:

我是在本地下载agent.jar文件的,然后将该文件复制至slave机器,命令如下:

wangju@wangju-HP-348-G4:~/Downloads$ scp /home/wangju/Downloads/agent.jar <username>@10.1.71.51:/Users/xxxx/agent_jar/
agent.jar                                     100%  771KB  10.8MB/s   00:00  

 ssh 连接slave机器,查看agent.jar文件已经复制到agent_jar文件夹下了

Mac mini:~ xxx$ cd agent_jar
Mac mini:agent_jar xxx$ ls
agent.jar

在slave机器命令行,执行命令

java -jar agent.jar -jnlpUrl http://10.2.1.92:8080/jenkins/computer/mac_10.1.71.51/slave-agent.jnlp -secret 42c65d0c9de7b44ef8516ea01fd1e75c402fd5fc1a525db02e0da1437d8cde46 -workDir "/Users/5i5j/agent_jenkins"

执行效果:

注意:在需要master连接slave机器的时间段,不能关闭命令行窗口,一旦关闭命令行窗口,master就会失去slave机器的连接

   

此时再master机器查看刚才新建的slave51机器,已经连接成功了(小电脑图标旁边没有 X 号了)

 

验证配置效果:

通过master-jenkins创建1个job,该job可以在slave机器上进行构建

操作步骤:

1.在master-jenkins,新建1个job

2.General>>Restrict where this project can be run(选择job要运行的节点机器)

Label Expression 选择我们刚刚新建的slave51机器 标签:mac_mini_slave

 

 

 

 

3.构建job,可以看到job已经启动了

   

 至此,就完成了jenkins集群的配置

 

 

参考文档:

和我的需求场景一致:

搭建jenkins集群

配置步骤比较详细

Jenkins 集群搭建 

jenkins节点管理参考以下2篇文档:

 

jenkins 节点管理

 

Jenkins使用教程之管理节点

posted @ 2019-12-26 10:05  wangju003  阅读(...)  评论(...编辑  收藏