深入解析 Jenkins Agent 的 .jnlp 启动文件

🧩 深入解析 Jenkins Agent 的 .jnlp 启动文件

在 Jenkins 中,通过 JNLP(Java Network Launch Protocol)方式连接 Agent 是一种常见且灵活的方式。你可能曾见过类似这样的命令:

java -jar agent.jar -jnlpUrl file:///users/sqi.io/jenkins-agent.jnlp -workDir "/users/sqi.io/jenkins"

但其中提到的 .jnlp 文件到底是做什么的?又包含了哪些关键内容?这篇文章将带你全面了解 Jenkins Agent 的 .jnlp 文件结构及其作用。


🧾 什么是 .jnlp 文件?

.jnlp 是一个基于 XML 格式的配置文件,原生用于 Java Web Start 应用的启动定义。在 Jenkins 中,它被用于定义 Agent 的启动参数和通信设置。通过该文件,Agent 能够远程连接到 Jenkins 主服务器,并进行构建任务处理。


🔍 .jnlp 文件结构解析

以下是一个 Jenkins 生成的 .jnlp 文件示例(敏感信息已脱敏处理):

<jnlp codebase="http://<jenkins-host>:8080/computer/<agent-name>/" spec="1.0+"><information><title>Agent for <agent-name></title><vendor>Jenkins project</vendor><homepage href="https://jenkins-ci.org/"/></information><security><all-permissions/></security><resources><j2se version="1.8+"/><jar href="http://<jenkins-host>:8080/jnlpJars/remoting.jar"/></resources><application-desc main-class="hudson.remoting.jnlp.Main"><argument>[secret-key]</argument><argument><agent-name></argument><argument>-workDir</argument><argument>/Users/sqi.io/jenkins</argument><argument>-internalDir</argument><argument>remoting</argument><argument>-url</argument><argument>http://<jenkins-host>:8080/</argument></application-desc>
</jnlp>

🧱 结构详细说明

区块说明
<jnlp>指定资源加载的基础路径 (codebase) 与使用的规范版本 (spec)。
<information>提供描述信息,如标题、厂商和主页。
<security>表示该 Agent 请求“所有权限”,即 Full Permission,用于执行构建时的各种系统操作。
<resources>指定所需的 Java 版本及所依赖的远程 remoting.jar 文件。该 jar 是 Jenkins Master 和 Agent 通信的核心。
<application-desc>指定程序入口类和启动参数。Jenkins Agent 的入口为 hudson.remoting.jnlp.Main

🚀 启动参数说明

以下是 <application-desc> 内各参数的意义:

参数说明
[secret-key]认证用的 token,确保连接安全。敏感信息,切勿泄露
<agent-name>节点在 Jenkins 中的标识名,例如 mac-mini-jenkins-slave-001
-workDirAgent 的本地工作目录,用于缓存构建文件。
-internalDir用于存放 Jenkins remoting 自身运行相关的内部数据。
-urlJenkins 主服务器地址。

✅ 等效命令行启动方式

根据上面的 .jnlp 文件,你可以构造一个等效的命令行启动方式:

java -jar agent.jar \-jnlpUrl http://<jenkins-host>:8080/computer/<agent-name>/slave-agent.jnlp \-secret [secret-key] \-workDir "/Users/sqi.io/jenkins"

📌 使用 -secret 和 HTTP 方式通常更方便,也是 Jenkins UI 推荐的方式。


🛡️ 安全提示

  • .jnlp 文件中含有明文认证信息(如 secret key),切勿暴露在公网或版本控制系统中
  • 建议为每个 Agent 使用独立的 token,便于权限管理和问题追踪。
  • 使用 HTTPS 而不是 HTTP 能有效防止中间人攻击。

🧠 Last

.jnlp 文件是 Jenkins Agent 与 Master 通信的桥梁,定义了连接参数和资源路径。理解其结构不仅有助于你更好地管理 CI/CD 系统,也能在遇到连接问题时迅速定位根因。


如果你对 Jenkins Agent 启动方式还有更多疑问,比如如何通过 Docker 或 SSH 启动 Agent,也欢迎留言交流~

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

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

相关文章

定积分__

practice makes perfect 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 若被积函数在积分区间上是可积的&#xff0c;那么变限积分函数在这个区…

Three.js 系列专题 7:性能优化与最佳实践

内容概述 随着 3D 场景复杂度的增加,性能优化变得至关重要。Three.js 项目可能因几何体数量、纹理大小或渲染设置而变慢。本专题将介绍减少 draw call、优化纹理和使用调试工具的最佳实践。 学习目标 学会减少 draw call 和几何体复杂度。掌握纹理压缩与内存管理。使用 Stat…

CentOS 7安装Python3.12

文章目录 使用pyenv安装python3.12一、gitub下载pyenv二、升级GCC三.升级openssl这样python3.12.9就完成安装在CentOS上啦&#xff01; 使用pyenv安装python3.12 一、gitub下载pyenv https://github.com/pyenv/pyenv 按照README&#xff0c;pyenv教程安装即可 二、升级GCC 安…

【C++】优先级队列+反向迭代器

priority_queue的介绍 通常用堆来实现&#xff0c;能在O(log n)的时间复杂度内插入和提取最高&#xff08;或最低&#xff09;优先级的元素。 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的(默认情况)。此…

mysql镜像创建docker容器,及其可能遇到的问题

前提&#xff0c;已经弄好基本的docker服务了。 一、基本流程 1、目录准备 我自己的资料喜欢放在 /data 目录下&#xff0c;所以老规矩&#xff1a; 先进入 /data 目录&#xff1a; cd /data 创建 mysql 目录&#xff1a; mkdir mysql 2、镜像查找 docker search hub.ra…

