17

DevOps实施的五个关键点 - ThoughtWorks洞见

 3 years ago
source link: https://insights.thoughtworks.cn/implement-devops/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

DevOps正在被越来越多的企业认可和采用,它的原则和实践不但适用于创业公司,对大型软件企业或软件开发部门也同样适用,至少在当前阶段有广泛的适用性。面对一个IT创业公司或是传统的软件开发企业,如何开展DevOps转型工作呢?

在实施DevOps之前,必须明确目标和思路、确定要解决的问题。一般而言,实施DevOps是为了加快研发流程,实现企业价值,增加企业在行业中的竞争力。DevOps解决的是一整套的流程和协作的问题,要以全局性的视角和系统化的思维来审视开发和运维过程中的问题,加快研发流程、打造高质量的、可靠的、安全的产品,从而实现价值的快速流动和交付。在具体的实施过程中,大体的流程和思路如下:

一、分析现状,寻找切入点

低效的工作团队,必然有其根本的冲突或矛盾,致使团队无法完成既定目标,不能如期的交付产品或交付的产品无法满足可用性和稳定性的要求。从具体的工作中,以下原因会导致团队的低效:

  • 技术债务:长期以来,开发团队只注重新功能的开发,不注意重构和流程改进,不注重新技术、新方法的运用。
  • 团队协作和流程:传统的方式,开发团队和运维团队的工作是分离的。他们有不同考核和业务目标;工作过程中的协作方式基本依靠流程或电子流。
  • 系统架构不合理:耦合度高,导致开发过程中的问题和领域不能被合理的分割,部署和运维过程也可能会导致整个系统崩溃。
  • 研发方法和流程不科学:研发过程不够敏捷,或者敏捷过程中的重要实践并未正确的执行。
  • 人员技能偏低:人员技能不足,无法支撑项目的架构设计、疑难技术的攻坚,无法满足业务的运维要求。
  • 团队文化:没有形成良好的学习文化,在面对问题时指责、惩罚是重要手段,无法让所有成员坦诚的分析问题,无法从失败中学习技术和经验。

综上各种因素,我觉得人员技能和团队文化是需慢慢培养和影响的,架构是需要根据需求和目标逐步演进和调整的。唯有研发流程和技术债务的问题需要迫切解决,否则团队将会继续走向恶性循环。所以,实施DevOps的切入点应该是分析研发流程中的瓶颈和解决技术债务问题。换句话说,应该关注敏捷过程以及持续交付的相关实践在执行过程中存在哪些问题。

二、工作方法的导入

确定了目标和问题,就需要科学的方法来改进问题。三步工作法是DevOps实施的基础原则。实施过程中的核心关注点是促使价值流从需求到交付的快速流动、构建持续快速的反馈机制、建立高可信度和持续学习的企业文化。让价值快速流动、让反馈快速呈现才是打破团队恶性循环的法宝。

实施DevOps就是为了能够提升发布速度,但速度的提升和质量的改进是循序渐进的。无论是三步工作法中哪一步,都不是一蹴而就的。比如,要实现价值的快速流动,就必须在开发团队中制定实施计划并最终得到落实。为了能够持续改进,可以按照PDCA原则,不断的执行此过程。

  • P (计划 PLAN):制定解决问题的计划,如:构建自动化流水线,加快持续集成速度
  • D (实施 DO) :实施行动计划:如:在指定的时间内完成流水线相关技术的学习、部署基本流水线
  • C (检查 CHECK):评估结果,如:执行过程中哪些环节是瓶颈,能否实现自动化或加快执行速度
  • A (改进 ACT):执行改进,如:完善和优化流水线,让流水线支持一键发布到生产环境。

三、工具的导入

工具的引入是为了促使快速的价值流动或是实现快速的反馈。我们引入看板工具,是为了团队工作的可见以及对制品数量的控制;引入自动化测试是为了控制质量问题尽可能少的向后流动、也为了能够及时得到反馈,快速解决问题;在环境中使用虚拟化及监控工具,是为了我们能及时得到服务器及应用的相关问题,从而避免灾难性的事件发生。除了应用开发中所使用的技术和工具外,实施DevOps过程中还需要以下各种工具和技能的融合:

  • 流水线工具:Jenkins、GOCD
  • 测试工具:单元测试工具(Junit)、性能测试工具(K6)
  • 运维工具:虚拟化(Docker)、集群化(swarm、k8s)、日志与监控(ELK/EFK)

四、人员技能的培养

DevOps的实施,对人员技能也提出更高的要求,它鼓励每个工程师成为全才。研发人员不仅仅只关注于自身的业务代码,还要关注到环境和运维。基础设施已成为了代码的一部分,所以每个开发人员要明白自己开发的应用代码流向了哪里,在每个环境中都发生了什么变化,还要熟悉虚拟化技术、运维技术,要能够接受到各种环境的反馈,从而快速解决各种问题。不仅如此,开发人员也承担了很多QA的责任,要能够运用TDD,熟练使用自动化测试技术。从组织层面来讲,应该努力在以下方面为团队能力培养提供机会。

  • 将学习融入到日常工作:在团队中组织事后分析会议、组织团队进行事故演练等。
  • 局部经验转化为全局改进:将局部的那些可重用的、自动化的工作整合为标准化流程;将个人的经验分享给整个团队。
  • 预留学习和改进时间:不能把所有的时间都用于功能开发,可以预留20%的时间用于偿还技术债务,改进技术方案或架构,组织和鼓励团队人员进行经验分享。

五、团队文化的影响

良好的团队文化,对于实现业务目标和价值至关重要。学习型的团队,高度互信的团队,才可以更好的解决问题,创造更多的价值。在DevOps的实施过程中,要给团队营造一种安全的环境,让每个人都能表达自己的想法和见解。遇到问题,不指责。让团队成员能够相互鼓励、增加信任,共同承担责任。

传统的开发方式并未将开发、测试、运维融为一体。甚至有些团队为了快速实现功能,没有自动化测试、没有评审、没有运维人员的通力合作,看似产品快速交付,但交付的产品却十分脆弱,欠下的技术债务越来越多,为后续产品演进埋下了巨大的隐患。

DevOps实现的最终目标是快速交付,整合了精益思想、敏捷思想、学习型组织,它是一套科学的思想和实践方法,实施DevOps才是打破恶性循环,实现价值交付的最好解决方案。


参考资料:

  • 《DevOps实践指南》
  • 《持续交付》

更多精彩洞见,请关注微信公众号:ThoughtWorks洞见


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK