常用的Master和Slave节点连接的方式是ssh或JNLP。
(1)ssh:对于Slave Node是linux系统,最方便的就是通过ssh启动jenkins节点,但这个的前提是Master和Slave之前能进行ssh连接。
(2)jnlp:jnlp连接有个好处就是不需Master和Slave之间能够ssh连接,只需能ping即可。Slave Node是windows的话,这个方式十分实用,因为有时候一些权限或者防火墙的原因,导致Master和Slave不能够ssh连接;还有一些未知的原因导致无法ssh到Slave Node。
Jenkins采用Master/Slave架构。Master/Slave相当于Server和agent的概念,Master提供web接口让用户来管理Job和Slave,Job可以运行在Master本机或者被分配到Slave上运行。一个Master可以关联多个Slave用来为不同的Job或相同的Job的不同配置来服务。
Jenkins的Master/Slave机制除了可以并发的执行构建任务,加速构建以外。还可以用于分布式自动化测试,当自动化测试代码非常多或者是需要在多个浏览器上并行的时候,可以把测试代码划分到不同节点上运行,从而加速自动化测试的执行。
Master:Jenkins服务器。主要是处理调度构建作业,把构建分发到Slave节点实际执行,监视Slave节点的状态。当然,也并不是说Master节点不能跑任务。构建结果和构建产物最后还是传回到Master节点,比如说在jenkins工作目录下面的workspace内的内容,在Master节点照样是有一份的。
Slave:执行机(奴隶机)。执行Master分配的任务,并返回任务的进度和结果。
Jenkins Master/Slave的搭建需要至少两台机器,一台Master节点,一台Slave节点(实际生产中会有多个Slave节点)。
Jenkins分布式环境搭建步骤如下:
(1)前提:Master和Slave都已经安装JDK 1.8或更高版本
(2)Master节点上安装和配置Jenkins
(3)Master节点上新增Slave节点配置,生成Master-Slave通讯文件SlaveAgent
(4)Slave节点上运行SlaveAgent,通过SlaveAgent实现和Master节点的通讯
(5)Master节点上管理Jenkins项目,指定Slave调度策略,实现Slave节点的任务分配和结果搜集来源。
# 解压tar包
[root@iZj6camy7zwxujli9q409bZ ~]# tar xzvf jdk-8u281-linux-x64.tar.gz
# 移动jdk工具包到指定的工作目录
[root@iZj6camy7zwxujli9q409bZ ~]# mv jdk1.8.0_281/ /usr/local/jdk
# 设置修改环境变量
[root@iZj6camy7zwxujli9q409bZ ~]# vim /etc/profile
# 在/etc/profile最底部添加
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH:/usr/local/maven/bin
export JAVA_HOME PATH
[root@iZj6camy7zwxujli9q409bZ ~]# source /etc/profile
[root@iZj6camy7zwxujli9q409bZ ~]# java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
[root@iZj6camy7zwxujli9q409bZ ~]#
# 解压tar包
[root@iZj6camy7zwxujli9q409bZ ~]# tar xzvf apache-maven-3.8.1-bin.tar.gz
# 移动maven工具包到指定的工作目录
[root@iZj6camy7zwxujli9q409bZ ~]# mv apache-maven-3.8.1/ /usr/local/maven
# 设置修改环境变量
[root@iZj6camy7zwxujli9q409bZ ~]# vim /etc/profile
# 在/etc/profile最底部添加
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH:/usr/local/maven/bin
export JAVA_HOME PATH
[root@iZj6camy7zwxujli9q409bZ ~]# source /etc/profile
[root@iZj6camy7zwxujli9q409bZ ~]# mvn -version
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/maven
Java version: 1.8.0_281, vendor: Oracle Corporation, runtime: /usr/local/jdk/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.7.9-1.el7.elrepo.x86_64", arch: "amd64", family: "unix"
[root@iZj6camy7zwxujli9q409bZ ~]#
[root@iZj6camy7zwxujli9q409bZ ~]# yum -y install git
[root@iZj6camy7zwxujli9q409bZ ~]# git --version
git version 1.8.3.1
[root@iZj6camy7zwxujli9q409bZ ~]#
创建一个新的节点,填写节点名称等信息
配置节点,添加一下配置信息,配置ssh的主机和认证信息,以及Agent节点工具位置
Agent节点工具位置并保存
保存后Agent节点会自动执行构建
在Jenkins界面选择“Manage Jenkins”->“Manage Nodes and Clouds”->“New Node
登录Slave Node主机,浏览器中通过Jenkins master节点的URI登录系统,在Manage Jenkins->Manage Nodes and Clouds页面点击刚新建的节点,进入如下界面:
方式一:点击上图中的 “Launch” 按钮,下载 Slave-agent.jnlp 文件到本地,以管理员的权限在命令行执行 Slave-agent.jnlp,最终会弹出一个小窗口,提示Connect,表示Slave Node 和Master Node连接成功。
如果希望把 Slave-agent .jnlp安装成 Windows Service,以后 Slave Node重新启动就能自动连接 master。在弹出一个小窗口的 File 菜单中点击 “Install as a service”,完成安装后上面的小程序会自动关闭,一个命令为jenkinsagent的 Windows服务被创建。
方式二:采用命令行方式。下载agent.jar文件到本地,以管理员的权限在命令行执行截图中的命令。(其中Localhost:8080替换为Jenkins的Master的URI)
如果希望本命令在Slave Node重启时自动运行,可以把如上命令保存为bat文件,在Window系统下设置开始时执行此bat文件。
类同Windows系统的Slave Node节点。只是启动命令方式有差异。
把agent.jar保存到/home/Jenkins,运行sudo java -jar agent.jar…,注意sudo采用管理员方式运行(否则提示Exception in thread “main” java.nio.file.AccessDeniedException:/opt/jenkins错误)。
(1)Jenkins首页,New View创建一个自己视图。
(2)选择刚创建的视图,进入My View页面,New Job创建一个任务。
(3)创建Job的页面,“General”下勾选“Restric where this project can be run”,填写Label Expression。
Jenkins通过节点的label标签来执行Jobs的Slave Node,一个标签可以关联多台不同命名的slave机器。