DevOps 和 CI/CD 不仅关于软件工程

2025-02-06 pv

在微软,是不分前端和后端工程师的。

统一叫做软件工程师(Software engineer)。

不以技术方向作为划分的标准,而以高质量解决问题的能力,是我在微软学到的第一课

这启示我们,不要固步自封,自设藩篱,技术不分方向,能高效率、低成本解决问题的技术,就是好技术

因此在未来,我认为,全栈工程师(Full-stack engineer)会是一个不错的职业方向。

这并非不可能。

由于目前 DevOps 和 CI/CD 已经发展得相当完善,开发即部署,部署即发布。开发者和用户之间,有时只差 Git 分支上的一个提交。

按照 敏捷开发🔗 敏捷开发思想,在信息流动速度日益加快的现代社会,交付价值随时间递减,越快的抵达用户,越及时的反馈,商业上的飞轮才有可能转得更快。

所以这篇文章,打算探究 DevOps 和 CI/CD 的基本概念,发展历程,如何实践,以及对于普通程序员的启示。

1. DevOps 和 CI/CD 是什么

DevOps 是 Development 和 Operations 的混写,即“开发和运维”一体。

CI/CD 是持续集成和持续交付/部署(Continuous Integration / Continuous Delivery(Deployment))的缩写。

这两者的关系,按照我个人理解,DevOps 是理念,CI/CD 是实践

软件开发早期,开发和运维是分开的,各司其职。这带来了沟通不畅,职责界定模糊,交付周期长等问题。

DevOps 强调开发和运维一体,开发者需要对软件的最终质量负责

这离不开清晰的流程设计,以及自动化程度高的基础设施。

CI/CD 是用于软件的自动化构建、测试和部署

CI 主要注代码合并、构建和自动化测试。开发者的每次提交,都会触发完整的 CI 流程,如果跑到中途失败,开发者就需要转过头去修复错误。

CD 关注自动化部署。CI 通过后,人工介入,测试通过后进入到自动化部署阶段。在生产环境的部署,遵循灰度发布的策略,与 客户端的发布🔗 客户端的发布像。

部署后然需要持续的监控和报警系统,如果出现异常,需及时回滚到上一个版本

2. 发展历程和实践

敏捷开发和 Scrum 在 20 世纪 90 年代被提出。

不过由于各种工具类基础设施不够成熟,开发和部署环节的自动化程度不高,因此开发和运维是两个独立工种。

DevOps 运动在 2007 到 2008 年间开始盛行。

其中使用到的重要工具:

  • Git 发布于 2005 年
  • GitHub 发布于 2008 年
  • Jenkins 发布于 2011 年
  • Prometheus 发布于 2012 年
  • Docker 发布于 2013 年
  • Kubernetes 发布于 2015 年

成熟的工具,有力推动了 DevOps 的发展。

兼顾易用性和高可用,开发和运维的工作被大大简化,工具可以完成大部分自动化任务。

DevOps 不再只是一个口号,而成为软件工程领域提质增效的一剂解药。

一个典型的 CI/CD 流程大体如下:

  1. 代码提交(Commit):开发者提交代码到 Git 仓库(如 GitHub、GitLab)
  2. 持续集成(CI)
    • 代码检查(Lint)
    • 代码构建(Build)
    • 单元测试(Unit Test)
    • 集成测试(Integration Test)
  3. 持续交付(CD)
    • 代码部署到 Staging 预发布环境
    • 进行自动化测试和人工审核
  4. 持续部署(CD)
    • 自动将代码部署到生产环境
    • 监控应用状态,回滚异常代码(如 Canary Deployment)

常用的工具有:

  • 版本控制:Git(GitHub、GitLab、Bitbucket)

  • CI/CD 工具:Jenkins、GitHub Actions、GitLab CI/CD

  • 容器化:Docker、Kubernetes

  • 监控与日志:Prometheus、Grafana、ELK(Elasticsearch、Logstash、Kibana)

3. 对程序员的启示

DevOps 和 CI/CD 有很多优势:

  • 缩短交付周期
  • 保证代码质量
  • 稳定有序的发布和回滚机制
  • 高效的团队协作

自动化带来的高效和确定性,极大弥补了手工维护的成本和不稳定性

这意味着,开发者可以将更多时间和精力,投入到更有价值的地方。

从另一个方面讲,因为很多人的工作被机器取代:机器不仅完成度更高,且成本低廉(不吃,不喝,还很“听话”),很多职业在慢慢消失

以前还常讲运维工程师,现在多数运维工作都已经自动化了,即便需要人工干预,因为操作相对简单,熟练的开发者足以胜任。

看来,在软件开发领域,“拥抱变化”会是未来一个永恒的主题。

那么程序员的出路在哪里?

这个问题之前 讲过🔗

我认为,单纯依靠技术,很难构建出职业上的护城河

不仅因为技术迭代速度很快,没过几年就会过时,而且技术只是商业模型中的一环,甚至多数情况,都不是最重要的那个

我想了想,还是要两条腿走路:

  1. 懂技术,懂行业,成为领域专家。此为主业
  2. 借鉴 DevOps 的思想,从单人起步,用好工具和杠杆,逐步搭建起自己的商业模式。此为副业

4. 总结

我待过两家公司,百度和微软。这两家公司的开发理念和 DevOps 设施建造的都极为漂亮、稳定、高效。

开发中的体验就会很好。

以网页为载体,也写过几个小的 App:

都自觉地用到了 CI/CD。

因为我本人就是一个 J 人,很喜欢这种清晰步骤下,结果的明确。

我认为,无论是在工作还是生活里,面对复杂和模糊的事情,用系统对抗随机,不失为一种行之有效的手段

(完)

参考

  1. DevOps - 维基百科,自由的百科全书🔗
  2. DevOps 的历史 | Atlassian🔗
在 GitHub 上编辑本页面

最后更新于: 2025-02-14T08:51:58+08:00