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 节点
相关推荐
Fcy6486 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满6 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9037 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技8 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀8 小时前
Linux环境变量
linux·运维·服务器
zzzsde8 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º10 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~10 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流10 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器