Jenkins 相关的教程,我已经出了两期了。
第一章,我讲到了通过 docker 快速部署 Jenkins 以及安装 Jenkins 的必要插件。
第二章,我讲到了通过 sshPublisher 去目标服务器上发布项目。
今天,我来讲讲如何通过代理节点去目标服务器上发布项目。其实这里实现的效果和第二章中实现的效果是一样的,都是去目标服务器上执行发布项目的脚本,进行项目的编译和发布。
个人觉得,二选一,掌握一种方式就好了。
下面,我默认你已经看过了上面我写的两篇文章,因此,一些相同的部分,我就不再赘述。
添加节点
- 来到系统管理页面,点击「节点和云管理」

默认已经有了一个节点,我们点击「New Node」添加新的节点

- 填写节点名称

- 填写节点的详细信息

是不是看到这里的 Credentials 有一种莫名的亲切感?是的,这就是在第二章节中,在凭据管理页面死活找不到的添加凭据的地方。

添加新的凭据

这里需要添加的是目标服务器上,用于 ssh 登录的用户 jenkinsjob 的账号和密码

选择刚刚新添加的凭据

填写完了之后就直接点击保存。
查看节点
回到节点列表,我们可以看到刚刚我们添加的节点已经添加成功了。

我们点击刚刚新添加的节点,进入节点详情,然后点击右上角的「上线节点」,看节点是否能够上线成功

上线节点
一般情况下而言,可能多半就会报如下类似的错误:
bash: line 1: java: command not found
Agent JVM has terminated. Exit code=127原因是:Jenkins Agent 必须要能运行 Java,但你的服务器上没有 java 命令。
当 Jenkins 通过 SSH 连接 Agent 时,它会自动执行:
java -jar remoting.jar也就是让 Agent 使用 Java 运行 Jenkins 的 remoting 进程。如果服务器上没有 Java,Agent 永远无法上线。
那么,如何解决这个问题呢?
直接在目标服务器上安装 java 环境就好了。
这里假设目标服务器为 ubuntu 系统:
安装 java 环境
sudo apt update
sudo apt install -y openjdk-17-jdk验证安装
java -version
# 类似以下输出即可
#openjdk version "17.0.16" 2025-07-15
#OpenJDK Runtime Environment (build 17.0.16+8-Ubuntu-0ubuntu124.04.1)
#OpenJDK 64-Bit Server VM (build 17.0.16+8-Ubuntu-0ubuntu124.04.1, mixed mode, sharing)
javac -version
# 类似以下输出即可
#javac 17.0.16然后我们重新上线节点,可以发现节点能够正常上线了。
并且我们在目标服务器上通过 jenkinsjob 账号登录之后,我们可以看到当时设置的远程目录下会存在

编写 jenkinsfile
这里还是老规矩,直接贴上我写好的 jenkinsfile 文件内容供各位看官老爷们参考
#!/usr/bin/env groovy Jenkinsfile
pipeline {
agent { label 'node_ssh_jenkinsjob' }
options {
ansiColor('xterm')
}
parameters {
booleanParam(
name: 'Select_demo_project',
description: '可以自己填写一下备注,需要注意 name 字段中,最好不要出现横杠 -'
)
gitParameter(
name: 'Git_Branch_demo_project',
branch: '',
branchFilter: 'demo_project/(.*)',
defaultValue: 'master',
quickFilterEnabled: true,
selectedValue: 'NONE',
sortMode: 'NONE',
tagFilter: '*',
type: 'PT_BRANCH_TAG',
useRepository: 'demo-project',
description: '需要注意 gitParameter.name 字段中,最好不要出现横杠 -'
)
}
stages {
stage('Step1:初始化,确认参数') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
extensions: [],
userRemoteConfigs: [[
credentialsId: '86b1ba1c-db25-47b2-b50e-e58516641574',
name: 'demo-project',
url: 'http://127.0.0.1:8099/demo/demo-project.git'
]]
])
}
}
}
stage('Step2:发布服务') {
steps {
script {
if (Select_demo_project == 'true') {
echo "----------------构建参数--------------------"
echo "git分支:${Git_Branch_demo_project} ---> Select_demo_project:${Select_demo_project}"
sh 'cd /home/jenkinsjob/deploy_sample && sudo ./deploy.sh'
}
}
}
}
}
}我们可以观察一下,第三章中的 jenkinsfile 和第二章中的 jenkinsfile 的差异性
差别最大的莫过于两点。
第一点
agent 发生了改变,这里由 agent any 改成了 agent { label 'node_ssh_jenkinsjob' }
需要注意的是,label 后面填写的是上面添加的节点的名称。
第二点
执行脚本的时候,这里直接在 sh '……………………' 中间就写了命令。相对来说简化了不少。
我们已经写好了 jenkinsfile 那么,添加任务流就和第二章节中是一样的了。赶紧来试试看吧。

并且当我们执行工作流时,我们发现这个位置确实就是在我们设置的节点上运行的。

总结
如果采用第二章中 sshPublisher 的方式去访问目标服务器,那么就一定得安装 Publish Over SSH 插件。并且在 Jenkins 上写执行命令时会稍微复杂一点点。
如果采用本章中添加代理节点的方式去访问目标服务器,那么在目标服务器上就必须得安装 Java 运行环境。
两种方式都可以实现访问目标服务器,并直接在目标服务器上执行部署项目的脚本命令。
其他
Q:我们怎么可以查看到一个工作流的 jenkinsfile 内容呢?
A:可以直接在 /var/jenkins_home/jobs 目录下找到对应的工作名称,然后查看 config.xml 文件
Q:如何查看到代理节点数据?
A:直接查看 /var/jenkins_home/nodes 目录
好了,以上就是 Jenkins 教程中的全部内容了。这 3 篇教程中,完全不会讲解枯燥无味的概念性东西,所有的内容都是可以直接上手去用的。希望对你有所帮助。
创作不易,希望可以帮忙点赞并关注支持一下,谢谢。