快速记忆法,提高知识点背诵效率

战国七雄&#xff1a;齐秦 韩赵魏 燕楚 谐音记忆&#xff1a;齐秦 喊赵薇 演出 五等爵位&#xff1a;公侯 伯子 男 记忆方法&#xff1a;公猴 脖子 蓝 安卓应用&#xff1a;记忆宫殿APP 记忆 脑力训练&#xff0c;中小学各学科知识点速记&#xff0c;单词趣味记忆&#xff0c…

从零开始学java--泛型(1)

泛型 学生成绩可能是数字类型&#xff0c;也可能是字符串类型&#xff0c;如何存放可能出现的两种类型呢&#xff1a; public class Score {String name;String id;Object value; //因为Object是所有类型的父类&#xff0c;因此既可以存放Integer也能存放Stringpublic Score…

pdf转latex

Doc2X&#xff08;https://doc2x.noedgeai.com/&#xff09; Doc2X 是一个由 NoEdgeAI 提供的在线工具&#xff0c;主要用于将 PDF 文件&#xff08;尤其是学术论文、报告等文档&#xff09;转换为 LaTeX 格式。LaTeX 是一种高质量排版系统&#xff0c;广泛应用于学术界和出版…

Visual Studio 2022 UI机器学习训练模块

VS你还是太超标了&#xff0c;现在机器学习都不用写代码了吗&#xff01;&#xff01; 右键项目解决方案&#xff0c;选择机器学习模型

无公网实体服务器加装多个操作系统供多个用户互不打扰使用_part1

背景介绍 因笔者业务需求&#xff0c;入手了一个实体服务器&#xff0c;但为了避免出现在一个操作系统中搭建编程环境后有许多相关的进程和服务&#xff0c;拖慢日常的使用&#xff0c;也能让其他人短期使用&#xff0c;更好的利用服务器的性能&#xff0c;让服务器专注于“什…

运动规划实战案例 | 基于四叉树分解的路径规划(附ROS C++/Python仿真)

目录 1 为什么需要四叉树&#xff1f;2 基于四叉树的路径规划2.1 分层抽象2.2 路图搜索2.3 动态剪枝 3 算法仿真3.1 ROS C算法仿真3.2 Python算法仿真 1 为什么需要四叉树&#xff1f; 路径规划的本质是在给定环境中寻找从起点到终点的最优或可行路径&#xff0c;其核心挑战在…

docker快捷打包脚本(ai版)

直接进入主题&#xff1a; 用这个脚本前提是你本地可以拉镜像仓库的镜像&#xff0c;并且在 本地有了&#xff0c;然后将所有的镜像tag写在一个文件中&#xff0c;和下面docker_tags.txt 对应&#xff0c;文件叫什么&#xff0c;脚本里对应改什么&#xff0c;给小白说的 #!/bi…

WinMerge下载及使用教程(附安装包)

文章目录 一、WinMerge安装步骤1.WinMerge下载&#xff1a;2.解压&#xff1a;3.启动&#xff1a; 二、WinMerge使用步骤1.添加文件或文件夹2.查看差异3.格式选择 WinMerge v2.16.36 是一款免费开源的文件与文件夹比较、合并工具&#xff0c;能帮您快速找出差异&#xff0c;提高…

Jmeter性能测试之生成测试报告

结构 测试计划 测试计划是顶级的层级⽬录的结构&#xff0c; 那么在这样的⽬录结构中&#xff0c;⾥⾯可以包含很多线程组 线程组 线程组我们可以简单的理解为postman测试⼯具⾥⾯的collection&#xff0c;那么在整体线程组⾥⾯&#xff0c;可以添加很多的测试 ⽤例 简单控…

CSS中的inline-flex与flex的区别

在CSS中&#xff0c;flex 和 inline-flex 都是用于实现弹性布局&#xff08;Flexbox&#xff09;的显示属性&#xff0c;但它们在布局行为上有所不同。 flex 属性会使元素表现为块级弹性容器&#xff0c;这意味着元素会在页面上占据一整行的空间&#xff0c;无论其内部内容的大…

Linux的那些基础常用命令汇总

目录 前言&#xff1a; 用户命令&#xff1a; 管理后台作业命令&#xff1a; 文件目录操作命令&#xff1a; 运维高频使用命令&#xff1a; 磁盘管理以及文件系统命令: 用户、组操作命令&#xff1a; 权限控制命令&#xff1a; 网络配置命令&#xff1a; 软件管理命令…

高效深度学习lecture03

lecture_03 **剪枝&#xff1a;**pruning basically turns a dense neural network into a sparse neural network. you can remove those redundant synapses, and also you can remove those redundant neurons. 剪枝的本质上是将稠密的神经网络转变成稀疏的神经网络&#…

Nextjs15 实战 - React Notes 项目初始化

current branch 对应如下文档 redis ioredis 本专栏内容均可在Github&#xff1a;notes_01 找到 一、效果 完整项目使用技术栈&#xff1a; Nextjs15 MySQL Redis Auth Prisma i18n strapi Docker vercel 二、修改根布局和其他页面 修改 app/page.tsx&#xff1a…

Flutter PopupMenuButton 深度解析:从入门到架构级实战

在移动应用交互设计中&#xff0c;上下文菜单如同隐形的魔法师&#xff0c;在有限屏幕空间中优雅地扩展操作维度。作为Flutter框架中的核心交互组件&#xff0c;PopupMenuButton绝非简单的菜单触发器&#xff0c;其背后蕴含着Material Design的交互哲学、声明式UI的架构智慧以及…

C++——清明

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <ctime>using namespace std;class Weapon; // 前置声明class Hero{ pr…