前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins分布式

Jenkins分布式

原创
作者头像
陈不成i
修改2021-06-01 17:57:05
9980
修改2021-06-01 17:57:05
举报
文章被收录于专栏:ops技术分享

一.简介

在前面的章节中,所有的Jenkins项目都是在Jenkins master的executor上执行的。如果Jenkins master上只有两个executor,那么只有两个项目能同时执行,其他项目都必须要排队。

假如单机足够强大,让更多项目同时执行的方法就是增加executor。但单机的容量总会遇到上限,而且还会有单节点问题。

解决办法就是将Jenkins项目分配到多台机器上执行,这就是分布式构建。 在真正介绍分布式构建前,我们需要了解一下Jenkins的架构,因为它决定了分布式构建的实现。

Jenkins采用的是“master+agent”架构(有时也称为“master+slave”架构),如图14-1所示。Jenkins master负责提供界面、处理HTTP请求及管理构建环境;构建的执行则由Jenkins agent负责(早期,agent也被称为slave。目前还有一些插件沿用slave的概念)。

基于这样的架构,只需要增加agent就可以轻松支持更多的项目同时执行。这种方式称为Jenkins agent的横向扩容。

Jenkins结构

file
file
  • node:节点,指包含Jenkins环境及有能力执行项目的机器。master和agent都被认为是节点
  • executor:执行器,是真正执行项目的单元。一个执行器可以被理解为一个单独的进程(事实上是线程)。在一个节点上可以运行多个执行器。
  • agent:代理,在概念上指的是相对于Jenkins master的一种角色,实际上是指运行在机器和容器中的一个程序,它会连接上Jenkins master,并执行Jenkins master分配给它的任务。
  • slave:傀儡,与agent表达的是一个东西,只是叫法不同。

executor的概念是相对于node的,没有node也就谈不上executor了。node通常指的是机器(不论物理的还是虚拟的)。agent有时指一个程序,有时指一种角色(相当于master而言),这取决于上下文。

实现分布式构建最常用、最基本的方式就是增加agent。Jenkins agent作为一个负责执行任务的程序,它需要与Jenins master建立双向连接。连接方式有多种,这也代表有多种增加agent的方式。

二.agent

当agent数量变多时,如何知道哪些agent支持JDK8,哪些agent支持node.js环境呢?我们可以给agent打标签来确定。

通过标签将多个agent分配到同一个逻辑组中,这和过程被称为打标签。同一个agent可以拥有多个标签。在标签名中不能包含空格,也不能包含 ! & | <> ()这些特殊字符中的任何一个,因为包含特殊字符的标签名与标签表达式冲突。

对于支持JDK8的agent,我们打上jdk8标签;对于支持nodejs的agent,打上对应的。如果一个agent支持多个,那就打多个标签。

在打标签时,可以根据以下几个维度来进行。

  • 工具链:jdk nodejs ruby,也可以加上工具的版本,如jdk6,jdk8
  • 操作系统:linux,windows,osx;或者加上操作系统的版本,如ubuntu18.04,centos7.3
  • 系统位数: 32, 63

通过JNLP协议增加agent

java网络启动协议(JNLP)是一种允许客户端启动托管在远程web服务器上的应用程序的协议。Jenkins master与agent通过JNLP协议进行通信。而java web start(jws)可以被理解为JNLP协议的一个客户端。

1.进入Manage Jenkins-》Global security-》TCP port for JNLP配置页面。我们可以选择开放固定端口或者随机开放Jenkins master的一个端口来提供JNLP服务。

随机开放端口不利于自动化,所以选择开放固定端口。此端口用于master与agent之间的tcp通信,与访问Jenkins界面时的端口有别。

2.进入Manage Jenkins-》Manage Nodes-》New Node页面。选项Permanent Agent指的是常驻代理客户端。

单机ok,进入配置

  • Name:agent名称
  • Remote root directory:agent机器上的工作目录(Jenkins master不关心),使用决定路径
  • Lables:agent的标签
  • Usage:agent的使用策略。有2种
    • Use this node as much as possible,尽可能使用此agent。
    • Only build jobs with labe expressions matching this node,只有当构建任务符合本agent的标签时,才使用此agent。
  • Launch method:agent的运行方式。JNLP协议的agent选择Launch agent via Java Web Start。配置完成后进入节点列表页面,此时master节点的状态显示是在线的,即可用的。

