[Jenkins] cluster node management | | distributed cluster package build jenkins

Scene Description:

  Before the adoption of jenkins built over ios automation package, using one mac mini as a packer. Now every time packing is about 55 minutes, and at the same time can only pack two job, hair version week, test colleagues often waste a lot of time in the queue on the packaging.

To solve this problem, we decided to do a distributed package, so while there are three machines can be packaged, can shorten the queuing time.

  After some research, is going to start on different machines are installed jenkins, then through an interface (to write) to detect jenkins on which machine is idle can be packaged in the process of searching, we found jenkins can do cluster management. then carefully look, can meet my needs than their own and write interface functions to achieve faster problem encountered in the record here my configuration process, as well as the configuration process and solutions.

My needs:

  Distributed ios complete package

Environment Description:

 A total of four machines, I use jenkins installed as master on centOS7

  • master centOS7
  • slave1 mac 
  • slave2 mac 
  • slave3 mac
  • slave4 windows (not covered in this article is temporarily windows_slave configuration) 

other instructions:

  1. centOS7 machine installation jenkins
  2. slave machines do not need to install jenkins, create a new folder in the specified directory: 
  3. Create a folder in the slave machine: agent_jenkins (custom file name, directory), it will work as a job machine in the directory slave 

Build Complete results:

1. Connect salve machine successfully master_jenkins 

2. master_jenkins create job, the job can be controlled using slave runtime environment to build

3. Construction of the queue at master_jenkins, can see the state of the slave machine Construction

Specifically located:

step1: Create a node

jenkins >> >> Node Manager system management >> >> fill the new node node name, check the [fixed nodes] radio button >> 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来执行任务

可用性:尽量保持在线

工具位置:不设置

环境变量:不设置

 

 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使用教程之管理节点

Guess you like

Origin www.cnblogs.com/kaerxifa/p/12091963.html