ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DevOps 入门

DevOps 入门

一、传统软件开发现状(DevOps 诞生背景)

传统模式:开发团队、测试团队、运维团队相互独立,部门墙明显。

  • 开发 Dev:负责写代码,追求快速迭代、上线新功能;本地跑通就交付,不关心线上环境。
  • 测试 QA:功能、回归测试,找 bug。
  • 运维 Ops:负责部署、服务器、监控、保障线上稳定,害怕变更,抗拒频繁发布。

痛点:

  1. 开发环境、测试环境、生产环境不一致,“在我电脑上能跑”;
  2. 交付周期长,版本发布人工操作多,容易出错;
  3. 部门沟通成本高,故障互相甩锅;
  4. 手动部署、回滚,重复劳动,效率低;
  5. 业务需求迭代快,传统流程跟不上业务速度。

DevOps 就是打通开发‑测试‑运维的一套理念、文化、流程与工具链,消除部门壁垒,缩短软件交付周期,保障交付质量。

二、DevOps 概念

  1. DevOps 不是某一款软件,是一套方法论(文化 + 流程 + 工具)
  • Dev(Development)开发;Ops(Operations)运维;
  • 核心:开发和运维紧密协作,打通从代码提交到线上发布的完整链路。
  1. 核心目标
  • 持续快速交付高质量软件;缩短从 idea 想法到线上可用的时间;
  • 自动化重复工作:编译、构建、测试、部署、回滚;
  • 快速反馈:测试反馈、线上监控反馈给到开发;
  • 故障共同承担,共同改进,而不是互相甩锅。

DevOps 三大支柱

  1. 文化 Culture:打破部门墙,开发运维协作,责任共担;
  2. 流程 Process:标准化软件交付流程;
  3. 工具 Toolchain:工具链落地自动化流程。

三、DevOps 持续交付环(无限循环,八大环节)

闭环循环,不断迭代优化

  1. Plan 规划:需求分析、产品规划、排期、确定功能;
  2. Code 编码:开发编写业务代码;使用 Git 版本控制管理源代码;
  3. Build 构建:编译代码,打包制品(jar/war、docker 镜像);
  4. Test 测试:单元测试、集成测试、功能测试、自动化测试;
  5. Release 发布准备:版本确认、制品归档;
  6. Deploy 部署:将版本部署到测试、预发布、生产环境;
  7. Operate 运维运营:线上运行、监控、日志、告警、容量管理;
  8. Monitor 监控反馈:采集线上指标、故障反馈,反馈给 Plan 规划阶段,进入下一轮迭代。

关键理念:反馈闭环,线上问题反馈给开发,驱动产品和代码优化。

四、CI / CD 核心概念(DevOps 最核心实践)

CI 持续集成 Continuous Integration

  • 频繁把多人的代码合并到主干仓库,自动化构建 + 自动化测试。
  • 开发人员频繁提交代码到 Git 仓库;触发自动化构建、单元测试、代码检查。
  • 目的:尽早发现编译错误、单元测试失败、代码缺陷,尽早暴露问题。

CI 重点:代码提交后自动做【构建 + 测试】。

CD 有两层含义

  1. 持续交付 Continuous DeliveryCI 完成之后,制品随时处于可部署状态;可以一键部署到任意环境(测试、预发);生产环境部署需要人工确认触发,不会自动上生产。
  2. 持续部署 Continuous Deployment在持续交付基础上,全部自动化,无需人工干预,自动部署到生产环境。风险高,一般仅用于内部非核心业务。

通俗区分

  • CI:代码提交自动构建、自动测;
  • 持续交付:可一键部署,生产要人工点按钮;
  • 持续部署:测试通过自动直接上生产。

五、DevOps 工具链(各环节对应工具)

表格