3.单机节点列表的node1,跳转到Agent node1页面

file
file

JNLP协议agent连接Jenkins master还有3种方式。 一是在agent机器的浏览器中打开此页面,单机Launch按钮 二是通过javaws命令从master节点下载java web start程序 三是无界面方式连接,通过命令操作

4.选择第三种方式。ssh登陆到Jenkins agent机器,下载agent.jar文件(JNLP协议的客户端),下载路径为:<Jenkins master地址>/jenkins/jnlpJars/agent.jar。 安装jdk,执行命令 java -jar agent.jar -jnlpUrl http://1.1.1.1/jenkins/computer/node1/slave-agent.jnlp -workDir "/app"。其中-workDir参数指定agent的工作目录。 当命令提示连接成功后,打开Jenkins master页面,查看nod1的详情页,会显示已经成功了。

file
file

细心的读者会发现,agent与master之间的连接过程没有任何权限控制。这是因为我们没有设置Jenkins的安全控制(默认Jenkins向匿名用户开放所有权限)。当设置了安全控制后,新建node,我们将在node的详情页看到连接master的命令就变成了∶ java -jar agent.jar-jnlpUrl http://192.168.23.11:8667/jenkins/computer/node1/slave-agent. jnlp -secret29c5d8070da37d1ae68238e112b4ca145335843b4177c013795413355f3a3c3f -workDir "/app"

其中-secret******就是agent 与master之间的连接凭证。每一个JNLP客户端的凭证都不一样。

提示:升级Jenkins后,也需要重新下载agent.jar。agent.jar需要与Jenkins master同步升级。

最后,我们看到通过JNLP协议增加agent的方式是需要在Jenkins界面上进行手动操作的(增加节点的操作)。这部分是无法自动化的,因此,我们只在以下场景中使用这种方式。

  • 在安全性要求相对较高的情况下,只能手动增加agent
  • 增加Windows agent

通过Swarm插件增加agent

Swarm插件可以帮助我们更好的增加agent,安装此插件后,增加agent就不需要在Jenkins界面上进行手动操作了。只需要启动Swarm客户端(指定Jenkins master地址),master与agent就会自动建立连接。

1.安装Swarm插件(swarm)

2.确保Jenkins agent机器上安装有JDK

3.在Jenkins agent机器上下载Swarm客户端 https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/3.9/swarm-client-3.9.jar

4.在Jenkins agent上启动swarm-client连接服务器端 java -jar swarm-client-3.9.jar -username admin -password admin -master http://1.1.1.1/jenkins -name swarm-node

连接显示成功,节点页面可以看到swarm客户端连接成功

以下是swarm-client部分参数的介绍

  1. -deleteExistingClients:如果Jenkins master上已经存在同名的node,则先删除(慎用)
  2. -description:描述
  3. -disableClientsUniqueld:默认Swarm会在node名称后加上一个唯一ID。加入此参数后,代表取消加上唯一ID。
  4. -disableSslVerification:取消SSL校验
  5. -executors N:设置executor的个数
  6. -labels VAL:分配给agent的标签,如果有多个,则使用空格分隔,但要加上引号
  7. -master VAL:指定Jenkins master的URL
  8. -mode MODE:Jenkins master分配项目给agent时使用的格式,既有两种格式,既normal(尽可能分配job)和exclusive(当与指定label匹配时才分配项目)。
  9. -username VAL:连接时使用的用户名
  10. -password VAL:连接时使用的密码。不推荐使用
  11. -passwordEnvVariable VAL:从环境变量中读取密码。推荐使用
  12. -passwordFile VAL:从文本文件中读取密码,推荐使用
  13. -retry N:最大重连次数,默认无次数限制
  14. -retrylnterval N:每次重连间隔时长,单位为秒。默认值为10秒。
  15. java xx.jar -help可以查看参数

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.简介
  • 二.agent
    • 通过JNLP协议增加agent
      • 通过Swarm插件增加agent
      相关产品与服务
      NLP 服务
      NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档