Jenkins 创建 Node 到 Windows

news2025/2/24 18:52:43

Jenkins 创建 Node 到 Windows

一. 新建 Node

Dashboard -> Manage Jenkins -> Manage Nodes and Clouds
在这里插入图片描述
Dashboard -> Nodes -> New Node
在这里插入图片描述
在这里插入图片描述

二. 配置节点

在这里插入图片描述
在这里插入图片描述
Node:节点名
Description:节点描述
Number of executors:节点最大同时执行任务数量
Remote root directory:节点 代理机器上保存 Jenkins 启动文件的目录,最好使用绝对路径
Labels:节点标签,可以是多个,中间以空格分隔
Usage:控制何时构建时使用这个 Node,这里选择的 Only build jobs with label expressions matching this node:构建时只有当 任务Label 选择为此节点中包含的 Label 时,才会执行这个节点
Launch method :启动方法,这里选择了 Launch agents via SSH 通过 SSH 启动
Host:真正运行Node 的电脑的 ip
Credentials:凭证,上面选择了 Launch agents via SSH,这里需要选择一个 SSH 的凭证
Jenkins 配置 Credentials 凭证
Host Key Verfication Strategy:控制Jenkins在连接时如何验证远程主机提供的SSH密钥
Availability:控制Jenkins何时启动和停止此代理,此处选择了 Keep this agent online as much as possible:尽可能让这个代理保持在线状态
Tool Locations:用到的工具在 Windows 电脑上的路径
上面配置了 git,如果不配置,默认使用的是 启动 Jenkins电脑系统上配置的 git,会报错

最后点击 Save 保存

三. 创建如下

在这里插入图片描述
此时 节点 WinTest 图标上标记一个 红色 X,说明这个节点还未启动
点击 WinTest 节点名,打开节点
Status:节点状态,此时节点未启动
Deleta Agent:删除节点
Configure:节点配置,点击打开 回到 二. 配置节点

四.配置 SSH 服务

回到第二步看 Host 填写的 ip 这个是真正运行 Node 的 Windows 电脑的 ip
Jenkins 是在 Mac 电脑上运行,Node 配置中Launch method :启动方法,选择了 Launch agents via SSH

到 Windows 电脑 Windows 配置 SSH 服务
Mac 电脑上的 公钥 配置到 Windows 电脑中,具体位置在 Windows 配置 SSH 服务 找

测试 Mac 通过 SSH 连接 Windows 电脑,如果能成功连接,到 第五步. 启动节点
注意:Jenkins 中 创建的 SSH 凭证中填写的 UserName 需要配置为 Windows电脑的登录用户名,否则验证失败

五. 启动节点

在这里插入图片描述
到 Status 页签,点击 Launch agent

下面几种报错原因以及解决方案
1.

Connection refused (Connection refused)
SSH Connection failed with IOException: "Connection refused (Connection refused)", retrying in 15 seconds. There are 7 more retries left.
Connection refused (Connection refused)

原因:代理机器系统是 Win10,代理机器上还没有启动 SSH 服务
Windows 启动 SSH 服务
再次执行 Launch Agent

Warning: no key algorithms provided; JENKINS-42959 disabled
SSHLauncher{host='10.0.40.182', port=22, credentialsId='liqiangWin', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=60, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.KnownHostsFileKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true}
[02/18/25 21:20:44] [SSH] Opening SSH connection to 10.0.40.182:22.
Searching for 10.0.40.182 in /Users/townest/.ssh/known_hosts
Searching for 10.0.40.182:22 in /Users/townest/.ssh/known_hosts
[02/18/25 21:20:44] [SSH] WARNING: No entry currently exists in the Known Hosts file for this host. Connections will be denied until this new host and its associated key is added to the Known Hosts file.
Key exchange was not finished, connection is closed.
SSH Connection failed with IOException: "Key exchange was not finished, connection is closed.", retrying in 15 seconds. There are 10 more retries left.
Searching for 10.0.40.182 in /Users/townest/.ssh/known_hosts
Searching for 10.0.40.182:22 in /Users/townest/.ssh/known_hosts
[02/18/25 21:20:59] [SSH] WARNING: No entry currently exists in the Known Hosts file for this host. Connections will be denied until this new host and its associated key is added to the Known Hosts file.
Key exchange was not finished, connection is closed.

