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 就是组装和打包最终软件产品。
Continuous Delivery 和 Continuous Deployment 类似,区别在于 Deployment 是自动部署到生产环境,Delivery 在 Deployment 之前需要经过人为的确认/批准,所以技术上讲两者是一样的。
Continuous Testing 不是一个单独的 process,它总是包含在 CI/CD 中。
别扯了,DevOps 的核心就是自动化,而且最好能做到全程自动化
这 5 个 C 的支撑点就是自动化工具,之前为一个微服务项目构建的 CI/CD pipeline,基本上挺完整的:
准备以此打造一个满足中小型团队的现代化流水线原型。
CNCF Cloud Native Landscape 展现了大量容器相关的工具:
CI/CD 做得好挺难的,因为一方面软件运行环境多样化和复杂化,新技术层出不穷,另一方面自动化工具的开发需要时间,而且众口难调。
开发周期比较关注的是 CI/CD,DevOps 包含了更多的东西 - infra,security,data,monitoring,service management 等等,而我理解最好的 DevOps 则是自动化能够做到覆盖软件生命的全周期,并且全程融合(支持上下文承接),全程反馈如同分布式监控可对各个子系统全程监控,包括人为反馈),已达至全程自动化,而不是孤立的使用各个工具。这里有两个核心点,一个是自动化,一个是全程,具体体现在(一些老大难的地方):
基础设施全自动化
安全管理全自动化
数据库运维全自动化
测试全自动化
大规模监控、报警、自恢复
DevOps 的东西听起来简单,但做起来不容易:
