Jenkins CI/CD 平台详解

Jenkins CI/CD 平台详解


一、CI/CD 概念介绍

✅ CI(持续集成)

  • 定义 :开发人员频繁地将代码变更合并到主干(如 mainmaster 分支),每次提交后自动触发构建、编译、测试等流程。
  • 目的:尽早发现集成错误,提升代码质量。
  • 产出物:可运行的二进制制品(如 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 核心特点

  1. 开源免费:社区活跃,插件生态丰富。
  2. 跨平台支持:Linux、Windows、macOS 均可运行。
  3. Web 可视化界面:通过浏览器管理任务、查看日志、配置流水线。
  4. 安装配置简单:几分钟即可启动服务。
  5. 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 上部署(生产级高可用)

📚 参考文档:Jenkins on Kubernetes - Official Docs

三种部署策略:
方法 说明 适用场景
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

🔍 获取初始密码:

bash 复制代码
kubectl 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 节点
相关推荐
@TangXin2 小时前
Jenkins-Pipeline语法示例
java·servlet·jenkins
skywalk81632 小时前
Ubuntu宽屏显示器只有4:3分辨率问题的解决:用cvt和xrandr命令查看并配置显卡分辨率到1440x900
linux·运维·ubuntu·显示
fiveym2 小时前
CI/CD 完整流水线全解析:环节拆解 + 角色分工
ci/cd
十月南城2 小时前
微服务化的收益与成本复盘——技术、组织与运维维度的综合账本
运维·微服务·云计算
石小千2 小时前
Jenkins服务器上排查npm编译依赖包错误问题
服务器·npm·jenkins
h7ml2 小时前
企业微信API接口对接系统中Java后端的持续集成/持续部署(CI/CD)落地技巧
java·ci/cd·企业微信
warton882 小时前
ubuntu24下操作配置mysql8相关目录到指定地址
linux·运维·mysql
peixiuhui2 小时前
EdgeGateway 快速开始手册-串口服务器
运维·人工智能·网关·边缘计算·工业控制·串口服务器·iotgateway
fiveym2 小时前
浪潮服务器BIOS性能优化全方案解析:多场景适配与配置详解
运维·服务器·性能优化