Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CI&CD夺命十三剑5-Jenkins分布式环境搭建及多节点运行

CI&CD夺命十三剑5-Jenkins分布式环境搭建及多节点运行

作者头像
大刚测试开发实战
发布于 2023-08-29 08:12:57
发布于 2023-08-29 08:12:57
2.7K00
代码可运行
举报
运行总次数:0
代码可运行

前言

1.Jenkins架构原理回顾

在前面一篇《Jenkins环境搭建&常见使用技巧》中,我们介绍了Jenkins的架构原理:

Jenkins是一种典型的Master-Slave主从架构。该架构包括一个Master(主)节点和多个Slave(从)节点。Jenkins的Master-Slave架构提供了可扩展性和灵活性,允许用户添加更多节点来提高Jenkins的处理能力,同时保持构建和管理过程的可靠性。

  1. Master节点:Jenkins的核心是Master节点,包含Jenkins的核心功能和管理界面,并与所有Slave节点通信,调度和分配作业。主要的作业配置信息,如构建工作流程、触发器和构建器、节点和视图信息,以及连接外部系统的应用程序都存储在Jenkins Master节点中。
  2. Agent节点:也称slave节点,是通过Jenkins Agent(代理)连接到Master节点的计算机,它们执行来自Master节点的作业并将结果返回给Master节点。

2.Jenkins分布式环境优点

在Jenkins的分布式环境中,有以下几个好处:

  1. 增加伸缩性:Jenkins的分布式环境中可以添加多个节点,将负载分散到不同的节点上,从而增加伸缩性。如果对Jenkins的使用量有要求,可以先添加一些节点,然后在需要的时候再添加更多节点。
  2. 提高性能:在集中式环境中,Jenkins会变得拥挤,当多个任务同时运行时,会导致性能下降。在分布式环境中,任务可以在不同的节点上运行,因此可以大大提高性能。
  3. 支持多种操作系统:Jenkins分布式环境可以在多种操作系统上运行,如WindowsLinux等,在不同的操作系统上运行构建可以更好的测试、验证和分发。
  4. 更好的可靠性:在一个节点发生故障时,其他节点可以继续运行任务,从而保证每个任务都能成功运行,增加了整个系统的可靠性。
  5. 更好的安全性:在分布式环境中,不同的节点可以采用不同的方式进行认证和授权,从而大大提高了Jenkins的安全性。

总之,Jenkins分布式环境可以提供更好的性能、伸缩性、可靠性和安全性,使得整个系统更加高效、稳定和安全。

3.为什么要部署分布式环境?

其实驱使我搭建分布式环境倒不是因为伸缩性不足、性能低下等方面的原因,而是我在一次Jenkins配置Maven项目、编译后端springboot项目时,老是报Maven依赖库错误的问题,最终导致编译不过,尝试了很多方法都没有解决。但该项目在我本地的IDEA中是可以正常编译通过的,于是我想了一个曲线救国的方案,就是在另一台Windows机器上,搭建一套和我本机一模一样的环境,将我本机的Maven仓库整体打包复制过去,然后再安装一个Jenkins,作为从节点使用。

当前我只在一个单节点服务器上安装了Jenkins,计划在一台Linux系统机器上安装Jenkins作为从节点1,在另一台Windows系统机器上安装Jenkins作为从节点2。

节点

主机

系统

用途

Master 主节点

192.168.1.20

CentOS 7

分配、调度任务

Slave 从节点1

192.168.1.122

CentOS 7

编译前端项目

Slave 从节点2

192.168.1.188

Win 10

编译后端项目

一、添加Linux从节点

1.从节点环境配置

① 从节点安装Jenkins

所在服务器需要安装Jenkins,版本最好与主节点Jenkins版本保持一致,安装步骤参考前面的《Jenkins环境搭建&常见使用技巧

② 从节点环境配置

需要安装Git以及相关插件,如果是编译前端项目,需要配置nodejs,如果是编译后端项目,还需要安装maven等。前端环境配置可以参考前面的一篇《Jenkins实现前端项目自动化构建

2.添加从节点

① 创建从节点

入口:系统管理-节点管理-添加节点,填写从节点名称,选择固定节点

② 填写从节点信息
  • Number of executors:执行器数量,支持的最大job并发数,一般配置建议不超过当前节点电脑的CPU数量
  • 远程工作目录
  • 标签:做调度策略时会用到
  • 用法:一般选择第一个“Use this node as much as possible”(尽可能的使用这个节点)
  • 启动方式:通过Java Web启动代理

