通常情况下,我们的项目会由多个模块或者系统组成,不同模块可能会分别部署在不同的服务器,比如mod1部署在ser1,mod2部署在ser2上;

  之前的文档是描述了将jenkins也部署在ser1上,当mod1模块代码有修改,自动部署mod1的环境并自动执行mod1的api测试脚本;

  那mod2怎么设置?需要在ser2上也搭建一整套类似ser1上的jenkins环境吗?这样不仅浪费资源,对于环境的维护、模块的管理都是非常低效的;

  这里就需要jenkins的分布式部署,master部署在ser1上,可以配置一个slave节点类似于jenkins的子系统指向ser2,这样就能实现在ser2上搭建jenkins的效果,只是这里搭建的不是真正的完整的jenkins,而是一个jenkins的子系统,master分支的一个slave节点;

  跟之前搭建moster一样,jenkins是运行于java环境中的,所以必须保证ser2已经部署好了java环境,否则配置完链接服务器时,会出现报错;

slave配置步骤:

一、在linux系统中

  jenkins >> 系统管理 >> 管理节点,此时会有一栏master分支的数据列表;

  

  这是我们搭建的jenkins的主分支;

  点击左侧的“新建节点”,输入节点名称,并选中permanent agent,点击ok;

  

  初次设置没有下面的“复制现有节点”,因为我已经有建好了的节点,才有这个选项;

  点击ok后跳转到节点的设置页面:

  

  名字:节点的名字
  描述:说明这个节点的用途等
  of executors:并发构建数量
  远程工作目录:用于设置jenkins在服务器系统中的工作空间
  标签:分配job会以标签的名称去分配,不同slave可能设置相同标签
  用法:节点的使用策略
  启动方法:使用Launch slave agents via SSH

    Host:ser2服务器的地址(主机名或ip地址)

    Credentials:登陆ser2服务器的用户账号,需要先点击右侧的Add,选择用户名密码方式登陆,输入ser2服务器的账号信息,保存后返回来选择你刚刚Add的Credential;

  Availability:可用性选择Keep this agent online as much as possible;

  点击Save保存设置;

  

  设置完成后,会看到在节点列表中,原来master节点下面会有新增的节点;这个就是一个slave节点,部署在ser2服务器但也受jenkins分支支配管理;

  新建一个自由风格的任务,其他的配置都同之前一样,只是在General节点配置时,选择好对应的jenkins节点,节点的选择是按设置节点时的标签为准;

  

  配置完成后,在ser2服务器设置的工作目录空间中,查看是否有对应的代码fork分支;

二、在windows系统中

  第一步:通过Jenkins主页->系统管理进入管理节点界面,如下图,然后对节点进行配置 

第二步:选择“新建节点”后,跳转至新建节点页面,输入一个节点名称,选择“Dump Slave”添加一个节点。

Name:节点名称

Description:节点描述,支持中文

# of executors:最大同时构建数量(根据机器的性能定,单颗四核cpu建议不要超过5)【必须为数字】

Remote FS root:节点的根目录(注意:如果目录不存在,会自动创建目录。你必须对该目录有读写权限,不然会报错:hudson.util.IOException2: Failed to copy xxxx)

Labels:标记(又叫做标签)用来对多节点分组,标记之间用空格分隔.例如'refression java6'将会把一个节点标记上'regression'和'java6'.

  举例来说,如果你有多个Windows系统的构建节点并且你的Job也需要在Windows系统上运行,那么你可以配置所有的Windows系统节点都标记为'windows', 然后把Job也标记为'windows'.这样的话你的Job就不会运行在除了Windows节点以外的其它节点之上了.

用法:尽可能的使用这个节点/只允许运行绑定到这台机器的Job(根据你的需求,二选一)

