CI/CD & DevOps 概揽
Even with modern tools and cloud technologies, building production-grade infrastructure and automation pipelines are still very hard as it involves a thousand details.
什么是 DevOps?软件工程里除了写代码外的部分,构建,发布,运维,都可以看作是 DevOps。
以上是我的理解。
不必纠结于一些 buzz words
IT 界随着技术的更新,时不时都会出一些新名词,就是给一些还搞不清楚的东西起个名称(把外延不断放大)。下面是个开发全景图:
很多人谈论 CI/CD 或者 DevOps,其实是这 5 个基本点:
- Continuous Integration(CI)
- Continuous Testing
- Continuous Delivery
- Continuous Deployment(CD)
- Continuous Monitoring
Continuous Integration CI 就是编译、组装、打包最终软件产品(artifact)。长久以来只是 application 本身,目前来带依赖都打包进 container 镜像。 |
Continuous Testing 不是一个独立的 process,它总是包含在 CI/CD 中。包含不同的种类: |
Continuous Delivery 和 Continuous Deployment 类似,区别在于 Deployment 是自动部署到生产环境,Delivery 在 Deployment 之前需要经过人为的确认/批准,所以技术上讲两者是一样的。 |
Continuous Deployment CD 以前比较简单,现在也演化出不同的方式: |
Continuous Monitoring |
DevOps 是个持续过程,除了 Day0(onboard) Day1(go live) 问题,还要关心 Day2(production) 问题 — performance monitoring,fault detection,log collection,backup,recovery,cost optimization,特殊情况如电商行业还有大促。我理解最好的 DevOps 是自动化能够做到覆盖软件生命的全周期,并且全程融合(支持上下文承接),全程反馈如同分布式监控可对各个子系统全程监控,包括人为反馈,已达至全程自动化,而不是孤立的使用各个工具。这里有两个核心点,一个是自动化,一个是全程,具体体现在(一些老大难的地方):
基础设施全自动化
安全管理全自动化
数据库运维全自动化
测试全自动化
大规模监控、报警、自恢复
别扯了,DevOps 的核心就是自动化,而且最好能做到全程自动化
这 5 个 C 的支撑点就是自动化工具, CNCF Cloud Native Landscape 展现了大量容器相关的工具:
之前为一个微服务项目构建的 CI/CD pipeline,基本上挺完整的例子,准备以此打造一个满足中小型团队的现代化流水线原型:
虽然工具挺多的,但是 DevOps 的东西非常琐碎,一方面软件运行环境多样化和复杂化,新技术层出不穷,另一方面自动化工具的开发需要时间,众口难调,所以做好非常不容易:
Are you ready to go to prod on AWS? Use this checklist to find out: