Jenkins CI/CD 平台详解
一、CI/CD 概念介绍
✅ CI(持续集成)
- 定义 :开发人员频繁地将代码变更合并到主干(如
main或master分支),每次提交后自动触发构建、编译、测试等流程。 - 目的:尽早发现集成错误,提升代码质量。
- 产出物:可运行的二进制制品(如 JAR、WAR、Docker 镜像等)。
✅ CD(持续交付 / 持续部署)
| 类型 | 描述 | 是否自动化部署到生产 |
|---|---|---|
| 持续交付(Continuous Delivery) | 自动构建、测试、打包,并准备好部署包,但需人工确认才发布到生产环境 | ❌ 手动 |
| 持续部署(Continuous Deployment) | 在持续交付基础上,自动部署到生产环境(前提是所有测试通过) | ✅ 自动 |
💡 工具链组合:CI/CD 流程通常由 Git + Jenkins + Maven/Gradle + Docker + Kubernetes + Nexus/Harbor 等组成。
二、Jenkins 简介
- 定位 :开源、免费、基于 Java 的自动化服务器,用于实现 CI/CD。
- 核心能力 :
- 自动拉取代码
- 编译构建项目
- 执行单元测试
- 生成制品(Artifact)
- 部署到测试/预发/生产环境
- 适用场景:Web 应用、微服务、移动 App、基础设施即代码(IaC)等。
三、Jenkins 安装方式概览
Jenkins 可通过以下三种主流方式部署:
| 方式 | 优点 | 适用场景 |
|---|---|---|
| 原生系统安装(RPM/YUM) | 稳定、适合长期运行 | 传统物理机/虚拟机生产环境 |
| Docker 容器 | 快速启动、隔离性好、便于迁移 | 开发/测试环境、快速验证 |
| Kubernetes 部署 | 高可用、弹性伸缩、云原生 | 企业级生产环境、大规模集群 |
四、Jenkins 核心特点
- 开源免费:社区活跃,插件生态丰富。
- 跨平台支持:Linux、Windows、macOS 均可运行。
- Web 可视化界面:通过浏览器管理任务、查看日志、配置流水线。
- 安装配置简单:几分钟即可启动服务。
- 2000+ 插件:支持 Git、Maven、Docker、K8s、Slack、Email 等几乎所有 DevOps 工具。
五、Jenkins 架构:Master-Slave(现称 Controller-Agent)
Jenkins由Master和Slave组成
Master是Jenkins的核心,主要负责job的定时运行,并将job分发到slave上运行,并对job的运行状态进行监控
Slave是相对于master的概念,主要是监听master的指令,运行job

