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 和监控,循序渐进。

相关推荐
万联WANFLOW1 小时前
多分支企业组网,IP 网段到底该怎么规划
开发语言·php
阿里嘎多学长1 小时前
2026-07-07 GitHub 热点项目精选
开发语言·程序员·github·代码托管
犀利豆2 小时前
AI in Harness(二)
java·人工智能·后端
cookies_s_s3 小时前
C++ 字符串动态创建对象 -- 工厂模式、自动注册、模板递归动态调用
服务器·开发语言·c++
沉静的小伙3 小时前
在微服务中使用领域事件
java·运维·微服务
程序员在囧途4 小时前
likeadmin-api API 算力超市怎么做供应商切换?统一鉴权、task_id 和 callback_url 才能稳交付
java·服务器·数据库·开放api·likeadmin-api·api算力超市
盐焗鹌鹑蛋4 小时前
【C++】继承
开发语言·c++
醇氧4 小时前
Spring 容器 Map 注入机制详解
java·后端·spring
ylscode4 小时前
Cloudflare Workers Cache 深度解析:边缘缓存如何重塑无服务器性能边界
java·spring·mybatis
栈溢出了4 小时前
Java Lambda 表达式笔记
java·开发语言·intellij-idea