DevOps + CI/CD:从理念到 Jenkins 实战落地

一、软件开发的演进:从瀑布到 DevOp

模型 特点 适用场景 缺陷
瀑布模型 线性推进,阶段不可回退 需求明确、法规严格的领域(医疗/航空) 不能返工,问题只能下个迭代修
迭代模型 低成本快速出原型,多次迭代完善 ERP 等复杂项目,需求可能微调 仍需整体规划,灵活性有限
敏捷模型 小步快跑,每次迭代交付可审查版本 需求变化快的互联网项目 运维侧跟不上开发节奏
DevOps 开发+运维一体化,全流程自动化 需要持续交付的云原生/微服务场景 落地门槛高,需文化+工具双推动

核心矛盾:传统模式中,开发追求快、运维追求稳、测试关注找 Bug------目标不同,互相扯皮。DevOps 就是把这三方拉到同一张桌上,用自动化流程替代人工交接。

传统 vs DevOps

维度 传统模式 DevOps
协作 开发/运维/测试割裂 跨团队协同,共享责任
交付周期 月/季度 天/小时
部署方式 手动,易出错 全流程自动化
问题修复 等下一阶段,成本高 实时反馈,快速修复
风险控制 后期集中暴露 全流程持续监控

二、DevOps 核心理念

DevOps = Development + Operations,不是某个工具或职位,而是一组实践 + 文化,核心目标是打破部门墙,通过自动化和持续改进,实现软件从需求到上线的高效流转。

三大原则

plaintext

复制代码
┌──────────────────────────────────────────────┐
│  ① 流动原则:加速从开发到交付的流程           │
│     · 坚持少做(MVP 原则)                    │
│     · 大需求拆小,快速解决                     │
│     · 工作可视化(看板)、减少交接次数         │
├──────────────────────────────────────────────┤
│  ② 反馈原则:及时发现问题,源头保障质量       │
│     · 建设安全可靠的工作体系                   │
│     · 为内部客户优化工作                       │
├──────────────────────────────────────────────┤
│  ③ 持续学习原则:将改进制度化                 │
│     · 建立学习型组织                           │
│     · 局部发现 → 全局优化                      │
└──────────────────────────────────────────────┘

为什么会出现 DevOps?

  1. 容器化 + 微服务 直接催生了 DevOps
  2. 敏态需求:创新型应用要求一天发布多次
  3. 软件依赖度:业务对软件从轻度→中度→重度依赖
  4. 消除浪费:无人使用的功能、等待测试/审批都是浪费

三、CI/CD 详解:DevOps 的核心落地手段

DevOps vs CI/CD 的关系

表格

维度 DevOps CI/CD
本质 文化,强调协作 实践方法,强调自动化
范围 全生命周期 构建→测试→部署这条链路
关系 CI/CD 是 DevOps 的关键落地手段 是 DevOps 团队的重要目标

一句话:DevOps 是理念,CI/CD 是手段。

三个 C 分清

plaintext

复制代码
CI(持续集成)    → 频繁提交代码,自动构建+测试,确保新代码能和主干集成
CD(持续交付)    → 在 CI 基础上,代码随时可部署到类生产环境(Staging)
CD(持续部署)    → 在持续交付基础上,自动部署到生产环境(无需人工审批)

区别:持续交付 = 可以部署但选择不部署;持续部署 = 自动部署,不需要人按按钮。

CI/CD Pipeline 典型阶段

plaintext

复制代码
代码提交 → 构建(Build) → 测试(Test) → 发布(Release) → 部署(Deploy) → 验证(Validation)

Pipeline 模型演进

表格

模型 特点 安全性
Push Pipeline CI 系统主动推送构建产物到集群 凭据可能存于代码中,有风险
Pull Pipeline(GitOps) 集群主动拉取配置变更部署 凭据只存于集群,更安全

GitOps 核心思想:Git 仓库是唯一事实来源,集群状态由 Git 配置驱动。

四、DevOps 工具链速查

按功能分类

表格

