Jenkins 节点管理
Jenkins 的分布式架构允许您使用多台机器分担构建任务,提高构建效率。本章介绍节点的概念、配置和管理。
节点概述
架构说明
┌─────────────────────────────────────────────────────────────────┐
│ Jenkins Controller │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 调度器 (Scheduler) │ │
│ │ • 接收构建请求 │ │
│ │ • 选择合适的节点 │ │
│ │ • 分配 Executor │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓ ↓
┌───────────────┐ ┌───────────────┐
│ Linux Node │ │ Windows Node │
│ Executor: 4 │ │ Executor: 2 │
│ Label: docker │ │ Label: .net │
└───────────────┘ └───────────────┘
↓
┌───────────────┐
│ macOS Node │
│ Executor: 2 │
│ Label: ios │
└───────────────┘
核心概念
| 概念 |
说明 |
| Controller |
主节点,负责管理配置、调度任务 |
| Agent/Node |
代理节点,实际执行构建任务 |
| Executor |
执行槽位,节点上可并行执行的任务数 |
| Label |
标签,用于标记节点能力 |
| Workspace |
工作目录,每个构建分配的工作空间 |
内置节点配置
通过 Web 界面配置
- 进入 「系统管理」→「节点管理」
- 点击 「新建节点」
- 配置节点参数
节点配置参数
| 参数 |
说明 |
示例 |
| 节点名称 |
节点唯一标识符 |
linux-builder-01 |
| 描述 |
节点说明 |
Linux 构建服务器 |
| 执行器数量 |
并行构建数 |
4 |
| 远程工作目录 |
工作空间根目录 |
/home/jenkins/workspace |
| 标签 |
节点标签(空格分隔) |
linux docker maven |
| 用法 |
节点使用策略 |
尽可能使用 |
| 启动方式 |
节点连接方式 |
通过 Java Web Start 启动 |
| 可用性 |
节点可用策略 |
保持在线 |
通过 SSH 连接节点
1. 配置 SSH 节点
系统管理 → 节点管理 → 新建节点 → 永久节点
| 配置项 |
值 |
| 节点名称 |
linux-ssh-01 |
| 执行器数量 |
4 |
| 远程工作目录 |
/opt/jenkins/agents/${ITEM_FULLNAME} |
| 标签 |
linux docker |
| 启动方式 |
Launch agent by connecting it to the master |
| Host Key Verification Strategy |
Manually trusted key Verification Strategy |
2. 配置凭据
| 凭据类型 |
配置 |
| 类型 |
SSH Username with private key |
| Username |
jenkins |
| Private Key |
From the jenkins master ~/.ssh |
3. Linux/Mac 节点设置
# 1. 创建 jenkins 用户
sudo useradd -m -s /bin/bash jenkins
sudo passwd jenkins
# 2. 配置 sudo 权限(可选)
sudo visudo
# 添加: jenkins ALL=(ALL) NOPASSWD: ALL
# 3. 配置 SSH
sudo su - jenkins
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 4. 生成 SSH 密钥对
ssh-keygen -t ed25519 -C "jenkins@controller"
# 5. 授权公钥
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 6. 安装必要工具
sudo apt install -y openjdk-11-jdk docker.io maven git
# 或
sudo yum install -y java-11-openjdk docker maven git
4. Windows SSH 节点设置
使用 OpenSSH 或 Bitvise SSH Server:
# 使用 Chocolatey 安装 OpenSSH
choco install openssh -y
# 配置服务
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Kubernetes 动态节点
安装 Kubernetes 插件
- 进入 「系统管理」→「插件管理」
- 搜索并安装 Kubernetes 插件
配置云端
系统管理 → 系统配置 → 云计算 → 添加新的云 → Kubernetes
| 配置项 |
值 |
| 名称 |
kubernetes |
| Kubernetes 地址 |
https://kubernetes.default.svc |
| 命名空间 |
default |
| 凭据 |
Kubeconfig |
| Jenkins 地址 |
http://jenkins:8080 |
| Jenkins 通道 |
jenkins:50000 |
Jenkins Agent 模板配置
# Pod 模板配置
---
name: jenkins-agent
namespace: jenkins
label: jenkins-agent
containers:
- name: jnlp
image: jenkins/inbound-agent:latest-jdk11
imagePullPolicy: IfNotPresent
workingDir: /home/jenkins/agent
ttyEnabled: true
resourceRequestCpu: 500m
resourceLimitCpu: 1000m
resourceRequestMemory: 512Mi
resourceLimitMemory: 1Gi
envVars:
- envVar:
key: JENKINS_URL
value: http://jenkins:8080
- name: maven
image: maven:3.8-openjdk-11
command: sleep
args: infinity
resourceRequestCpu: 1000m
resourceLimitCpu: 2000m
resourceRequestMemory: 1Gi
resourceLimitMemory: 2Gi
- name: docker
image: docker:20.10-dind
securityContext:
privileged: true
volumeMounts:
- name: docker-graph-storage
mountPath: /var/lib/docker
volumes:
- name: docker-graph-storage
emptyDir: {}
yamlMergeStrategy:
override
Kubernetes Pipeline 示例
pipeline {
agent {
kubernetes {
label 'java-build'
defaultContainer 'jnlp'
yaml '''
apiVersion: v1
kind: Pod
metadata:
name: jenkins-agent
spec:
containers:
- name: jnlp
image: jenkins/inbound-agent:latest-jdk11
- name: maven
image: maven:3.8-openjdk-11
command: sleep
args: infinity
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1000m"
restartPolicy: Never
'''
}
}
stages {
stage('Build') {
steps {
container('maven') {
sh 'mvn clean package'
}
}
}
}
}
Docker 动态节点
安装 Docker 插件
系统管理 → 插件管理 → 搜索 "Docker"
配置 Docker Cloud
系统管理 → 系统配置 → 云计算 → 添加新的云 → Docker
| 配置项 |
值 |
| 名称 |
docker-cloud |
| Docker Agent URL |
tcp://docker:2375 |
| Enabled |
✅ |
容器模板
| 配置项 |
值 |
| 镜像 |
jenkins/inbound-agent:latest |
| 拉取策略 |
Pull if not exist |
| 标签 |
docker |
| 运行方式 |
Container JumpStart |
节点使用策略
节点配置选项
// Pipeline 中指定节点
pipeline {
agent {
node {
label 'docker && linux'
customWorkspace '/opt/jenkins/custom-workspace'
}
}
}
// 仅在标签节点执行
agent { label 'windows' }
// 任意可用节点
agent any
节点选择策略
| 策略 |
说明 |
| 尽可能使用 |
优先分配到负载较低的节点 |
| 只在指定标签运行 |
只在匹配标签的节点运行 |
| 从不分配 |
用于特殊目的节点 |
节点组管理
按标签分组
# Web 界面配置
标签: "docker,linux,maven,ubuntu-20.04"
// Pipeline 使用标签组
agent { label 'docker' }
agent { label 'linux && maven' }
agent { label 'docker || windows' }
节点池示例
| 标签 |
用途 |
节点 |
build |
通用构建 |
node-1, node-2 |
docker |
Docker 构建 |
node-1, node-3 |
windows |
Windows 构建 |
win-node-1 |
macos |
macOS/iOS 构建 |
mac-mini |
k8s |
Kubernetes Pod |
- |
节点监控
查看节点状态
可查看:
- CPU/内存使用率
- 磁盘空间
- 执行器状态
- 构建历史
监控指标
| 指标 |
说明 |
告警阈值 |
| CPU 使用率 |
处理器占用 |
> 80% |
| 内存使用率 |
内存占用 |
> 85% |
| 磁盘空间 |
可用空间 |
< 10GB |
| Executor 占用 |
并行槽位使用 |
> 90% |
常见问题
1. 节点连接失败
# 检查 SSH 连接
ssh -v jenkins@agent-host
# 检查 Java 安装
java -version
# 检查端口连通性
telnet jenkins-host 50000
2. 磁盘空间不足
// Pipeline 中清理
post {
always {
cleanWs()
sh 'docker system prune -af'
}
}
3. 节点突然离线
检查网络、防火墙、资源耗尽等问题。
下一步
接下来让我们学习如何配置 Jenkins 安全设置。
👉 安全配置
💡 提示:生产环境建议使用 Kubernetes 或 Docker 动态节点,实现按需创建和销毁。