一、软件开发的演进:从瀑布到 DevOp
| 模型 | 特点 | 适用场景 | 缺陷 |
|---|---|---|---|
| 瀑布模型 | 线性推进,阶段不可回退 | 需求明确、法规严格的领域(医疗/航空) | 不能返工,问题只能下个迭代修 |
| 迭代模型 | 低成本快速出原型,多次迭代完善 | ERP 等复杂项目,需求可能微调 | 仍需整体规划,灵活性有限 |
| 敏捷模型 | 小步快跑,每次迭代交付可审查版本 | 需求变化快的互联网项目 | 运维侧跟不上开发节奏 |
| DevOps | 开发+运维一体化,全流程自动化 | 需要持续交付的云原生/微服务场景 | 落地门槛高,需文化+工具双推动 |
核心矛盾:传统模式中,开发追求快、运维追求稳、测试关注找 Bug------目标不同,互相扯皮。DevOps 就是把这三方拉到同一张桌上,用自动化流程替代人工交接。
传统 vs DevOps
| 维度 | 传统模式 | DevOps |
|---|---|---|
| 协作 | 开发/运维/测试割裂 | 跨团队协同,共享责任 |
| 交付周期 | 月/季度 | 天/小时 |
| 部署方式 | 手动,易出错 | 全流程自动化 |
| 问题修复 | 等下一阶段,成本高 | 实时反馈,快速修复 |
| 风险控制 | 后期集中暴露 | 全流程持续监控 |
二、DevOps 核心理念
DevOps = Development + Operations,不是某个工具或职位,而是一组实践 + 文化,核心目标是打破部门墙,通过自动化和持续改进,实现软件从需求到上线的高效流转。
三大原则
plaintext
┌──────────────────────────────────────────────┐
│ ① 流动原则:加速从开发到交付的流程 │
│ · 坚持少做(MVP 原则) │
│ · 大需求拆小,快速解决 │
│ · 工作可视化(看板)、减少交接次数 │
├──────────────────────────────────────────────┤
│ ② 反馈原则:及时发现问题,源头保障质量 │
│ · 建设安全可靠的工作体系 │
│ · 为内部客户优化工作 │
├──────────────────────────────────────────────┤
│ ③ 持续学习原则:将改进制度化 │
│ · 建立学习型组织 │
│ · 局部发现 → 全局优化 │
└──────────────────────────────────────────────┘
为什么会出现 DevOps?
- 容器化 + 微服务 直接催生了 DevOps
- 敏态需求:创新型应用要求一天发布多次
- 软件依赖度:业务对软件从轻度→中度→重度依赖
- 消除浪费:无人使用的功能、等待测试/审批都是浪费
三、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 和监控,循序渐进。