六、Jenkins 安装部署详解
✅ 方式一:在 Linux(如 CentOS/RHEL)上通过 YUM 安装(生产推荐)
步骤 1:安装并配置 OpenJDK 17
bash
# 下载 OpenJDK 17(LTS 版本)
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
# 解压到 /usr/local
tar -xzvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local
# 配置全局环境变量
cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/local/jdk-17.0.2
export CLASSPATH=\$JAVA_HOME/lib:\$CLASSPATH
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
# 使配置生效
source /etc/profile
# 验证安装
java -version
🔍 说明:
- Jenkins 2.357+ 要求 Java 11+ ,推荐使用 Java 17(LTS)。
- 不建议使用系统自带的
openjdk包,版本可能过旧。
步骤 2:配置 Jenkins YUM 源并安装
bash
# 添加 Jenkins 官方稳定版仓库
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 导入 GPG 公钥(确保软件包来源可信)
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 安装 Jenkins 及字体依赖(避免中文乱码)
sudo yum install fontconfig jenkins -y
📄 jenkins.repo 内容解析(来自你提供的文件):
ini[jenkins] name=Jenkins-stable baseurl=http://pkg.jenkins.io/redhat-stable gpgcheck=1表示从 Jenkins 官方稳定源安装,启用 GPG 校验。
步骤 3:指定 Jenkins 使用自定义 JDK
bash
# 编辑 systemd 服务文件
sudo vim /usr/lib/systemd/system/jenkins.service
找到第 53 行左右(或包含 Environment="JAVA_HOME=... 的行),修改为:
ini
Environment="JAVA_HOME=/usr/local/jdk-17.0.2"
⚠️ 注意:路径必须与你解压的 JDK 路径一致。
步骤 4:启动 Jenkins 服务
bash
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动 Jenkins
sudo systemctl start jenkins
# 设置开机自启(可选)
sudo systemctl enable jenkins
# 查看状态
sudo systemctl status jenkins
🔑 首次访问:
- 浏览器打开
http://<服务器IP>:8080- 初始密码位于:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
✅ 方式二:使用 Docker 部署(快速验证/开发环境)
1. 普通 Jenkins 镜像
bash
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-u root \
-v /data/jenkins:/var/jenkins_home \
jenkins/jenkins:lts
📌 参数说明:
-p 8080:8080:Web UI 端口-p 50000:50000:Agent 连接端口(用于分布式构建)-u root:以 root 用户运行(避免权限问题,尤其挂载卷时)-v /data/jenkins:/var/jenkins_home:持久化 Jenkins 配置、插件、作业数据jenkins/jenkins:lts:使用长期支持版(推荐)
2. Blue Ocean 镜像(现代化 UI)
bash
docker run -d \
--name jenkins-blueocean \
-p 8080:8080 \
-p 50000:50000 \
-u root \
-v /data/jenkins:/var/jenkins_home \
jenkinsci/blueocean:latest
💡 Blue Ocean:提供更友好的 Pipeline 可视化界面,适合新手。
✅ 方式三:在 Kubernetes 上部署(生产级高可用)
三种部署策略:
| 方法 | 说明 | 适用场景 |
|---|---|---|
| YAML 手动部署 | 编写 Namespace、ServiceAccount、PV/PVC、Deployment、Service 等 YAML | 学习原理、精细控制 |
| Helm Chart | 使用 jenkinsci/jenkins Helm Chart 一键部署 |
快速上线、标准化 |
| Jenkins Operator | Kubernetes 原生 Operator,声明式管理 Jenkins 实例 | 云原生、GitOps 场景 |
示例:Helm 部署(简化版)
bash
# 添加 Helm 仓库
helm repo add jenkinsci https://charts.jenkins.io
helm repo update
# 创建命名空间
kubectl create namespace jenkins
# 安装 Jenkins(使用默认配置)
helm install jenkins jenkinsci/jenkins -n jenkins
🔍 获取初始密码:
bashkubectl get secret jenkins -n jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode
🌐 访问方式:
- NodePort:
http://<NODE_IP>:<NODE_PORT>- Port-Forward(临时):
kubectl port-forward svc/jenkins 8080:8080 -n jenkins
七、典型使用场景
| 场景 | Jenkins 如何发挥作用 |
|---|---|
| Java 项目自动构建 | 监听 Git 仓库 → 拉取代码 → Maven 编译 → 单元测试 → 生成 JAR |
| Docker 镜像自动构建 | 构建成功后 → 打包成 Docker 镜像 → 推送到 Harbor/Nexus |
| K8s 应用自动部署 | 触发 Helm upgrade 或 kubectl apply 部署到测试/生产环境 |
| 多环境流水线 | Dev → Test → Staging → Prod,每阶段需人工审批(持续交付) |
| 基础设施即代码(IaC) | 自动执行 Terraform/Ansible 脚本创建云资源 |
八、总结建议
| 环境 | 推荐部署方式 |
|---|---|
| 个人学习 / Demo | Docker(Blue Ocean 镜像) |
| 小型团队 / 测试环境 | Linux YUM 安装 + 单机 Agent |
| 中大型企业 / 生产环境 | Kubernetes + Helm / Jenkins Operator + 多 Agent 节点 |