报错提示连接的 SSH 主机的身份没有经过验证,可能存在中间人攻击的风险。
为了确保安全,SSH 客户端需要验证连接的服务器的身份,以防止被伪装或受到中间人攻击

回到 第二步 Host Key Verfication Strategy:Known hosts file Verification Strategy
主机密钥验证策略 配置的为 从 Known 文件验证
可以到 Mac 电脑上到 ~/.ssh 路径,可以看到一个 known_hosts 文件,这里边存放了需要访问的电脑的 ip
打开会看到 每行以一个 ip 地址开头,后跟 ssh 公钥
比如上面 启动 SSH 服务的 Windows 电脑 ip 为 10.0.40.182
解决方案有多种,这里只处理一种

# ssh-keyscan -H hostname >> ~/.ssh/known_hosts
# hostname 就是启动 SSH 服务电脑的 IP
ssh-keyscan -H 10.0.40.182 >> ~/.ssh/known_hosts

这个命令会获取主机10.0.40.182的公钥并将其追加到 ~/.ssh/known_hosts 文件中

SSHLauncher{host='10.0.40.182', port=22, credentialsId='liqiangWin', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=60, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.NonVerifyingKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true}
[02/19/25 11:27:27] [SSH] Opening SSH connection to 10.0.40.182:22.
[02/19/25 11:27:27] [SSH] WARNING: SSH Host Keys are not being verified. Man-in-the-middle attacks may be possible against this connection.
ERROR: Server rejected the 1 private key(s) for xxxxx (credentialId:Win/method:publickey)
[02/19/25 11:27:27] [SSH] 认证失败。
认证失败。
[02/19/25 11:27:27] Launch failed - cleaning up connection
[02/19/25 11:27:27] [SSH] 连接关闭。

SSH 服务器上配置了 Mac 电脑的公钥,不了解的看这里 Windows 配置 SSH 服务
上面这个报错是 SSH服务器 通过 Mac 的公钥验证 Mac 电脑的私钥 失败

ERROR: Server rejected the 1 private key(s) for xxxxx (credentialId:Win/method:publickey)

看上面报错日志中的 for xxxxx 这个 xxxxx 是导致验证失败的原因
这是因为 我在Jenkins 中配置 SSH密钥凭证的时候 UserName 没有写成 开启 SSH 服务的 Windows 电脑的登录账号名
回到 SSH 密钥凭证,修改密钥凭证的 UserName为 SSH 服务的 Windows 电脑的登录账号名

[SSH] Starting agent process: cd "F:\Jenkins" && E:\JDK12/bin/java  -jar remoting.jar -workDir D:\jenkins_ws -jar-cache D:\jenkins_ws/remoting/jarCache
Error: Unable to access jarfile remoting.jar
Agent JVM has terminated. Exit code=1

上面报错原因是 通过 JDK 启动 jenkins 的时候没有对 remoting.jar 的权限
(1) remoting.jar 文件的作用:我们这里是 Mac 电脑上配置的 Jenkins 添加一个 Node 到 Windows 电脑上,那么Windows 电脑需要从 Mac 电脑的 Jenkins 中下载一个 remoting.jar 有的是 agent.jar 到 Windows 电脑上,然后通过 JDK命令执行这个 remoting.jar 或者 agent.jar,启动Jenkins 在 Windows 电脑上运行

(2) 对于命令中的几个路径从哪里来的做个解释

cd "F:\Jenkins" && E:\JDK12/bin/java  -jar remoting.jar -workDir D:\jenkins_ws -jar-cache D:\jenkins_ws/remoting/jarCache