环节常用工具
代码版本管理Git、GitLab、Gitee、Github
CI 流水线执行引擎Jenkins(老牌)、GitLab‑CI、GitHub Actions、Argo‑CI
制品仓库(保存构建产物)Docker Harbor 镜像仓库、Nexus(jar/war/npm)
配置管理Ansible、SaltStack
容器编排Docker、Kubernetes
监控告警Zabbix、Prometheus+Grafana、Alertmanager
日志ELK(Elasticsearch Logstash Kibana)、Loki
制品镜像Docker

典型流水线完整流程示例:开发git push代码 → GitLab接收代码 → Jenkins/GitLab‑CI触发流水线 → 拉取代码 → 代码检查 → 编译构建 → 单元测试 → 构建Docker镜像 → 推送到Harbor镜像仓库 → 部署到K8s测试环境 → 自动化集成测试 → 人工确认 → 部署预发布/生产K8s集群

六、制品 Artifact(构建产物)

  • 制品:代码经过编译打包输出的产物,不包含源代码。 Java:jar、war;Go:二进制程序;容器场景:Docker 镜像。

CI 不要每次重新从源码构建,制品一次构建,多环境复用。测试、预发、生产使用同一个制品,避免 “环境不一样导致 bug”。

七、Git 版本控制基础

  1. Git:分布式版本控制系统;每一个本地仓库拥有完整版本历史。
  2. 核心概念:工作区、暂存区 (stage/index)、本地仓库、远程仓库 origin。
  3. 基础命令
git clone 地址 #克隆仓库 git add . #工作区提交到暂存区 git commit -m "备注" #暂存提交本地仓库 git push origin main #推送到远程main分支 git pull #拉取远程更新合并本地 git branch #查看分支 git checkout / switch #切换分支
  1. 分支策略
  • main/master:保护分支,代表线上稳定版本,不允许直接 push;
  • 开发从 main 拉取 feature 功能分支开发;开发完成提 Merge Request (MR)/Pull Request (PR) 合并回 main;
  • 生产出 bug,从 main 拉 fixbug 热修复分支,修复后合并回 main。

GitLab:自建 Git 代码仓库平台,自带 CI 流水线、MR、项目管理。

八、Jenkins 简介(经典 CI 工具)

  1. Jenkins 基于 Java 开发,开源 CI 服务器;可以实现自动化流水线。
  2. 组成
  • Master 主节点:web 界面,管理任务、调度;
  • Agent 代理节点:执行构建任务,分布式构建,减轻 master 压力。
  1. 触发方式:代码提交 webhook 钩子触发、定时触发、手动点击构建。
  2. 两种流水线写法
  • 自由风格项目:图形页面配置,适合简单任务,难以版本化;
  • Pipeline 流水线(Jenkinsfile):代码式流水线,Groovy 语法,可以存放在 Git 仓库,Pipeline as Code 流水线即代码,生产推荐。

Jenkinsfile 典型阶段

pipeline { agent any stages { stage('拉取代码') { steps { ... } } stage('编译构建') { steps { ... } } stage('单元测试') { steps { ... } } stage('构建镜像') { steps { ... } } stage('推送镜像仓库') { steps { ... } } stage('部署测试环境') { steps { ... } } } }

九、流水线环境区分

  • dev 开发环境:开发自测;
  • test 测试环境:QA 测试;
  • staging 预发布环境:和生产配置 1:1,做上线前验证;
  • prod 生产环境:对外提供业务服务。

原则:同一个制品镜像,依次部署 dev‑test‑staging‑prod,禁止每个环境重新构建。

十、流水线核心最佳实践

  1. 制品一次构建,到处部署,不同环境只改配置,不改二进制 / 镜像;配置与代码分离(ConfigMap、环境变量)。
  2. 流水线各个阶段失败立即终止,失败及时告警通知。
  3. Pipeline as Code,Jenkinsfile 存入 Git,流水线本身版本管理。
  4. 环境隔离,测试环境不能访问生产数据库;权限管控。
  5. 流水线中做各类质量门禁:代码扫描、单元测试覆盖率不达标直接阻断流水线。
  6. 可回滚:保留历史版本,故障可以快速切回旧制品。

思维导图

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进