注意最后“节点属性”,可以勾选“工具位置”提前指定该机器中的如JDK等工具的路径。

刚添加好后的从节点处于不可用状态,还需要进行一堆的配置:

③ 主节点配置代理

主节点:系统管理-全局安全配置-代理,指定一个代理端口(注意:从节点服务器防火墙一定要开放此端口

④ 从节点连接主节点

在管理节点点击查看新增的从节点详情,会给出从节点如何连接主节点的提示:

在从节点上执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 下载agent.jar
curl -sO http://192.168.1.20:8080/jenkins/jnlpJars/agent.jar
# 连接主节点
java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/h122/jenkins-agent.jnlp -secret 5d40fefd1148aa3e1461eb53a7764f655c030a7859cfa648b2340ba019146a3d -workDir "/home/jenkins/workspace"

此时我的报错了,提示42730端口不可用,也就是前面提到的从节点服务器防火墙一定要开放主节点中配置的代理端口

防火墙开通端口号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --permanent --add-port 42730/tcp
firewall-cmd --reload

再次执行连接命令后,连接成功

但是这种启动方式会一直处于前台运行,此时终端窗口无法再进行其他操作。因此,可以给它创建一个启动脚本,使其后台运行。

⑤ 创建启动脚本

脚本内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nohup java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/h122/jenkins-agent.jnlp -secret 5d40fefd1148aa3e1461eb53a7764f655c030a7859cfa648b2340ba019146a3d -workDir "/home/jenkins/workspace" 2>&1 >nohup.out  &

运行脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod +x start_agent.sh
./start_agent.sh

3.测试构建项目

在前面一篇《Jenkins实现前端项目自动化构建》中,已经在主节点成功构建运行了前端项目,此时我们再次构建该项目,看看它会不会在从节点运行。

当我点击构建时,该项目确实是通过我新建的从节点"h122"执行构建的

但出现了报错"No such file or directory",提示项目路径不存在:

项目构建报错问题排查
  • 项目的配置:
  • 控制台输出日志:
  • 原本在master节点上运行时生成的工作目录路径:
  • 转到slave从节点上运行时生成的工作目录路径:

经过一番排查,终于找到了原因:

  • 此项目原本是在主节点运行,我在主节点配置这个任务时,项目的路径是写死的:/home/jenkins/workspace/开普勒-前端,在主节点运行时确实有这个路径,也能够正常运行;
  • 但是我在配置从节点时设置的远程工作目录是:/home/jenkins/workspace,当从节点首次构建项目时,也会生成一个workspace目录,并在这个workspace目录下创建以项目名称“开普勒-前端”为名字的工作目录,最后叠加在一起,从节点上该项目真正的工作目录就是 /home/jenkins/workspace/workspace/开普勒-前端。而此时从节点匹配不到原本的"/home/jenkins/workspace/开普勒-前端"这个目录,所以运行失败。
项目构建报错问题解决

解决方式有两种:

  1. 一种是修改从节点配置,将远程工作目录路径去掉一层workspace目录;
  2. 第二种是通过全局变量$WORKSPACE来声明工作目录;

全局变量

我用的是第二种,将构建步骤中原本的"cd /home/jenkins/workspace/开普勒-前端"改为"cd $WORKSPACE"

再次构建,构建成功!

企微群也收到了构建成功的消息通知:

二、添加Windows从节点

1.从节点环境配置

① 从节点安装Jenkins

同样是需要先在Windows电脑上提前安装好Jenkins。

② 从节点环境配置

同样需要安装JDK、Git以及相关插件,如果是编译前端项目,需要配置nodejs,如果是编译后端项目,还需要安装maven等。

2.添加从节点

① 创建从节点

入口:系统管理-节点管理-添加节点,填写从节点名称,选择固定节点

② 填写从节点信息

同样选择“通过Java Web启动代理”

在管理节点点击查看新增的从节点详情,会给出从节点如何连接主节点的提示:

③ 从节点连接主节点

在从节点上执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -sO http://192.168.1.20:8080/jenkins/jnlpJars/agent.jar
java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/win188/jenkins-agent.jnlp -secret ed74e189c3cf7012fac65f0c9af7e091a1159d36ebbef8c581491fccff40a1b5 -workDir "C:\Users\chenjigang\.jenkins"

连接成功:

此时会在我们配置的自定义工作目录下自动创建生成remoting内部数据目录

创建完成,从节点win188处于在线状态:

3.指定项目运行节点

配置Jenkins项目

比如我想为某个项目指定用这个从节点win188来运行,那么则可以在该项目配置-General中勾选“限制项目的运行节点”,并填写标签表达式,也就是前面我们填写从节点时设置的标签名称“win188”

构建该项目,可以看到,已经通过win188这个从节点来运行:

报错问题解决

但是在运行的时候报错了,提示maven路径不存在,原因是此项目原本是在主节点(Linux)上运行的,该台机器上的maven目录是/home/apache-maven-3.6.3,而换到了从节点(Windows)系统运行以后,maven路径不一致。

需要在win188从节点配置中指定相关工具位置:

再次运行,构建成功:

小结

以上就是Jenkins分别添加Linux从节点、Windows从节点以及构建过程中出现报错问题排查解决的全部过程。总体来说,不管Linux从节点还是Windows从节点,步骤基本一致。关键的是如何合理利用好这些节点,从而物尽其用,使其发挥出更大价值!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Jenkins 企业级 CI/CD 实践:安装、配置与 Kubernetes & Docker 集成
Jenkins 是最流行的开源 CI/CD 工具之一,广泛用于自动化软件构建、测试和部署。然而,由于其配置复杂、插件众多,许多企业在落地 Jenkins 时面临挑战。本指南将详细讲解 Jenkins 的安装、Pipeline 配置、Agent 管理、插件扩展,并演示如何与 Kubernetes、Docker 集成,构建高效的自动化部署流程。
网罗开发
2025/02/07
5400
Jenkins 企业级 CI/CD 实践:安装、配置与 Kubernetes & Docker 集成
快速搭建Jenkins集群
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序员欣宸
2019/11/18
1.4K0
企业实战(23)基于Docker平台的Jenkins添加node节点与报错详解(2)
在这里插入图片描述  在添加node节点时,填好“名称”、“描述”、“执行器数量”、“远程工作目录”、“标签”、“用法(一般默认)”、“启动方式(根据情况)”,完成后保存。
非著名运维
2022/06/22
9130
企业实战(23)基于Docker平台的Jenkins添加node节点与报错详解(2)
『Jenkins』Jenkins的Master-Agent架构详解
在现代软件开发中,持续集成(CI)和持续交付(CD)已成为提高开发效率、增强软件质量和加快部署周期的关键实践。而Jenkins作为最流行的开源自动化工具之一,已经成为CI/CD流程的核心工具。它支持自动化构建、测试和部署,并能够通过插件与多个版本控制系统、构建工具和通知系统集成。
二一年冬末
2025/01/27
5420
Jenkins增加节点的两种方式
单节点的Jenkins在实际生产中是很少使用的,满足不了生产环境的业务,所以我们一定是使用Jenkins集群来做持续集成,Jenkins的集群搭建是非常简单的,而且有多种方式。下面我们来介绍一下。
星星在线
2020/09/16
14.8K0
Jenkins增加节点的两种方式
Jenkins分布式部署配置
利用jenkins分布式来构建job,当job量足够大的时候,可以有效的缓解jenkins-master上的压力,提高并行job数量, 减少job处于pending状态时间.
louiezhou001
2019/07/25
1.8K0
Jenkins分布式部署配置
Jenkins 基于 Kubernetes 的动态和静态节点
提到基于 Kubernetes 的 CI/CD,可以使用的工具有很多,比如 Jenkins、Gitlab CI、Drone 之类的,我们这里会使用大家最为熟悉的 Jenkins 来做 CI/CD 的工具。
我是阳明
2023/09/25
9212
Jenkins 基于 Kubernetes 的动态和静态节点
Jenkins分布式
在前面的章节中,所有的Jenkins项目都是在Jenkins master的executor上执行的。如果Jenkins master上只有两个executor,那么只有两个项目能同时执行,其他项目都必须要排队。
陈不成i
2021/06/01
1.2K0
Jenkins2 学习系列21 -- 通过JNLP协议添加Slave节点
Java 网络启动协议(JNLP) 是一种允许客户端启动托管在远程Web服务器上的应用程序的协议。 通过 JNLP 协议增加 agent 比较简单,步骤如下:
mafeifan
2019/08/21
2.5K0
Jenkins2 学习系列21 -- 通过JNLP协议添加Slave节点
Jenkins安装
Java8 无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。安装JDK:yum -y install java
DevOps云学堂
2019/10/18
8980
Jenkins安装
4.Jenkins进阶之分布式架构环境配置
描述: 我们在使用Jenkins的时候一般都会分为server节点与agent节点(也可以叫 slave 节点)。
全栈工程师修炼指南
2022/09/29
3K0
4.Jenkins进阶之分布式架构环境配置
CI&CD夺命十三剑8-Jenkins接入Pytest+Allure自动化测试项目
本篇文章为“CI&CD落地实践系列”文章之8,将重点介绍Jenkins如何接入Pytest+Allure自动化测试项目。Jenkins环境搭建相关及Jenkins接入前后台项目可参考前面几篇文章:
大刚测试开发实战
2023/08/29
1.2K0
CI&CD夺命十三剑8-Jenkins接入Pytest+Allure自动化测试项目
【Jenkins】Jenkins集成Android全自动参数化打包专题
java -jar slave.jar -jnlpUrl http://192.168.23.13:8080/jenkins/computer/IOS_Node/slave-agent.jnlp -secret62b5dc021bbf90e8207057760bf71fae93867c154add3963e5f9c3befee2df06
江中散人_Jun
2023/10/16
5530
【Jenkins】Jenkins集成Android全自动参数化打包专题
基于 Jenkins 挂载节点增强分布式编译的效率
由于公司的Jenkins任务越来越多,而且所有的Android Jenkins任务都在同一台服务器上进行编译,而且该服务器配置Jenkins任务最多3个任务同时运行,所以有时候大家一起编译的时候,只能一个一个的等待。
DevOps时代
2019/06/18
2.3K0
基于 Jenkins 挂载节点增强分布式编译的效率
Jenkins 11个使用技巧,90%以上人没用过!
自由风格项目中,有使用 Performance 插件收集构建产物,但是截至到目前最新版本(Jenkins v2.298,Performance:v3.19),此插件和Jenkins都存在有兼容性问题,会导致项目配置页面table,div错位,而导致无法保存配置,这个问题已经存在了好长时间了(至少半年),插件作者一直没有修复,目前在项目中要想使用这个插件,有以下三种解决办法:
测试开发技术
2025/06/12
1680
Jenkins 11个使用技巧,90%以上人没用过!
通过jenkins交付微服务到kubernetes
随着Kubernetes的遍地开花,Kubernetes的优势可以说是深入人心,很多企业也是利用Kubernetes,来实现更高效的交付和更好地提高我们的资源使用率,推动标准化,适应云原生。
星哥玩云
2022/08/08
2.1K0
通过jenkins交付微服务到kubernetes
Jenkins 流水线远程部署 .NET Core/Framework 到 IIS
在本章中,将会介绍在 Windows Jenkins 上,编译 .NET Core、.NET Framework 项目,以及远程部署到 IIS 中。
痴者工良
2021/06/29
2.7K0
构建Jenkins Slave容器化镜像
配置说明 需要下载jdk、maven/等构建工具 需要下载jenkins站点中agent.jar Dockerfile FROM jenkinsci/slave ARG user=jenkins ARG agent_workdir=/home/${user}/agent ENV jenkins_script=/usr/local/bin/ USER root #替换JDK ADD buildtools/jdk-8u121-linux-x64.tar.gz /usr/local/ #替换agent.j
DevOps云学堂
2019/10/18
2.3K1
谁能告诉我如何通过Jenkins完成分布式环境搭建并执行自动化脚本
今天我们接着昨天的内容,看一看如何完成Jenkins分布式环境的搭建和使用,因为我之前也是自己一个人摸索的,如果有不对的地方,请各位看官私信指出。
菜鸟小白的学习分享
2020/07/28
7160
谁能告诉我如何通过Jenkins完成分布式环境搭建并执行自动化脚本
K8S 分布式构建 Docker 镜像的一些小技巧
镜像更新 最近给我的 Jenkins 镜像 做了一些更新: 加入了基于 RunC 的镜像操作工具:IMG。在特权模式下,可以方便的使用命令行创建和操作 Docker 镜像。 更新 Jenkins 以及 Remoting 版本。 修复一些初始化问题。 下面根据这一版本的镜像简单说说分布式构建过程中的一些要点。 Jenkins 镜像的一些值得注意的东西 Jenkins 在启动 Slave 节点时,会设置下面三个环境变量,所以在 run.sh 就可以引用这几个环境变量启动 Worker 节点: JENKINS_U
崔秀龙
2019/07/23
1.1K0
推荐阅读
相关推荐
Jenkins 企业级 CI/CD 实践:安装、配置与 Kubernetes & Docker 集成
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验