先到 Node 配置界面
Remote root directory 配置为 F:\Jenkins
Remoting Work directory 配置为 D:\jenkins_ws
在这里插入图片描述
这个命令是一个组合命令
先执行 cd "F:\Jenkins" 切换路径
在执行 E:\JDK12/bin/java -jar remoting.jar -workDir D:\jenkins_ws -jar-cache D:\jenkins_ws/remoting/jarCache
Jenkins 执行 通过 SSH 连接到 SSH 服务的时候其实是在路径 C:\Users\Administrator>
remoting.jar 文件是被 Jenkins 放到路径 F:\Jenkins,所以要先 cd 到这个路径

Error: Unable to access jarfile remoting.jar 纯属是个人 Windows 系统 cmd 环境不同导致的报错
经过测试发现有的电脑 cmd 不管当前在哪个盘符
执行 cd "F:\Jenkins" && E:\JDK12/bin/java -jar remoting.jar -workDir D:\jenkins_ws -jar-cache D:\jenkins_ws/remoting/jarCache 就是成功的

我的电脑上 如果 cmd 当前盘符不是 F盘 那么就会报这个错
修改命令在 cd 后边加上 /d

cd /d "F:\Jenkins" && E:\JDK12/bin/java  -jar remoting.jar -workDir D:\jenkins_ws -jar-cache D:\jenkins_ws/remoting/jarCache

执行发现可以执行成功
解释:在命令行中使用 /d 参数的作用是允许跨磁盘驱动器切换目录
如果不加 /d 参数,cd 命令通常只能在同一磁盘驱动器内切换目录
例如
如果当前目录在 C 盘,使用 cd 命令切换到 C 盘的其他目录是可以正常工作的
但如果要切换到 D 盘的某个目录则会失败
而加上 /d 参数后,就可以跨磁盘驱动器切换目录,例如从 C 盘切换到 D 盘的某个目录‌

因为这个命令行是 Jenkins 拼接的,我没找到在哪里配置的,所以我没法加 /d
我的修改方案是,Remote root directory:C:\Jenkins
直接修改到 C盘

再次重新 Launch agent

[SSH] Starting agent process: cd "C:\Jenkins" && E:\JDK12/bin/java  -jar remoting.jar -workDir D:\jenkins_ws -jar-cache D:\jenkins_ws/remoting/jarCache
org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
: Using D:\jenkins_ws\remoting as a remoting work directory
rg.jenkinsci.remoting.engine.WorkDirManager setupLogging
Both error and output logs will be printed to D:\jenkins_ws\remoting
<===[JENKINS REMOTING CAPACITY]===>channel started
Remoting version: 4.10

上面日志显示节点启动成功

[02/21/25 14:14:07] [SSH] Starting agent process: cd "C:\Jenkins_2" && java  -jar remoting.jar -workDir C:\Jenkins_2 -jar-cache C:\Jenkins_2/remoting/jarCache
2�� 21, 2025 2:14:07 ���� org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
��Ϣ: Using C:\Jenkins_2\remoting as a remoting work directory
2�� 21, 2025 2:14:07 ���� org.jenkinsci.remoting.engine.WorkDirManager setupLogging
��Ϣ: Both error and output logs will be printed to C:\Jenkins_2\remoting
<===[JENKINS REMOTING CAPACITY]===>channel started
2�� 21, 2025 2:14:07 ���� hudson.remoting.UserRequest perform
����: LinkageError while performing UserRequest:hudson.slaves.SlaveComputer$SlaveVersion@455044b3
java.lang.UnsupportedClassVersionError: Failed to load hudson.slaves.SlaveComputer$SlaveVersion
	at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:472)
	at hudson.remoting.RemoteClassLoader.loadRemoteClass(RemoteClassLoader.java:301)
	at hudson.remoting.RemoteClassLoader.loadWithMultiClassLoader(RemoteClassLoader.java:277)
	at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:236)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:398)
	at hudson.remoting.MultiClassLoaderSerializer$Input.resolveClass(MultiClassLoaderSerializer.java:133)
	at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1886)
	at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1772)
	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
	at hudson.remoting.UserRequest.deserialize(UserRequest.java:312)
	at hudson.remoting.UserRequest.perform(UserRequest.java:196)
	at hudson.remoting.UserRequest.perform(UserRequest.java:50)
	at hudson.remoting.Request$2.run(Request.java:391)
	at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:81)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.UnsupportedClassVersionError: hudson/slaves/SlaveComputer$SlaveVersion has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:877)
	at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:470)
	... 22 more

