Jenkins之节点的使用

节点概念

Jenkins服务运行在一台服务器上,服务器的资源是有限的,Jenkins服务的构建速度受服务器资源影响,也是有限的。当我们需要构建的项目比较多或规模比较大的时候,可能会超出Jenkins的构建能力,超出其构建能力,导致构建任务堆积,严重的话会让服务崩溃。
单个Jenkins服务满足不了我们构建需求,但是多个Jenkins服务管理起来比较麻烦。我们可以以“分布式”的方法来维护构建数据,即Jenkins的节点概念。
节点,可以理解为是Jenkins的员工,我们部署的Jenkins服务是主节点,相当于领导。领导表示TA快忙死了,然后大老板知道后,就招了几个人(买服务器)作为领导的员工(节点),领导接到任务(构建任务)之后,就按照相关规则将任务分给员工,员工接收成功后就开始苦命的干活(执行命令),干活的时候将执行结果反馈给领导,领导接收反馈后更新构建结果(任务成功或失败等)。

总的来说,节点就是另一个服务器,这个服务器接收Jenkins主节点的命令并执行。我们一般叫Jenkins服务为主节点,主节点将构建任务分配到不同的节点。
在这里插入图片描述

节点配置

节点有多种配置方式,常用的是2种:agent代理和SSH登录
本文准备了2台linux服务器进行讲解。其中一台部署了Jenkins服务,另一台配置为节点。
节点的配置都是在【Manage Jenkins】下的【Nodes and Clouds】进行配置的
在这里插入图片描述
在这里插入图片描述
当前章节我们使用的可以触发构建任务的项目如下:

当前项目会下载源码:
在这里插入图片描述
当前项目会执行ip addr命令
在这里插入图片描述

接下来,我们还要再子节点上配置项目可运行的环境:配置java环境和安装git工具
根据项目内容,我们需要将子节点服务器的环境配置成可以运行项目。首先,子节点需要接收来自jenkins的java命令(jenkins是使用Java语言写的),所以需要配置java环境;然后我们的项目会下载gitee仓库代码,需要支持git命令,所以需要安装git工具。即子节点服务器需要配置java环境、安装git工具。

agent代理方式

agent代理方式是Jenkins默认就有的节点配置方式,该方式是主节点提供agent控制器,节点运行agent控制器来与主节点进行连接,主节点就可以通过该连接指挥agent节点干活。

步骤如下:

  • 1.在jenkins服务上配置agent子节点并保存
  • 2.子节点服务器中,下载指定的agent.jar,并执行指定的java -jar命令去连接主节点
  • 3.主节点执行构建任务

在这里插入图片描述
agent代理方式,是在子节点配置的时候,启动方式Launch method选择Launch agent by connecting it to the controller。这种方式是jenkins服务根据子节点的配置,生成一个agent.jar,子节点服务器下载agent.jar,并通过java命令运行agent.jar主动与jenkins主节点连接

配置并保存节点后,我们看到该节点是未连接的状态:
在这里插入图片描述
点击节点名称(Name),进入节点状态(Status)页面,找到需要在子节点对应的服务器上执行的命令
在这里插入图片描述
由于子节点服务器是Linux系统,所以执行“Run from agent command line: (Unix)”下的命令,我们可以看到,第2条命令是java命令,所以我们需要在子节点服务器中配置java环境,即安装jdk,linux安装jdk的步骤参考这篇博客(Jenkins入门),配置好java环境后,执行相关命令,执行情况如下:
在这里插入图片描述
子节点服务器执行了指定的命令后,稍等几分钟,在jenkins服务的子节点列表页面,可以看到子节点连接状态为已连接
在这里插入图片描述
连接成功后,我们去配置项目,触发项目的构建:
在这里插入图片描述
项目构建成功后,我们在主节点服务器只能看到一些构建日志
在这里插入图片描述
实际工作目录workspace是在子节点服务器的指定路径(Remote root directory字段的绝对路径)中
在这里插入图片描述

