【51CTO.com原创稿件】2018年5月18-19日,由51CTO主办的全球软件与运维技术峰会在北京召开。此次峰会围绕人工智能、大数据、物联网、区块链等12大核心热点,汇聚海内外60位一线专家,是一场高端的技术盛宴,也是***IT技术人才学习和人脉拓展不容错过的平台。
在“DevOps转型之路”分会场,ThoughtWorks高级质量咨询师秦五一带来了《持续集成腐化与涅槃重生》的主题分享。会后,51CTO记者根据秦五一在WOT2018全球软件与运维技术峰会的演讲内容进行了整理。
持续集成就是每天都要集成
持续集成是1991年由IBM院士 Grady Booch在他的Booch方法中提出了Continuous Integration这个词之后,被极限编程XP采纳并广泛推广得来的。通常大家听到或提到的持续集成,也就是CI这个词,实际上指的是持续集成工具,例如CI Tools、Jenkins、 TeamCity、GoCD等,是相对狭义的概念。
ThoughtWorks***科学家Martin Fowler指出,持续集成是让团队成员尽早、尽可能频繁的集成大家手头的工作,至少每天要集成一次甚至更多,及早发现集成问题,让团队更快更好的开发出高质量的软件。
秦五一认为,持续集成的本质是一套软件开发的实践。虽然在多年的发展中持续集成的含义在不断演变,从早期仅是集成开发的代码,到目前将单元测试、集成测试甚至端到端测试都包含进来,但其最终目的是为了能够发现系统间的集成问题,加快软件的上线时间,减少开发的周期。因此,持续集成的核心理念是每天至少集成一次,尽早发现问题,尽快解决问题。
秦五一在演讲中提到,虽然团队中的每个人每天都要至少集成一次,且大部分都是通过自动化进行构建和测试,看起来很***。但是,即便如此,仍然会发现一些问题。
DevOps与CI/CD的不同之处
与持续集成相比,DevOps要晚很多,但近年来却非常火。秦五一表示,DevOps之所以非常火,是因为它从根本上指出了软件从需求到上线让团队痛苦的根源,形成了Dev、QA、Ops紧密结合在一起的团队文化。DevOps中包含的各项实践已经被国内外著名互联网科技巨头证实,能够有效提高企业对于高速变化市场的响应速度。例如,10年之前我们的软件需要几个月才能上线并为客户带来价值,如今不少企业已经可以轻松做到2周上线一次。在互联网企业当中,Web应用甚至可以做到每天随时上线。
秦五一表示,目前仍然有不少人心中的DevOps是狭义的DevOps工具链,比如持续集成工具(例如Jenkins)、测试工具、监控工具等,因为其与持续集成/持续交付目标相似,都是期望缩短从需求到真正交付的周期,从而实现更快且更可靠的软件发布。实际上,DevOps更加重视从人的角度来看软件交付,通常聚焦于组织文化转型来提高不同团队之间的协作效率,例如演讲中的团队文化改革,持续改进意识等。而CI/CD更加重视从技术的角度来看软件交付,通过技术手段来提升交付效率,例如自动化构建,测试,部署的流程。虽然目标一致,但是并不是一个同一个层面的概念。通常而言,我们认为CI/CD是实现DevOps的重要技术手段之一,但是实现了CI/CD并不意味着实现了DevOps,就像演讲中讲到的案例,虽然团队有完善的CI/CD工具链,但是最终并没有提升交付的速度与交付的质量。
构建持续集成的步骤与原则
秦五一认为,在DevOps的流程中,持续集成是非常重要的实践,它为DevOps提供了技术上的支持。因此,在DevOps工具链上,持续集成工具几乎是标配。
秦五一强调,一次正确的构建过程至少包含源码控制服务器、CI服务器和本地开发软件,且必须经过以下七个步骤:
1)将以集成的源码复制一份到本地;
2)修改产品代码和添加修改自动化测试;
3)本地启动一次自动化构建;
4)构建成功后,把别人的修改更新到我的工作拷贝中;
5)再重新做构建;
6)把修改提交到源码仓库;
7)在集成计算机上并基于主线的代码再做一次构建。
除了以上七个步骤之后,持续集成还必须遵守以下七项原则:
1)经常提交代码;
2)不要提交无法构建的代码;
3)立即修复无法集成的构建;
4)编写自动化测试;
5)必须通过所有测试和审查;
6)执行私有构建;
7)避免迁出无法构建的代码。
要经常学习持续集成工具背后的思想理念
如今,随便在网上搜一下DevOps工具,就会发现跟软件开发,部署相关的工具,几乎都在自己的名字后面标上了大大DevOps标签。甚至于,很多企业还专门组建了DevOps Team,并利用Jenkins、ansible、Dynatrace等等DevOps工具,维护CI、云、监控系统等。
秦五一表示,任何工具背后都有一套思想在支撑这个工具的价值,DevOps也不例外。如果不能经常学习工具背后的思想理念,线上监控与用户行为分析,来形成反馈回路,仍然无法用好持续集成工具。
ThoughtWorks的持续集成工具叫做GoCD,在github上已经开源,官网叫做持续交付工具。因为GoCD在开发之初就很好的考虑到了方便部署到线上环境的问题,完全从pipeline as code的角度设计,因此其具备两大特色:
一是复杂工作流的编排。例如在某著名通信设备商的项目上,客户有着非常复杂的工作流,大量并行任务成功后,再触发一个新的stage。在这个过程中,GoCD是完全可视的,给用户带来了非常友好的体验。
二是所有的Job都原生支持pipeline as code方式编写,为更好的实现高度自动化交付提供了很好的保障。
秦五一在演讲中分享到,虽然用了工具只是解决了当前一时的问题,而我们在软件交付中遇到的问题总是源源不断。因此,为了更好的利用好工具,就应该经常学习工具背后的思想理念,只有将工具背后的思想理念吃透、学精,才能真正的用好持续集成工具。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】