Agent JVM has not reported exit code. Is it still running?
[02/21/25 14:14:10] Launch failed - cleaning up connection
[02/21/25 14:14:10] [SSH] Connection closed.
ERROR: Connection terminated

上面日志 cd "C:\Jenkins_2" && java -jar remoting.jar -workDir C:\Jenkins_2 -jar-cache C:\Jenkins_2/remoting/jarCache 执行已经成功了,下面还有报错
找到日志中

Caused by: java.lang.UnsupportedClassVersionError: hudson/slaves/SlaveComputer$SlaveVersion has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

这表明当前使用的 Java 运行时只能处理到 class 文件版本 55.0,而 Jenkins 代码则是用 class 文件版本 61.0 编译的
根据 Java 的版本对应关系:
Class file version 61.0 对应 Java 17
Class file version 55.0 对应 Java 11
因此,这个错误的解决方案是确保 Jenkins 节点 也就是 Windows 使用 Java 17 或更高版本来运行,安装 JDK17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2304535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本&#xff0c; 然后训练模型&#xff0c;导出模型文件 这个是模型 mod…

【分布式数据一致性算法】Gossip协议详解

在分布式系统中&#xff0c;多个节点同时提供服务时&#xff0c;数据一致性是核心挑战。在多个节点中&#xff0c;若其中一个节点的数据发生了修改&#xff0c;其他节点的数据都要进行同步。 一种比较简单粗暴的方法就是 集中式发散消息&#xff0c;简单来说就是一个主节点同时…

蓝桥杯笔记——递归递推

递归 0. 函数的概念 我们从基础讲起&#xff0c;先了解函数的概念&#xff0c;然后逐步引入递归&#xff0c;帮助同学们更好地理解递归的思想和实现方式。 函数是程序设计中的一个基本概念&#xff0c;简单来说&#xff0c;它是一段封装好的代码&#xff0c;可以在程序中多次…

【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析

【复现DeepSeek-R1之Open R1实战】系列博文链接&#xff1a; 【复现DeepSeek-R1之Open R1实战】系列1&#xff1a;跑通SFT&#xff08;一步步操作&#xff0c;手把手教学&#xff09; 【复现DeepSeek-R1之Open R1实战】系列2&#xff1a;没有卡也能训模型&#xff01;Colab跑Op…

【Qt】可爱的窗口关闭确认弹窗实现

文章目录 ​​​实现思路界面构建交互逻辑实现颜色渐变处理圆形部件绘制 代码在主窗口的构造函数中创建弹窗实例ExitConfirmDialog 类代码ColorCircleWidget 类代码 今天在Qt实现了这样一个可互动的窗口&#xff08;上图由于录屏工具限制没有录制到鼠标&#xff09; ​​​实现…

计算机毕业设计SpringBoot+Vue.jst网上购物商城系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

自制操作系统前置知识汇编学习

今天要做什么&#xff1f; 为了更好的理解书中内容&#xff0c;需要学习下进制分析和汇编。 汇编语言其实应该叫叫机器指令符号化语言&#xff0c;目前的汇编语言是学习操作系统的基础。 一&#xff1a;触发器 电路触发器的锁存命令默认是断开的&#xff0c;是控制电路触发器…

Unity制作游戏——前期准备:Unity2023和VS2022下载和安装配置——附安装包

1.Unity2023的下载和安装配置 &#xff08;1&#xff09;Unity官网下载地址&#xff08;国际如果进不去&#xff0c;进国内的官网&#xff0c;下面以国内官网流程为例子&#xff09; unity中国官网&#xff1a;Unity中国官网 - 实时内容开发平台 | 3D、2D、VR & AR可视化 …

深度学习(5)-卷积神经网络

我们将深入理解卷积神经网络的原理&#xff0c;以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例&#xff0c;它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过&#xff0c;当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…

