跳到主要内容

Jenkins Agent 节点管理

12.1 Agent 介绍​

Jenkins 架构中通常把节点分为:

节点说明
ControllerJenkins 主节点,负责 Web、调度、配置、插件、任务编排
Agent构建节点,负责执行具体构建任务

生产环境建议:

  • Controller 尽量不执行业务构建。
  • 构建任务放到 Agent。
  • 不同技术栈使用不同 Agent。
  • 生产部署 Agent 和普通构建 Agent 分开。
  • 使用标签控制任务调度。

12.2 Agent 类型​

常见 Agent 类型:

类型说明适用场景
SSH AgentJenkins 通过 SSH 启动 Agent固定 Linux 构建机
Inbound AgentAgent 主动连接 JenkinsNAT、内网隔离场景
Docker Agent使用 Docker 容器作为构建环境本机 Docker 构建
Kubernetes Agent每次构建动态创建 Pod云原生、弹性构建
Windows AgentWindows 构建、打包.NET、桌面应用

12.3 SSH Agent 配置​

12.3.1 Agent 主机准备​

在 Agent 主机创建 Jenkins 用户:

useradd -m -s /bin/bash jenkins
passwd jenkins

安装 Java:

# Ubuntu / Debian
apt update
apt install -y openjdk-21-jre git

# RHEL / Rocky / AlmaLinux
dnf install -y java-21-openjdk git

创建工作目录:

mkdir -p /data/jenkins-agent
chown -R jenkins:jenkins /data/jenkins-agent

12.3.2 SSH Key 凭据​

在 Jenkins Controller 上生成专用 SSH Key:

ssh-keygen -t ed25519 -f jenkins-agent-ed25519 -C "jenkins-agent"

把公钥加入 Agent:

mkdir -p /home/jenkins/.ssh
cat jenkins-agent-ed25519.pub >> /home/jenkins/.ssh/authorized_keys
chown -R jenkins:jenkins /home/jenkins/.ssh
chmod 700 /home/jenkins/.ssh
chmod 600 /home/jenkins/.ssh/authorized_keys

Jenkins 凭据:

Type: SSH Username with private key
ID: jenkins-agent-ssh-key
Username: jenkins
Private Key: jenkins-agent-ed25519

12.3.3 Jenkins 添加节点​

入口:

Manage Jenkins -> Nodes -> New Node

配置项:

配置项示例
Node namebuilder-01
TypePermanent Agent
Remote root directory/data/jenkins-agent
Labelslinux docker maven
UsageOnly build jobs with label expressions matching this node
Launch methodLaunch agents via SSH
Host10.0.0.11
Credentialsjenkins-agent-ssh-key
Host Key Verification Strategy建议使用 known_hosts

12.4 标签设计​

标签用于控制任务调度。

常见标签:

标签说明
linuxLinux Agent
windowsWindows Agent
docker可执行 Docker 构建
maven已安装 Maven
nodejs已安装 Node.js
kubectl已安装 kubectl
prod-deploy生产发布节点

Jenkinsfile 示例:

pipeline {
agent {
label 'linux && docker'
}

stages {
stage('Build') {
steps {
sh 'docker version'
}
}
}
}

建议:

  • 标签表达真实能力,不要随意复用。
  • 生产发布节点使用独立标签。
  • 不要让普通构建 Job 调度到生产发布节点。

12.5 执行器数量​

执行器数量决定同一节点可以并发执行多少构建。

建议:

Agent 类型建议执行器
普通构建机CPU 核数或略低
Docker 构建机根据磁盘 IO 和内存控制,通常 1-4
生产发布节点通常 1
Controller生产建议 0

Controller 设置执行器:

Manage Jenkins -> Nodes -> Built-In Node -> Configure -> Number of executors

生产建议:

Number of executors: 0

12.6 Agent 工具环境​