在这里插入图片描述

SSH连接方式

SSH连接方式,是主节点通过配置的ssh信息(凭证等),通过ssh登录的方式登录到子节点,是主节点主动连接子节点。
Jenkins节点启动方式默认支持agent代理方式的,如果想要支持SSH,则需要安装SSH Build Agents插件
在这里插入图片描述
需要创建一个子节点服务器的登录凭证,路径:【Manage Jenkins】–>【Manage Credentials】,Domain选择“global”,点击“Add Credentials”添加登录凭证
在这里插入图片描述

入门示例

凭证的种类有多种,我们先用Username with password的方式
在这里插入图片描述
在这里插入图片描述
凭证添加完成后,我们去新增节点,路径:【Manage Jenkins】–>【Nodes and Clouds】,点击“New Node”新增节点,然后配置节点
在这里插入图片描述

相关字段说明:

  • Remote root directory:远程根目录(绝对路径),相当于Jenkins根目录,存放项目的workspace(有代码下载的话会下载到这里)和ssh连接工具(比如remoting.jar)
  • Launch method:启动方式,如果是要使用ssh登录方式,则选择Launch agents via SSH(需要安装SSH Build Agents插件)
  • Host:子节点对应服务器的公网IP地址
  • Credentials:凭证,即SSH登录凭证(登录信息),选择我们前面步骤创建的凭证
  • Host Key Verification Strategy:主机密钥验证策略,如果是SSH用户密码的凭证进行连接的话,选择“Non verifying Verification Strategy”策略,如果是密钥的方式,则选择"Known hosts file Verification Strategy“策略
  • JavaPath:由于jenkins是用java语言写的,相关的操作也是java命令,所以子节点服务器上必须配置java环境,如果是Linux系统,可以使用 which java 获取到java环境路径
  • Remoting Work directory:远程工作目录(绝对路劲),即jenkins子节点的工作路径,存放一些构建日志数据(比如remoting)。如果未设置(为空)的话,则默认使用Remote root directory字段的路径

节点配置好后,点击Save按钮进行保存,主节点会自动去连接子节点,我们可以通过子节点的【Log】去查看ssh连接情况:
在这里插入图片描述
我们也可以在节点列表中查看连接情况:
在这里插入图片描述
连接过程中,也会在远程根目录(Remote root directory)下生成remoting.jar
在这里插入图片描述
ssh连接成功后,接下来我们去触发项目构建:
在这里插入图片描述
构建结束后,我们从此次构建的Console Output中查看构建日志
在这里插入图片描述

ssh凭证设置

ssh连接方式设置步骤中,我们需要先去创建ssh登录凭证,从截图中可以看到,ssh登录凭证的设置有多种方式,具体的使用如下:

  • Username with password
  • SSH Username with private key
  • Secret file
  • Secret text

常用的是Username with passwordSSH Username with private key

SSH Username with private key
步骤1:在Jenkins主节点上生成密钥,命令:ssh-keygen -t rsa

在这里插入图片描述

步骤2:进入jenkins目录,获取私钥和公钥

在这里插入图片描述

步骤3:将私钥配置到凭证credentials中

在这里插入图片描述
新建credentials,配置说明如下:

  • Kind:这里我们介绍SSH Username with private key的用法,就选择这个
  • Scope:范围,即该凭证在哪里可以使用
  • ID:凭证ID,不重复就行
  • Description:凭证描述,在节点配置时方便区分凭证
  • Username:ssh登录子节点时的用户
  • Private Key:SSH Username with private key时,必须勾选,并将主节点服务器生成的id_rsa文件内容复制到key中
步骤4:将主节点服务器生成的公钥id_rsa.pub的文本内容,复制到子节点服务器的/{用户名}/.ssh目录下的authorized_keys文件中。如果没有.ssh目录,可以自己创建:
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys

chmod -R 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

创建后将id_rsa.pub文本内容复制到authorized_keys文件中(linux系统可以使用vi命令)
在这里插入图片描述

步骤5:配置子节点

子节点的配置与【SSH连接方式】的Username with password示例基本相同,只有以下几个字段配置不同:

  • Credentials:选择步骤3:将私钥配置到凭证credentials中步骤中创建的凭证
  • Host Key Verification Strategy:如果主节点服务器有通过ssh连接子节点服务器成功过,则可以选择Known hosts file Verification Strategy;否则,选择Manually provided key Verification Strategy
  • Remote root directory设置成"/root/test/jenkins_test/ssh_key",Remoting Work directory为空

在这里插入图片描述连接成功后,就可以触发构建任务了。

其他配置

Labels

Labels是主节点通过项目的Label进行匹配,将构建任务发给Labels匹配的子节点。
项目中的配置:
在这里插入图片描述
子节点没有配置Labels,主节点配置了Labels为"wen",所以项目在主节点运行:
在这里插入图片描述
在这里插入图片描述

Node Properties

Node Properties,节点属性,设置节点环境变量(Environment variables)和工具设置(Tool Locations)

Environment variables

Environment variables,即节点环境变量,从使用描述中我们可以了解到:

  1. 在节点中设置的节点环境变量,只能在当前节点中的构建任务中使用,其他节点都不能使用
  2. 如果全局变量也存在与节点环境变量相同的变量名,则使用当前节点的变量;
  3. 使用方式:

linux系统:$NAME${NAME}
windows系统:%NAME%

  1. 如果变量值为空或为纯空格,则相当于该节点变量无效声明,即不可用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
Tool Locations

有时候我们的节点对应服务器,同一个工具安装了多个版本,比如python2和python3,我们需要指定工具使用的版本(其安装目录)。
在这里插入图片描述
从描述中可以了解到:

  1. 在这里的工具配置,会覆盖全局的工具配置(Dashboard–>Manage Jenkins–>Tools)
  2. 如果没有配置的话,就使用全局的工具配置,全局工具配置可以自动安装指定工具
Jenkins 使用 JNLP (Java Network Launch Protocol) 来连接子节点(也称为 Jenkins slaves),特别是当采用无代理模式时,JNIP(Java Native Interface Process)是一种更安全、更快捷的方式。JNLP 是一种基于 XML 的协议,它允许 Jenkins节点启动一个本地的 Java 应用程序,这个应用程序会作为一个远程奴隶在用户权限范围内运行。 以下是使用 JNIP 连接子节点的基本流程: 1. **设置 Jenkins Master**: - 在 Jenkins节点上配置 Slave Configuration,选择 "JNLP (Java Web Start)" 或 "JDK on Linux Agent" 作为连接方式。 - 配置 JNLP 选项,包括jnlpUrl、securityRealm 和 launchMethod,其中jnlpUrl 是指向包含 JNLP 客户端的 URL。 2. **创建 JNLP Client (slave.jar)**: - Jenkins节点会自动为每个 JNLP 节点生成一个名为 `slave.jar` 的 JAR 文件,这是用于启动远程 Java 应用的客户端。 3. **部署 JNLP Client**: - 将生成的 `slave.jar` 发送到子节点的可访问位置,通常是通过 SSH 或其他网络传输方式。 - 子节点上安装 Java 并通过命令行运行 `slave.jar`,它会自动与主节点建立连接并开始工作。 4. **安全配置**: - 如果有安全需求,可以启用 SSL/TLS 加密,提供安全的 JNLP URL,以及使用 Jenkins 的安全管理功能。 JNIP 的优点在于不需要在子节点上预先安装完整版本的 Jenkins,降低了管理成本,同时提供了较好的安全性。然而,它也有局限性,例如无法直接执行系统级别的操作,适合那些只需要执行特定任务的环境。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值