【HarmonyOS Next】拒绝权限二次申请授权处理

【HarmonyOS Next】拒绝权限二次申请授权处理 一、问题背景&#xff1a; 在鸿蒙系统中&#xff0c;对于用户权限的申请&#xff0c;会有三种用户选择方式&#xff1a; 1.单次使用允许 2.使用应用期间&#xff08;长时&#xff09;允许 3.不允许 当用户选择不允许后&#xff0…

跟着李沐老师学习深度学习(十四)

注意力机制&#xff08;Attention&#xff09; 引入 心理学角度 动物需要在复杂环境下有效关注值得注意的点心理学框架&#xff1a;人类根据随意线索和不随意线索选择注意力 注意力机制 之前所涉及到的卷积、全连接、池化层都只考虑不随意线索而注意力机制则显示的考虑随意…

基于YOLO11深度学习的半导体芯片缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Spring Boot3.x集成Flowable7.x(一)Spring Boot集成与设计、部署、发起、完成简单流程

一、Flowable简介 Flowable 是一个轻量级、开源的业务流程管理&#xff08;BPM&#xff09;和工作流引擎&#xff0c;旨在帮助开发者和企业实现业务流程的自动化。它支持 BPMN 2.0 标准&#xff0c;适用于各种规模的企业和项目。Flowable 的核心功能包括流程定义、流程执行、任…

网络安全-openssl工具

OpenSSl是一个开源项目&#xff0c;包括密码库和SSL/TLS工具集。它已是在安全领域的事实标准&#xff0c;并且拥有比较长的历史&#xff0c;现在几乎所有的服务器软件和很多客户端都在使用openssl&#xff0c;其中基于命令行的工具是进行加密、证书管理以及测试最常用到的软件。…

【Web开发】PythonAnyWhere免费部署Django项目

PythonAnyWhere免费部署Django项目 文章目录 PythonAnyWhere免费部署Django项目将项目上传到GitHub从GitHub下载Django项目创建Web应用配置静态文件将项目上传到GitHub 打开项目,输入以下命令,生成Django项目依赖包。pip list --format=freeze > requirements.txt打开Git …

视频的分片上传

分片上传需求分析&#xff1a; 项目中很多地方需要上传视频&#xff0c;如果视频很大&#xff0c;上传到服务器需要很多时间 &#xff0c;这个时候体验就会很差。所以需要前端实现分片上传的功能。 要实现分片上传&#xff0c;需要对视频进行分割&#xff0c;分割成不同的大小…

Moonshot AI 新突破:MoBA 为大语言模型长文本处理提效论文速读

前言 在自然语言处理领域&#xff0c;随着大语言模型&#xff08;LLMs&#xff09;不断拓展其阅读、理解和生成文本的能力&#xff0c;如何高效处理长文本成为一项关键挑战。近日&#xff0c;Moonshot AI Research 联合清华大学、浙江大学的研究人员提出了一种创新方法 —— 混…

Deepseek首页实现 HTML

人工智能与未来&#xff1a;机遇与挑战 引言 在过去的几十年里&#xff0c;人工智能&#xff08;AI&#xff09;技术取得了突飞猛进的发展。从语音助手到自动驾驶汽车&#xff0c;AI 正在深刻地改变我们的生活方式、工作方式以及社会结构。然而&#xff0c;随着 AI 技术的普及…

VS2022配置FFMPEG库基础教程

1 简介 1.1 起源与发展历程 FFmpeg诞生于2000年&#xff0c;由法国工程师Fabrice Bellard主导开发&#xff0c;其名称源自"Fast Forward MPEG"&#xff0c;初期定位为多媒体编解码工具。2004年后由Michael Niedermayer接任维护&#xff0c;逐步发展成为包含音视频采…

kafka基本知识

什么是 Kafka&#xff1f; Apache Kafka 是一个开源的分布式流处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;后来成为 Apache 软件基金会的一部分。Kafka 主要用于构建实时数据管道和流处理应用程序。它能够高效地处理大量的数据流&#xff0c;广泛应用于日志收集、数…