在《Jenkins部署架构概述 》这篇博文中对Jenkins部署架构进行了讲解。对于分布式架构,Jenkins包括固态Agent和动态Agent两种方案。
本文将对Jenkins添加固定Agent进行详细讲解。
(1)登录Jenkins Dashboard,单击左侧“Manage Jenkins”,选择“Security→代理配置页面(TCP port for JNLP)”,如图所示。我们可以选择开放固定端口或者随机开放Jenkins Master的一个端口来提供JNLP服务。
新安装完的Jenkins Master节点上面的代理默认是禁用状态, 如果这里不开启代理,后面添加JNLP连接模式的固定节点时会以下报错。
java.io.IOException: http://10.20.31.153:8080/jenkins/tcpSlaveAgentListener/ is invalid: 404 null at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:222) at hudson.remoting.Engine.innerRun(Engine.java:809) at hudson.remoting.Engine.run(Engine.java:563)
(2)单击左侧“Manage Jenkins”,选择“Nodes”。
(3)单击页面右上角的“New Node”,输入节点名称为node203(该名称可自定义),类型选择固定节点。
配置以下节点信息:
其余参数可保持默认,无需填写,并单击“保存”。
(4)在“节点列表”中单击新增的节点名称,可看到Agent状态未连接,并提供了节点连接Jenkins的方式。
(5)在固定Agent节点上,打开命令终端,运行Master提示的命令。
注意 1:Agent节点需要提前安装好与Jenkins版本匹配的JRE,不然报has been compiled by a more recent version of the Java Runtime(class file version 5x.0)错误。其中5x:51=Jdk7、52=Jdk8、53=Jdk9、54=Jdk10、55=Jdk11,以此延续。
注意 2:SSH和JNLP2种启动方式区别,主要核心区别是:
- SSH是Master主动连接Slave,当你在Master配好了一台机器的账密,那么Master就可以通过账密SSH到这台机器执行命令,所以
SSH是Master主动连接Slave
。- JNLP是Slave主动连接Master,Slave接收并执行Master传递的Job,然后将结果反馈给Master。
(6)在Jenkins Master“节点列表”中单击新增的节点名称,可看到Agent状态已连接,下面就可以使用固定节点构建流水线任务了。
(1)新建个流水线,Pipeline如下。
pipeline { agent { node { label 'node203' } } stages { stage('test node203') { steps { echo '使用node203执行流水线' sh 'sleep 1h' } } } }
(2)运行流水线,再次查看node203节点状态,可以看到正在执行流水线分配(通过标签匹配)到当前节点的流水线任务。
注意 1:上面示例只是个Hello World,如果流水线里面需要执行mvn命令,需要在固定节点安装配置指定版本的mvn,如果流水线需要执行npm命令,需要在固定节点安装配置指定版本的nodejs.....。
Java网络启动协议(JNLP)是一种允许客户端启动托管在远程Web服务器上的应用程序的协议,用于在Java应用程序之间建立安全、高效的通信。
JNLP只是技术方式,其核心是:
Agent程序
与Master建立连接,接收并执行Master传递的Job,然后将结果反馈给Master。(1)从节点通过JNLP协议与主节点建立TCP/IP长连接,这个长连接的机制允许Jenkins Master和Agent之间保持持续的通信,以便实时地进行任务调度、执行和状态更新。
java -jar agent.jar -url http://10.20.31.153:8080/jenkins/ -secret 800b585576416c0041ed6ee9783f895118193e443309a2d557cfb319b057a8a9 -name node203 -workDir "/opt/jenkins"
以下是关于长连接的详细信息:
通信过程:
连接的稳定性:
(2)主节点调度构建任务,从节点根据标签接收构建任务,并按照主节点的指示执行构建作业,并将构建结果和日志发送回主节点。
(3)主节点将构建结果和日志发布到Jenkins界面上,供用户查看和监控。
本文详细讲解了如何在Jenkins中添加固定Agent并使用固定节点运行流水线任务,同时阐述了Jenkins JNLP连接方式的原理。通过本文,您可以更好地理解和优化Jenkins的节点配置和任务管理。