类别 作用 主流工具
代码管理 版本控制、协作 Git、GitLab、GitHub
CI/CD 自动构建/测试/部署 Jenkins、GitLab CI、GitHub Actions
配置管理 批量服务器配置 Ansible、Terraform、Puppet
容器化 应用打包+编排 Docker、Kubernetes
监控告警 性能监控、日志、告警 Prometheus+Grafana、ELK、Alertmanager
协作沟通 任务管理、信息同步 Jira、Slack、企业微信
安全 代码扫描、镜像漏洞检测 SonarQube、Trivy

典型流水线对应工具

plaintext

复制代码
Code(Git+GitLab) → Build(Maven/Gradle) → Test(JUnit) → 
Integrate(Jenkins) → Image(Docker+Harbor) → Deploy(K8s) → 
Monitor(Prometheus+Grafana) → Notify(钉钉/WebHook)

选型建议

表格

场景 推荐组合
中小团队(10-50人) GitLab + Ansible + Docker Compose + Prometheus+Grafana
中大型企业(50+人,微服务) GitLab EE + Jenkins + Terraform + Docker+K8s + ELK + Prometheus
云原生场景 GitLab + GitLab CI + Terraform + K8s + ArgoCD + Trivy

五、Jenkins 实战:搭建 CI/CD 环境

Jenkins 是什么

开源的自动化 CI/CD 工具,用 Java 编写,核心特点:

  • 插件生态强大:几乎能对接所有工具
  • 流水线即代码:Jenkinsfile 定义构建流程
  • 分布式构建:任务可分发到多台机器执行
  • 易安装:一个 war 包直接跑

安装(OpenEuler)

bash

复制代码
# 1. 导入安装源
wget -O /etc/yum.repos.d/jenkins.repo --no-check-certificate \
  https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

# 2. 安装 JDK + Jenkins
yum install fontconfig java-21-openjdk -y
yum install jenkins -y

首次登录

bash

复制代码
# 获取初始密码
cat /var/lib/jenkins/secrets/initialAdminPassword

登录 → 安装推荐插件 → 创建管理员用户 → 配置实例 → 开始使用

必装插件

表格

插件 作用
Publish Over SSH 通过 SSH 部署构建产物到远程服务器
Maven Integration 支持 Maven 项目构建

关键配置

表格

配置项 说明
并发执行数量 系统管理 → 全局安全配置 → 控制并发构建数
邮件通知 系统管理 → 系统配置 → 邮件通知,构建结果自动发邮件

六、一句话总结

plaintext

复制代码
DevOps 是理念(协作+自动化)
    ↓ 落地手段
CI/CD 是实践(持续集成/持续交付/持续部署)
    ↓ 工具支撑
Jenkins 是引擎(自动化流水线)
    ↓ 最终效果
代码提交 → 自动构建 → 自动测试 → 自动部署 → 自动监控 → 反馈优化(闭环)

落地建议:不要一上来搞全自动化。先从 CI 自动化(构建+单元测试)开始,跑通了再扩展 CD 和监控,循序渐进。

相关推荐
qq_白羊座1 小时前
GitLab CI + Jenkins 双流水线模式Jenkins 端实现
java·开发语言
say_fall1 小时前
8086汇编程序设计_从基础到实战
开发语言·汇编·8086
填满你的记忆1 小时前
《RAG 完整工作流程详解》
java·ai·agent·rag
Kurisu5751 小时前
深度解析:Go 语言 GMP 调度器模型与内核线程探测
java·数据库·golang
架构源启1 小时前
Spring AI进阶系列(11) Spring AI Multi-Agent 协作系统:辩论、投票与共识机制实战
java·人工智能·spring
一条泥憨鱼1 小时前
深入理解Java反射(超详细)
java·开发语言·spring·mybatis·反射
sycmancia1 小时前
Qt——Qt中的调色板
开发语言·qt
J-query1 小时前
修改AndroidStudio的Boot Java Runtime for the IDE后,AndroidStudio启动就报错
java·开发语言·ide·android studio
雪度娃娃1 小时前
ASIO异步通信——服务器网络层和逻辑层设计
开发语言·网络·c++·php