Jenkins 配置管理
Jenkins 的配置散落在插件、全局工具、系统设置和 Job 中。用代码管理这些配置,才能保证环境可复现、可迁移。
本篇目标:会安装与升级插件、配置 JDK/Maven/Node 等全局工具、调整系统级参数,并接入国内镜像源。
1. 插件管理
1.1 插件生命周期
| 操作 | 路径 | 说明 |
|---|---|---|
| 安装插件 | Manage Jenkins → Plugins → Available | 搜索后勾选安装,可勾选"安装后重启" |
| 更新插件 | Manage Jenkins → Plugins → Updates | 有可用更新时提示,谨慎批量更新 |
| 卸载插件 | Manage Jenkins → Plugins → Installed | 卸载后建议重启清理 |
更新插件的风险
一次全量更新可能破坏现有 Job 或引入不兼容。推荐策略:先备份 $JENKINS_HOME,在测试实例验证,再逐步更新(每周一次,重启观察日志)。
1.2 国内镜像源
插件更新中心在国内访问慢是常见问题。将 Update Center 指向清华镜像:
Manage Jenkins → Plugins → Advanced settings
Update Site URL: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
也可以用 plugins.txt 声明插件列表(Docker 镜像自定义构建时用):
# plugins.txt 示例
pipeline
kubernetes
docker-workflow
gitlab
credentials-binding
timestamper
blueocean
2. 全局工具(Global Tools)
JDK、Maven、Node 等工具在 Manage Jenkins → Tools 中配置,供流水线通过工具名引用。
2.1 配置方式对比
| 方式 | 适用 | 特点 |
|---|---|---|
| 自动安装(官网下载) | 简单、工具版本固定 | 每次 Agent 首次使用时下载,慢且依赖外网 |
| 解压目录 / 本机路径 | 已有安装包 | 路径需 Agent 上也存在 |
| 自定义安装(shell 脚本) | 内网环境 | 灵活,可走内部源 |
// 流水线中通过工具名引用
pipeline {
agent any
tools {
maven 'Maven-3.9'
jdk 'JDK-17'
}
stages {
stage('Build') {
steps {
sh 'mvn -version && java -version'
}
}
}
}
工具名 vs 版本
给工具起稳定的逻辑名(如 JDK-17),不要在流水线里写死路径。换版本时只改 Tools 配置,流水线不用动。
2.2 内网环境的工具安装
生产环境往往无法访问官网下载工具。自定义安装 + 内部源:
// 自定义安装:从内网镜像下载并解压
sh '''
cd $WORKSPACE
curl -sO http://mirror.internal/tools/maven-3.9.tar.gz
tar xzf maven-3.9.tar.gz
'''
3. 系统配置要点(Manage Jenkins → System)
| 配置项 | 建议值 / 说明 |
|---|---|
| Jenkins URL | 设置成用户真实访问地址(含 HTTPS) |
| Executors 数量(内置节点) | 设为 0,构建全走 Agent |
| 全局属性 | 集中定义环境变量,如 IMAGE_REGISTRY、ENV |
| 时区 | Asia/Shanghai,否则构建日志时间错乱 |
| 日志保留 | 控制台输出与构建记录保留策略,防磁盘暴涨 |
| 并发构建 | 无资源限制时可勾选"并发生成(并发执行)"按需 |
4. 用代码管理配置
生产环境应尽量减少手工在 UI 的配置。几种代码化手段:
| 手段 | 作用 | 适用 |
|---|---|---|
| Jenkins as Code(JCasC) | 用 YAML 声明系统配置、安全、Agent | 平台级配置基线 |
plugins.txt | 声明插件清单 | Docker 镜像构建 |
| Groovy Init 脚本 | 启动时执行配置脚本 | 复杂初始化 |
| 共享库(第 8 篇) | 复用流水线逻辑 | 应用层流水线 |
4.1 JCasC 示例
# jenkins.yaml(需要 configuration-as-code 插件)
jenkins:
systemMessage: "Managed by Jenkins as Code"
numExecutors: 0 # 内置节点不跑构建
globalNodeProperties:
- envVars:
env:
- key: "IMAGE_REGISTRY"
value: "registry.company.com"
views:
- global: {}
security:
globalMatrixAuthorizationStrategy:
permissions:
- "Overall/Administer:admin"
- "Overall/Read:viewer"
- "Job/Read:viewer"
tool:
jdk:
installations:
- name: "JDK-17"
home: "/usr/lib/jvm/java-17"
maven:
installations:
- name: "Maven-3.9"
home: "/opt/maven/apache-maven-3.9"
# 启动时挂载,Jenkins 加载该配置
docker run -v /path/jenkins.yaml:/var/jenkins_home/casc_configs/jenkins.yaml ...
JCasC 是基线,不是全部
JCasC 适合"系统配置"这种静态基线;Job 本身建议用流水线定义在代码仓库里(Pipeline as Code),两者职责不同,不要混。
5. 练习与验收
练习 A
- 配置国内插件镜像源,安装
Blue Ocean插件 - 在 Tools 中配置 JDK/Maven,用
tools {}在流水线中引用 - 在 System 中设置时区和
IMAGE_REGISTRY全局变量,在流水线中echo env.IMAGE_REGISTRY
练习 B
- 编写一份 JCasC YAML,包含"内置节点 0 执行器"和两个环境变量,重启验证生效
- 用
plugins.txt构建一个自定义 Jenkins 镜像(可选)
验收清单
- 会安装、更新、卸载插件,知道更新前先备份验证
- 能配置国内镜像源解决插件下载慢
- 会在 Tools 中配置工具并通过逻辑名在流水线引用
- 了解 JCasC、plugins.txt 等配置代码化手段
- 会调整系统级参数(URL、时区、日志保留)
下一篇:用户与权限管理。