Launch method:运行方式有四个选项。建议选择第1、2种方式配置,windows系统的节点多选则第二个。详细如下:

  1. 【推荐】Launch slave agents on Unix machines via SSH   在Unix(包括linux)机器上通过SSH通道连接节点 (适用于Unix和Linux)

      Host:节点主机的ip地址

      Credentials:凭据(如果为空或者不可选择,请在系统管理→Manage Credentials中配置。Manage Credentials的配置非常简单,这里就不在描述了。Manage Credentials配置完成后,需刷新节点配置页面才会显示。)

      Port:端口默认22

      JavaPath:[可选]JDK路径,默认和master节点相同。路径必须指定到Java程序,如:/path/bin/java

      JVM Options:[可选]JVM可选参数

      Prefix Start Slave Command:[可选]不知道干什么用的参数

      Suffix Start Slave Command:[可选]不知道干什么用的参数

       测试可以使用Unix命令,会自动拼接在[SSH] Starting slave process:[Prefix Start Slave Command] cd '/path' && /path/bin/java -jar slave.jar [Suffix Start Slave Command]

  2. 【推荐】Launch slave agents via JavaWeb Start   通过javaWeb Start连接节点 (适用于所有支持Java程序的系统)

      Tunnel connection through:[可选]在端口转发这种情况下使用

      JVM options:[可选]JVM可选参数

      这种方法的缺点:如果该节点宕机了,主节点无法自动重启它。

      

  3. Launch slave via execution of command on the Master  通过主节点的控制台连接节点

       在写内容前吐槽一下Jenkins的帮助,说的云里雾里的。应该去看该选项下Launch command的帮助。

       Jenkins的开发者考虑到某些企业可能有N++ 个节点(N>=你猜!)。如果在界面配置,那么升级版本之类的操作会很麻烦。所以允许你使用shell脚本去配置管理节点(貌似很方便的样子)。具体的脚本需要你自己写。

      Launch command:Unix运行脚本的命令,如:sh aaa.sh

  4. 【不建议使用】Let Jenkins control this Windows slave as a Windows service   让Jenkins节点添加到Windows服务中

       这个选项比Launch slave agents via Java Web Start添加为服务更加稳定(帮助文档是这么说的)。采用这种运行方式,那么这个系统不能登录任何用户。这种配置方式是非常的麻烦和折腾。具体请查看 点我去看帮助

      Administrator user name:域\管理员账号

      Password:密码

      Host:节点主机IP或者域名

      Run service as:

        Use Local System User:使用本地系统用户

        Log on using a different account:使用不同的用户登录

          User name:账号

          Password:密码

        Use Administrator account given above:使用上面的用户登录

      Path to java executable:[可选]JDK路径。必须指定到Java程序,如:C:\Windows\system32\java.exe

      JVM options:[可选]JVM可选参数

    

Availability:

  • Keep this slave on-line as much as possible:尽可能保持节点在线【推荐】
  • Take this slave on-line according to a schedule:根据时间表在线(类似于Linux的定时任务)

Startup Schedule:类似于Linux定时任务的时间,如下:

                   # every fifteen minutes (perhaps at :07, :22, :37, :52)
                   H/15 * * * *
                   # every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
                   H(0-29)/10 * * * *
                   # once every two hours every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
                   H 9-16/2 * * 1-5
                   # once a day on the 1st and 15th of every month except December
                   H H 1,15 1-11 *                   如果使用 H Jenkins会自动提前一段时间连接节点,避免出现同一时间高并发的问题

Scheduled Uptime:超过任务时间后延迟多少分钟离线。如果此数值大于在线总时间(单位:分),就会一直保持在线【必须为数字】

Keep on-line while jobs are running:当有Job在构建时(到达离线时间了)继续保持在线

  • Take this slave on-line when in demand and off-line when idle:让Jenkins根据需求自动连接或者离线

In demand delay:告诉Jenkins如果有Job需要在此节点构建,需要在任务队列等待多长时间才会进入任务状态进行构建【必须为数字】

Idle delay:告诉Jenkins多少分钟内如果没有Job需要构建就离线【必须为数字】

Node Properties:

  • Environment variables:配置环境变量(可以在脚本中引用,好方便啊\(^o^)/~)
  • Tool Locations:工具的目录【推荐】。说明:可以替换系统设置的各种工具目录。如:JDK目录、Ant目录、Maven目录等。好处就是在不更改Job配置的情况下,不同环境(如:Windows和Linux) Job配置通用。好方便啊\(^o^)/~

到此,节点的配置工作完成了,点击Save保存。进入下一步节点的连接:

只介绍Launch slave agents via Java Web Start第二种连接方式,Launch slave agents on Unix machines via SSH点击保存后会自动连接。因为Launch slave via execution of command on the Master和Let Jenkins control this Windows slave as a Windows service选项没有配置测试过,所以大家自行折腾吧。

另外,对于有些新安装的jenkins,在配置节点的时候,可能会没有via Java web Start第二个选项,可根据如下配置:

  1. 打开"系统管理"——"Configure Global Security"
  2. TCP port JNLP agents 配置成"随机",点击"Agent protocols",打勾开启"Java Web Start Agent Protocol3"
  3. 检查Plugin Manager中"Enable Slave"需要打勾
  4. 点击"Agent protocols"安全策略,开启"Java Web Start Agent Protocol3"

  5. 检查"Plugin Manager"中"Enable Slave"需要打勾

  6. 点击保存,刷新页面,回到slave节点配置页面,启动方法就有了Launch slave agents via Java Web Start;

第三步:

如上图所示,有两种方式可以启动节点(都是JNLP方式。JNLP连接需要端口,默认连接端口是随机的,端口更改 系统设置→Configure Global Security→JNLP节点代理的TCP端口)

你有两种方式启动:

1.Launch agent from browser on slave  下载文件slave-agent.jnlp文件,双击打开。

一般用在Windows系统上,需要javaws.exe(在Java的bin目录中可以找到)程序才能打开。如果提示错误,请卸载JDK后重新安装。成功启动如下图所示:

点击左上角的File选择Install as a service就可以添加为Windows的服务了(默认开机自动启动)。

2.Run from slave command line   javaws  http://xxxx/slave-agent.jnlp  如果你配置了权限那么后面还有一串看不懂的随机Key

