0%

什么是DevOps

DevOps是什么?在不同的组织会给出不同的解释,目前也没有一个通用的定义。总结一下,如下。

DevOps 是一系列文化理念实践工具的集合。其目的是:

  1. 提高组织高速的可靠的交付能力。
  2. 提升组织内部沟通和协作。敏捷软件开发实践打破了BA(需求分析)、QA(测试)和Dev(开发)之间的“墙”,使得三者之间信息互通,对于同一个需求理解是一致的。DevOps则是打破了Dev(开发)和Ops之间的“墙”,使得软件开发、部署、维护之间形成一条流动的通道。

文化理念

DevOps文化的核心目的打破团队(Dev和Ops)之间的“墙”,提高团队之间的透明度、沟通和协作。DevOps的核心理念可以理解为如下四点:

  1. 共同承担责任(shared responsibilities)
  2. 反馈(Feedback)
  3. 自动化(Automation)
  4. 质量内建(Build quality in)

共同承担责任(shared responsibilities)

狭义上,Dev和Ops应当共同对产品的成败负责。在敏捷软件开发的实践前提下,团队中的所有角色(包括但不限于BA、Dev、QA、Ops)共同对产品的成败负责。在整个产品的生命周期内,团队应当共同承担维护系统的责任,确保可以更快可靠地交付产品。

反馈(Feedback)

反馈对于DevOps是非常重要的。通过反馈,我们可以不断地改进团队不同角色之间的协同工作方式以及系统。

反馈不仅仅包括团队角色之间的反馈,还应该包含系统与团队的反馈。比如:

  1. pipeline状态,应当及时地通知到团队,推动团队下一步的工作。
  2. 生产事故,监控到生产事故应当及时反馈给团队。当API Gateway短时间内出现大量5xx错误,我们应当及时处理,提高用户的满意度。
  3. 根据生产监控的各种指标来优化系统。

在DevOps的实践过程中,我们要将反馈这个核心理念铭记于心。在增强反馈的过程中,也要注意不要过度,应当避免团队成员陷入过多工具和消息中。

自动化(Automation)

自动化是整个DevOps的基石,有助于团队协作。自动化测试、自动化部署等可以让团队各种关注于业务本身,减少人为错误的机会。自动化可以让团队更快、更可靠地构建、测试、发布产品。

在实践DevOps的过程中,我们应当尽可能地减少手动操作。实现自动化的过程中,我们需要不同角色之间的协作和沟通。建议有一套统一的自动化脚本来增强团队不同角色之间的协作,建立统一的上下文。

质量内建(Build quality in)

质在开发过程中,要求软件生命周期之间参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一环节前已经有了基础的质量保证。从而减少因为质量问题导致的返工,避免浪费大量人力成本。

为更快更可靠地交付应用和服务,在源头上对质量进行把控是必不可少的。

实践

DevOps的常见实践如下:

  1. CI/CD: 持续集成、持续交付或持续部署。CI/CD是整个DevOps的基础,pipeline就是CI/CD的具象化。
  2. 持续测试(Continuous testing)
  3. 持续监控(Continuous Monitoring)
  4. 基础设施既代码(Infrastructure as Code,IaC)

DevOps实践的具体解释,不在此文中赘述,为有另外的文章单独解释。

常见工具

协作工具:Jira, Mural, Slack, Microsoft Teams等

版本控制工具:Github, Gitlab, Bitbucket等

持续集成工具:Jenkins, TeamCity, Travis CI等

部署工具:Terraform, AWS CloudFormation, Ansible, Helm等

监控工具:Zabbix, AWS CloudWatch等

DevOps的工具极其种类非常多,上述不过是其一小部分。

参考

  1. DevOps
  2. AWS-What is DevOps
  3. Atlassian - DevOps
  4. Martin Fowler- DevOps Culture