云原生 DevOps 工具链从入门到实战(第二期)------Jenkins安装与基础配置------CI/CD核心引擎
更多云原生DevOps技能学习请戳这里:云原生 DevOps 工具链从入门到实战
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
📖 引言:给 DevOps 装上"发动机"
第一期我们完成了 GitLab 的部署,代码有了"家"。但代码仓库只是起点------开发者把代码推上去了,然后呢?谁来负责自动编译、自动测试、自动打包?谁来把构建好的程序部署到服务器上?
这些重复性的"体力活",如果全部靠人工完成,效率低、易出错、难追溯。我们需要一个自动化引擎------它能在代码提交的瞬间自动拉起构建流程,像生产线一样把"代码原材料"加工成"可运行的软件"。
这就是 Jenkins 的使命。
💡 白话理解:如果说 GitLab 是"原料仓库",那么 Jenkins 就是"自动化工厂"------你把代码提交到仓库,Jenkins 自动完成编译、测试、打包、部署,全程无需人工干预。
Jenkins 是目前 DevOps 工具链中使用最广泛的 CI/CD 自动化服务器。本期我们将完成 Jenkins 的安装、配置和初步验证,让这个"工厂"先运转起来。
--- Compiled and Authored by Whisky --- July 26 th, 2026
📑 本期目录
- Jenkins 概述
- 环境准备与前置依赖
- Docker 部署 Jenkins
- Jenkins 初始化配置
- 插件管理
- 全局工具配置(JDK / Maven)
- 构建任务入门
- 总结与知识点一览表
正文
一、Jenkins 概述
1.1 什么是 Jenkins
Jenkins 是一个开源的、基于 Java 的持续集成和持续交付(CI/CD)自动化服务器。它被广泛应用于软件开发流程中,用于自动化构建、测试和部署代码,从而提高开发效率、软件质量和发布速度。
💡 白话理解:Jenkins 就像一个"自动化的流水线工人"------你告诉它"当代码仓库有变化时,执行一系列任务(编译、测试、打包、部署)",它就会不折不扣地完成任务,还会把结果告诉你。
1.2 Jenkins 的核心能力
| 能力 | 说明 | 典型场景 |
|---|---|---|
| 持续集成 | 代码提交后自动触发构建和测试 | 每次 Push 后自动运行单元测试 |
| 持续交付 | 自动化部署到测试/预发布环境 | 每日构建自动部署到测试环境 |
| 持续部署 | 通过质量门禁后自动发布到生产 | 通过全部测试后自动上线 |
| 插件扩展 | 1800+ 插件支持各种工具集成 | Git/Maven/Docker/K8s/SonarQube |
| 分布式构建 | 多 Agent 并行执行任务 | 加速大规模构建 |
| 定时任务 | 按计划执行构建或任务 | 每日凌晨自动构建 |
1.3 Jenkins 的核心组件
text
┌─────────────────────────────────────────────────────────┐
│ Jenkins 架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Jenkins │────▶│ Web UI │ 用户交互界面 │
│ │ Master │ │ (8080) │ │
│ │ (主节点) │ └─────────────┘ │
│ │ │ │
│ │ 调度/管理 │ ┌─────────────┐ │
│ │ 分配任务 │────▶│ 插件系统 │ 1800+ 插件 │
│ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Agent │ 执行构建任务的计算节点 │
│ │ (执行器) │ (本期不涉及,后续扩展) │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
| 组件 | 说明 | 本期状态 |
|---|---|---|
| Master(主节点) | 提供 Web UI,管理配置,调度构建作业 | ✅ 本期部署 |
| Agent(执行器) | 实际执行构建任务的计算资源 | 后续章节 |
| Plugin(插件) | 扩展 Jenkins 功能的模块 | ✅ 本期配置 |
| Job/Pipeline | 定义了构建任务的具体内容和步骤 | ✅ 本期入门 |
二、环境准备与前置依赖
2.1 服务器环境
在开始部署 Jenkins 之前,需要确保服务器满足以下条件:
| 检查项 | 要求 | 验证命令 |
|---|---|---|
| 操作系统 | CentOS 7.x / Ubuntu 20.04 | cat /etc/redhat-release |
| 内存 | 建议 ≥ 4GB | free -h |
| 磁盘 | 建议 ≥ 20GB | df -h |
| Docker | 已安装并运行 | docker --version |
| 网络 | 可访问外网(拉取镜像) | ping google.com |
⚠️ 注意:Jenkins 是 Java 应用,对内存有一定要求。生产环境建议至少 4GB 内存,测试环境 2GB 勉强可用。
2.2 关闭防火墙和 SELinux
bash
# 关闭防火墙
systemctl disable firewalld.service --now
# 临时关闭 SELinux
setenforce 0
# 永久关闭 SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.3 Maven 部署
Jenkins 构建 Java 项目需要 Maven,我们先在宿主机上准备好 Maven。
bash
# 解压 JDK 和 Maven(已有压缩包)
tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
tar zxvf apache-maven-3.6.2-bin.tar.gz -C /usr/local/
# 重命名
cd /usr/local/
mv apache-maven-3.6.2/ maven
mv jdk1.8.0_171/ jdk
配置 Maven 阿里云镜像仓库:
bash
vim /usr/local/maven/conf/settings.xml
找到 <mirrors> 标签(约 159 行),在注释符号 <!-- --> 外面添加:
xml
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
配置 Maven 支持 JDK 1.8:
找到 <profiles> 标签(约 253 行),添加:
xml
<profile>
<id>jdk8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerversion>1.8</maven.compiler.compilerversion>
</properties>
</profile>
找到 <activeProfiles> 标签(约 275 行),添加:
xml
<activeProfiles>
<activeProfile>jdk8</activeProfile>
</activeProfiles>
2.4 Docker 部署
Jenkins 本身以容器方式运行,但需要宿主机 Docker 环境支持容器内构建镜像。
安装 Docker:
bash
# 卸载旧版本
sudo yum remove docker docker-common docker-selinux docker-engine
# 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置华为云镜像源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 安装 Docker
sudo yum makecache fast
sudo yum install docker-ce -y
# 设置开机自启
systemctl enable docker --now
配置镜像加速:
bash
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
# 重启 Docker
systemctl daemon-reload
systemctl restart docker
2.5 docker-compose 工具安装
bash
# 下载 docker-compose(替换为实际版本)
curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version
三、Docker 部署 Jenkins
3.1 拉取 Jenkins 镜像
我们选择一个稳定且适配 JDK 8 的版本:
bash
docker pull jenkins/jenkins:2.346.3-lts-jdk8
💡 版本选择建议 :
2.346.3-lts-jdk8是长期支持版(LTS),基于 JDK 8,与我们的 Java 项目兼容性好。如果需要 JDK 11/17,可选用更新的版本。
3.2 创建资源目录
bash
# 创建 Jenkins 数据目录
mkdir -p /usr/local/docker/jenkins_docker
# 进入目录
cd /usr/local/docker/jenkins_docker
3.3 编写 docker-compose.yml
yaml
version: "3.1"
services:
jenkins:
image: jenkins/jenkins:2.346.3-lts-jdk8
container_name: jenkins
ports:
- 8080:8080 # Jenkins Web 端口
- 50000:50000 # Agent 通信端口
volumes:
- ./data/:/var/jenkins_home/ # 持久化 Jenkins 数据
3.4 启动 Jenkins
bash
# 启动
docker-compose up -d
# 查看日志(获取初始密码)
docker logs -f jenkins
预期输出:
text
2025-06-26 07:52:55.564+0000 [id=27] INFO jenkins.install.SetupWizard#init:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ← 这是初始密码(32位字符串)
*************************************************************
*************************************************************
*************************************************************
查看容器状态:
bash
docker ps -a | grep jenkins
预期输出:
text
CONTAINER ID IMAGE STATUS PORTS
0eb81fc79a4a jenkins/jenkins:2.346.3-lts-jdk8 Up 2 minutes 0.0.0.0:8080->8080/tcp
3.5 解决常见启动问题
问题 1:权限被拒绝(Permission denied)
text
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
解决方法:给 data 目录赋予写权限
bash
chmod 777 /usr/local/docker/jenkins_docker/data/
docker-compose restart
问题 2:其他主机无法访问 Jenkins
原因:服务器未开启 IP 转发
解决方法:
bash
vim /etc/sysctl.conf
# 在末尾添加
net.ipv4.ip_forward = 1
sysctl -p
四、Jenkins 初始化配置
4.1 访问 Jenkins Web 页面
在浏览器中输入:http://<服务器IP>:8080
text
┌──────────────────────────────────────────────┐
│ Jenkins │
│ │
│ Unlock Jenkins │
│ │
│ To ensure Jenkins is securely set up by │
│ the administrator, a password has been │
│ generated and written to the log. │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Administrator password │ │
│ │ [________________________________] │ │
│ └─────────────────────────────────────┘ │
│ │
│ [ Continue ] │
└──────────────────────────────────────────────┘
4.2 解锁 Jenkins
将 docker logs -f jenkins 中显示的初始密码(32位字符串)粘贴到输入框中,点击 Continue。
4.3 自定义 Jenkins 插件安装
Jenkins 提供两种插件安装方式:
| 方式 | 说明 | 推荐场景 |
|---|---|---|
| 安装推荐插件 | 自动安装常用插件集 | 初学者、快速体验 |
| 选择插件安装 | 手动挑选需要的插件 | 生产环境、定制化需求 |
本期我们选择"选择插件安装",只安装后续实战需要的核心插件:
| 插件名称 | 用途 |
|---|---|
| Git | 从 Git 仓库拉取代码 |
| Git Parameter | 支持在构建时选择 Git 分支/Tag |
| Publish Over SSH | 将构建产物通过 SSH 发送到目标服务器 |
| SonarQube Scanner | 代码质量扫描(后续章节使用) |
| Blue Ocean | 现代化的 Pipeline 可视化界面 |
跳过插件安装也可以------后续在"系统管理 → 插件管理"中随时安装。
4.4 创建管理员用户
插件安装完成后,进入管理员用户创建页面:
text
┌──────────────────────────────────────────────┐
│ Create First Admin User │
│ │
│ Username: [________________] │
│ Password: [________________] │
│ Full name: [________________] │
│ Email: [________________] │
│ │
│ [ Save and Continue ] │
└──────────────────────────────────────────────┘
填写建议:
| 字段 | 建议值 | 说明 |
|---|---|---|
| Username | admin |
简洁易记 |
| Password | 设置强密码 | 生产环境建议 8 位以上含特殊字符 |
| Full name | Administrator |
显示名称 |
| 真实邮箱 | 用于接收通知 |
4.5 实例配置
Jenkins URL 保持默认(http://<IP>:8080),点击 Save and Finish → Start using Jenkins。
text
✅ Jenkins is ready!
💡 生产环境建议 :如果 Jenkins 配置了域名(如
https://jenkins.company.com),此处应填写域名地址,避免构建时 URL 指向错误。
五、插件管理
5.1 查看已安装插件
进入 系统管理 → 插件管理 → 已安装,可以看到当前已安装的插件列表。
5.2 安装新插件
方式一:通过 Web 界面安装
- 进入 系统管理 → 插件管理 → 可选插件
- 搜索需要的插件名称
- 勾选插件后点击 Install without restart(安装后不重启)
方式二:上传插件(离线安装)
当 Jenkins 服务器无法访问外网时,可以通过上传 .hpi 文件安装:
- 进入 系统管理 → 插件管理 → 高级 → 上传插件
- 选择
.hpi文件 → 点击 上传
5.3 更换国内镜像源(加速插件下载)
如果插件下载速度慢,可以更换为国内镜像源:
bash
# 进入 Jenkins 数据目录
cd /usr/local/docker/jenkins_docker/data/
# 备份原配置
mv hudson.model.UpdateCenter.xml hudson.model.UpdateCenter.xml.bk
# 复制一份用于修改
cp -p hudson.model.UpdateCenter.xml.bk hudson.model.UpdateCenter.xml
# 修改为清华源
vim hudson.model.UpdateCenter.xml
将内容替换为:
xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
重启 Jenkins 使配置生效:
bash
docker-compose restart
六、全局工具配置
Jenkins 需要知道 JDK 和 Maven 的位置,才能执行构建任务。
6.1 将 JDK 和 Maven 复制到 Jenkins 工作目录
bash
# 复制 JDK 和 Maven 到 Jenkins 数据目录
cp -r /usr/local/jdk /usr/local/docker/jenkins_docker/data/
cp -r /usr/local/maven /usr/local/docker/jenkins_docker/data/
💡 路径说明 :
/var/jenkins_home/是 Jenkins 容器内的工作目录,对应宿主机的/usr/local/docker/jenkins_docker/data/。
6.2 配置 JDK
进入 系统管理 → 全局工具配置:
text
┌─────────────────────────────────────────────────────────────────┐
│ 全局工具配置 │
├─────────────────────────────────────────────────────────────────┤
│ JDK │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ JDK installations │ │
│ │ [+] Add JDK │ │
│ │ │ │
│ │ Name: [jdk8 ] │ │
│ │ JAVA_HOME: [/var/jenkins_home/jdk ] │ │
│ │ ☑ Install automatically (取消勾选) │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
关键配置:
| 字段 | 值 | 说明 |
|---|---|---|
| Name | jdk8 |
自定义名称,后续构建时引用 |
| JAVA_HOME | /var/jenkins_home/jdk |
Jenkins 容器内的 JDK 路径 |
| Install automatically | ❌ 取消勾选 | 我们手动配置路径 |
6.3 配置 Maven
在同一个页面向下滚动到 Maven 部分:
text
┌─────────────────────────────────────────────────────────────────┐
│ Maven │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Maven installations │ │
│ │ [+] Add Maven │ │
│ │ │ │
│ │ Name: [maven3.6 ] │ │
│ │ MAVEN_HOME: [/var/jenkins_home/maven] │ │
│ │ ☑ Install automatically (取消勾选) │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
关键配置:
| 字段 | 值 | 说明 |
|---|---|---|
| Name | maven3.6 |
自定义名称 |
| MAVEN_HOME | /var/jenkins_home/maven |
Jenkins 容器内的 Maven 路径 |
| Install automatically | ❌ 取消勾选 | 手动配置 |
6.4 保存配置
点击页面底部的 应用 → 保存。
七、配置 SSH 目标服务器
为了将构建产物(如 JAR 包)发送到目标服务器,需要配置 SSH 连接。
7.1 安装 Publish Over SSH 插件
如果尚未安装,进入 系统管理 → 插件管理 → 可选插件 ,搜索 Publish Over SSH 并安装。
7.2 配置 SSH 服务器
进入 系统管理 → 系统配置 ,找到 Publish over SSH 部分:
text
┌─────────────────────────────────────────────────────────────────┐
│ Publish over SSH │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SSH Servers │ │
│ │ [+] Add │ │
│ │ │ │
│ │ Name: [test ] │ │
│ │ Hostname: [192.168.100.155 ] │ │
│ │ Username: [root ] │ │
│ │ Remote Directory:[/usr/local/test ] │ │
│ │ Password / Key: [________________] │ │
│ │ │ │
│ │ [ Test Configuration ] │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
关键配置:
| 字段 | 值 | 说明 |
|---|---|---|
| Name | test |
配置名称,后续构建时选择 |
| Hostname | 192.168.100.155 |
目标服务器 IP |
| Username | root |
目标服务器登录用户名 |
| Remote Directory | /usr/local/test |
文件发送到的远程目录 |
| Password | 目标服务器的 root 密码 | 与 Hostname 对应的密码 |
⚠️ 注意 :如果目标服务器没有
/usr/local/test目录,需要先手动创建:
bash
# 在目标服务器上执行
mkdir -p /usr/local/test
点击 Test Configuration ,如果显示 Success,说明 SSH 连接配置成功。
7.3 保存配置
点击页面底部的 应用 → 保存。
八、构建任务入门
为了验证 Jenkins 配置是否正确,我们创建一个简单的构建任务。
8.1 创建任务
- 点击 Jenkins 首页的 新建任务(New Item)
- 输入任务名称:
mytest - 选择 构建一个自由风格的软件项目(Freestyle project)
- 点击 OK
8.2 配置源码管理
text
┌─────────────────────────────────────────────────────────────────┐
│ 源码管理 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ● Git │ │
│ │ Repository URL: http://192.168.100.153:82/chen_group/web_demo.git │ │
│ │ Credentials: [chen / ****] │ │
│ │ Branches to build: [*/master] │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
步骤说明:
- 选择 Git
- 在 Repository URL 中填写 GitLab 项目地址
- 点击 Credentials 右侧的 Add,添加 GitLab 认证凭据
- 填写 GitLab 用户名和密码
- 确认凭据添加成功后,选择该凭据
- Branch 保持
*/master或*/main
8.3 配置构建步骤
点击 添加构建步骤 → 调用顶层 Maven 目标:
text
┌─────────────────────────────────────────────────────────────────┐
│ 构建 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Maven Version: [maven3.6 ] │ │
│ │ Goals: [clean package -DskipTests] │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
| 参数 | 含义 |
|---|---|
clean |
清除之前构建生成的 target 目录 |
package |
编译并打包成 JAR/WAR 文件 |
-DskipTests |
跳过单元测试执行(加快构建速度) |
8.4 第一次构建
点击 保存 → 立即构建。
查看构建日志:
点击构建记录(如 #1)→ Console Output,可以看到构建过程的完整日志。
成功标志:
text
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.296 s
[INFO] Finished at: 2025-06-26T06:09:33Z
[INFO] ------------------------------------------------------------------------
8.5 验证构建产物
进入 Jenkins 容器,查看生成的 JAR 包:
bash
# 进入容器
docker exec -it jenkins bash
# 进入工作空间
cd /var/jenkins_home/workspace/mytest/target/
# 查看 JAR 包
ls -la *.jar
预期输出:
text
-rw-r--r-- 1 jenkins jenkins 15M Jun 26 06:09 demo-0.0.1-SNAPSHOT.jar
📝 总结与知识点一览表
本期核心知识点
| 类别 | 知识点 | 核心内容 |
|---|---|---|
| Jenkins 概述 | CI/CD 自动化服务器 | 持续集成、持续交付、插件扩展 |
| 部署方式 | Docker + docker-compose | 容器化部署,数据持久化 |
| 初始化配置 | 解锁密码、插件安装、管理员创建 | 首次启动的关键步骤 |
| 插件管理 | 安装 Git / Git Parameter / Publish Over SSH | 核心插件安装 |
| 全局工具 | JDK + Maven 配置 | 构建 Java 项目的基础 |
| SSH 配置 | Publish Over SSH | 构建产物远程发送 |
| 构建任务 | Freestyle 项目 | 源码拉取 + Maven 构建 |
常用 Jenkins 命令速查
| 操作 | 命令 |
|---|---|
| 查看初始密码 | docker logs -f jenkins |
| 进入容器 | docker exec -it jenkins bash |
| 重启 Jenkins | docker-compose restart |
| 查看日志 | docker-compose logs -f jenkins |
| 停止服务 | docker-compose down |
| 启动服务 | docker-compose up -d |
常见错误排查指南
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
Permission denied 启动失败 |
data 目录权限不足 | chmod 777 data/ |
| 插件下载慢 | 连接国外源 | 更换清华镜像源 |
git clone 失败(403) |
未配置认证凭据 | 添加 GitLab 用户名/密码 |
mvn: command not found |
Maven 未配置 | 检查全局工具配置中的 MAVEN_HOME |
| 构建时 JDK 找不到 | JAVA_HOME 配置错误 | 检查全局工具配置中的路径 |
| Test Configuration 失败 | SSH 连接信息错误 | 检查 IP/用户名/密码/端口 |
学习/生产最佳实践
- 数据持久化 :使用
volumes挂载data/目录,保证 Jenkins 配置在容器重启后不丢失。 - 定期备份 :备份
/usr/local/docker/jenkins_docker/data/目录,包含所有任务配置和插件。 - 使用 LTS 版本:生产环境应使用长期支持版(LTS),而非每周发布的测试版。
- 资源规划:Jenkins 构建消耗 CPU 和内存,确保服务器有足够的资源,尤其是有多个并发构建时。
- 安全配置:创建管理员用户后,立即禁用初始密码登录;建议配置 HTTPS 访问。
🔜 下期预告
本期我们完成了 Jenkins 的安装与基础配置------从 Docker 部署、初始化设置、插件安装、全局工具配置,到 SSH 目标服务器配置和第一个构建任务。
Jenkins 这个"自动化工厂"已经建好了,但目前它还是"空转"状态------虽然能构建,但还没有和代码仓库、开发环境、目标服务器形成完整的流水线。
下一期(第三期) ,我们将进入 开发环境搭建与 GitLab-Jenkins 集成------在 Windows 上配置完整的 Java 开发环境(JDK + Maven + IDEA + Git),将本地代码推送到 GitLab,并在 Jenkins 中完成从代码拉取到构建的自动化流程,实现"代码提交 → 自动构建 → 产物输出"的初步闭环。敬请期待!
本期(Jenkins 安装与基础配置)到此结束。 如果在操作过程中遇到任何问题,欢迎在评论区留言讨论!
--- Compiled and Authored by Whisky --- July 26 th, 2026