下载slave.jar到本地,然后命令行模式下进入存放slave.jar的目录,复制粘贴并运行 java -jar slave.jar -jnlpUrl http://xxxxx  即可启动。刷新页面:

三、配置slave节点的job

  没有什么可说的,只是在上图配置项时,选择Restrict where this project can be run,并Label Expression填写配置好的slave节点的标签名称,多个slave节点可以公用一个标签,比如分别在多个windows系统机器上配置了jenkins的slave节点,每个windows的slave节点的label都是windows;配置job时Label Expression也写的windows,这样可以做到,构建这个job可以同时触发所有的windows系统机器执行构建步骤;所以标签的设置与管理还是很重要的;

九、创建Slave节点的更多相关文章

  1. 在linux上创建slave节点

    在slave机器上创建一登录用户,步骤如下: 切换至/usr/sbin目录,执行useradd -m test007  -d /home/test007,test007就是我们所创建的用户 执行su+ ...

  2. 【我的Android进阶之旅】Jenkins挂载slave节点,增强分布式编译的效率

    由于公司的Jenkins任务越来越多,而且所有的Android Jenkins任务都在同一台服务器上进行编译,而且该服务器配置Jenkins任务最多3个任务同时运行,所以有时候大家一起编译的时候,只能 ...

  3. Jenkins安装Slave节点

    在系统管理----节点管理下 创建完成后会出现slave节点启动的命令,下载agent.jar,然后启动服务 Master-slave相当于Server和Agent,master管理job和slave ...

  4. js动态创建style节点(js文件中添加css)

    ie6 不能 document.createElement('style') 然后append到head标签里.所以就找到这样个好文章 --------------------- 有很多提供动态创建 ...

  5. devtmpfs文件系统创建设备节点

    分类: LINUX 原文地址:devtmpfs文件系统创建设备节点 作者:wangbaolin719 http://blog.chinaunix.net/uid-27097876-id-4334356 ...

  6. linux中创建gpio节点

    转自:http://blog.chinaunix.net/uid-29165999-id-4296162.html #define GPIO_MAJOR 230 // major device NO. ...

  7. Labview中创建属性节点和调用节点的用法

    创建属性节点 个人感觉有点像C中的指针 创建调用节点

  8. WIN版的Jenkins Master加入LINUX的SLAVE节点,并作C++程序的集成交付

    这次深撸了一下JENKINS的配置,不敢说完全通了. 但对于整个体系,有了更新认识. 将LINUX作为SLAVE节点加入WIN的JENKINS里,网上有很多教程,依作即可. 在将相关任务分配给这个节点 ...

  9. Javascript进阶篇——(DOM—节点---插入、删除和替换元素、创建元素、创建文本节点)—笔记整理

    插入节点appendChild()在指定节点的最后一个子节点列表之后添加一个新的子节点.语法: appendChild(newnode) //参数: //newnode:指定追加的节点. 为ul添加一 ...

随机推荐

  1. python学习笔记(HTMLTestRunner在Py3的兼容)

    博主最近开始重构自动化框架并且向Py3上兼容 第一个问题就是生成测试报告的HTMLTestRunner,由于此模块是基于Py2开发的,这里需要修改源码 # 94行 # import StringIO ...

  2. IOS UIApplication和AppDelegate 关系

    UIApplication.AppDelegate.委托等的关系?  什么是委托?为什么要有委托?委托在Iphone中的实现机制是怎样的? 一般来说,我们创建了一个Iphone项目,默认会有这个mai ...

  3. Word 开发资料集合

    Word 对象模型概述  https://msdn.microsoft.com/zh-cn/library/kw65a0we.aspx DSOframer微软官方API的查阅方法  http://sh ...

  4. Android 五种存储方式个人总结

    一 . 文件存储 FileOutputStream out = openFileOutput("data",Context.MODE_PRIVATE); BufferedWrite ...

  5. Beta发布

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2408] 视频展示 链接[https://www.cnblogs.com/erc ...

  6. 选择语句=》OO函数实现

    let a; let b; if (a==="A") { b='定向' }else if (a==='B') { b='开放' }else if(a==='C') { b='全部' ...

  7. Linux运维学习笔记-目录知识点总结

    目录知识点总结: Note: 1.创建一个/server/scripts目录,用于存放脚本(命令:mkdir -p /server/scripts) 2.安装软件时,安装路径统一为/usr/local ...

  8. 一行能装逼的JavaScript代码的延伸

    前段就是坑,入坑水真深. 先看看一个黑科技, 纳尼,这是什么东西. (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+ ...

  9. DesignPattern(六)行为型模式(下)

    状态模式 每个对象都有其对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新 ...

  10. html模拟组织架构横向展开

    近期看到不少人有相似的需求.实现组织架构的横向展开,显示.无聊就做了一下.先看下终于的效果图 兼容各大主流浏览器,而且支持IE6.7,8,不同的是排除标签圆角效果外,资源文件:文件下载地址 主流浏览器 ...