Agent 常见工具:

  • JDK。
  • Maven / Gradle。
  • Node.js / pnpm / yarn。
  • Docker CLI。
  • kubectl / helm。
  • Git。
  • Trivy / Sonar Scanner。

检查脚本:

java -version
git --version
mvn -v
node -v
docker version
kubectl version --client
helm version

建议:

  • 固定 Agent 用配置管理工具维护环境。
  • 动态 Agent 用镜像固化工具版本。
  • Jenkins tools 适合简单工具安装,但容器化 Agent 更推荐镜像内置工具。

12.7 工作目录与清理​

Agent 工作目录会保存 workspace、临时文件和构建缓存。

常见路径:

/data/jenkins-agent/workspace
/home/jenkins/agent/workspace

清理方式:

post {
always {
cleanWs()
}
}

节点磁盘巡检:

df -h
du -sh /data/jenkins-agent/workspace/*
docker system df

建议:

  • Job 内使用 cleanWs() 清理工作区。
  • Docker 构建节点定时清理旧镜像和缓存。
  • 大制品上传制品库,不长期保存在 workspace。

12.8 Inbound Agent​

Inbound Agent 适合 Agent 主动连接 Jenkins 的场景,例如 Agent 在 NAT 后面。

Jenkins 添加节点时选择:

Launch method -> Launch agent by connecting it to the controller

Agent 启动命令通常类似:

java -jar agent.jar \
-url https://jenkins.example.com/ \
-secret <secret> \
-name builder-01 \
-webSocket \
-workDir /data/jenkins-agent

建议:

  • 优先使用 WebSocket,减少对固定 JNLP 端口的依赖。
  • Agent secret 不要泄露。
  • 使用 systemd 托管 Agent 进程。

systemd 示例:

/etc/systemd/system/jenkins-agent.service
[Unit]
Description=Jenkins Inbound Agent
After=network.target

[Service]
User=jenkins
WorkingDirectory=/data/jenkins-agent
ExecStart=/usr/bin/java -jar /data/jenkins-agent/agent.jar -url https://jenkins.example.com/ -secret CHANGE_ME -name builder-01 -webSocket -workDir /data/jenkins-agent
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

启动:

systemctl daemon-reload
systemctl enable --now jenkins-agent

12.9 节点隔离建议​

按用途隔离:

节点组用途
ci-build普通编译测试
docker-build镜像构建
k8s-deploy-test测试环境部署
k8s-deploy-prod生产部署
security-scan安全扫描

按风险隔离:

  • 不可信 MR 构建使用低权限 Agent。
  • 生产部署使用独立 Agent 和独立凭据。
  • Docker socket 节点不要运行不可信代码。
  • 多租户 Jenkins 要隔离 workspace、凭据和节点。

12.10 常见问题​

12.10.1 Agent 离线​

排查:

systemctl status sshd
java -version
df -h
free -m

检查 Jenkins 节点日志:

Node -> Log

常见原因:

  • SSH 无法连接。
  • Java 版本不兼容。
  • 工作目录权限错误。
  • Agent 主机磁盘满。
  • Controller 到 Agent 网络不通。

12.10.2 Host key verification failed​

处理方式:

  • 在 Jenkins Controller 用户的 known_hosts 中加入 Agent 主机指纹。
  • 或在节点配置中选择合适的 Host Key Verification Strategy。

建议生产环境不要直接跳过主机校验。

12.10.3 构建一直排队​

排查方向:

  • Job 的 agent label 是否存在可用节点。
  • 节点是否在线。
  • 节点执行器是否已满。
  • Job 是否设置了禁止并发。
  • 队列中是否有更早的任务占用资源。

12.10.4 Docker 权限错误​

排查:

id jenkins
ls -l /var/run/docker.sock
docker version

常见处理:

usermod -aG docker jenkins
systemctl restart docker

注意用户组变更后,需要重新登录或重启 Agent 进程。

12.11 参考资料​