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

  • 相关阅读:
    Chapter 5. 集合---(ArrayList、Stack、queue、哈希表)
    Chapter 4. 数组
    第一章 代码无错就是优?——简单工厂模式
    条款34:区分接口继承和实现继承
    条款33:避免遮掩继承而来的名称
    条款32:确定你的public继承塑模出is-a关系
    条款12:复制对象时勿忘其每一部分
    A:魔兽世界之一:备战
    条款09:绝不在构造和析构过程中调用virtual函数
    7、数值算法
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/12091963.html
Copyright © 2020-2023  润新知