在软件设计和开发中,提升速度的关键是被称为CI/CD的一系列操作原则和实践,因为其整合了持续集成(CI)和持续交付(CD)。CI/CD让软件开发团队能够更加频繁和可靠地交付代码更改,从而能够更快地满足业务及其客户的需求。
持续集成是一种编码哲学和实践,旨在推动开发团队进行少量更改,并经常性地将代码放入版本控制存储库进行检查。鉴于目前大多数应用程序都要求团队使用不同的平台和工具来开发代码,因此团队需要有一种方法来集成和验证其更改的结果。
持续集成的目的是创建一种统一的自动化方式来构建、打包和测试软件应用程序。集成过程中的一致性使得开发团队可以更为频繁地修改代码,从而强化协作和提升软件质量。
持续集成之后的持续交付可使应用程序被自动交付到指定的基础设施环境中。如今,除了在生产环境(包括测试环境)外,大多数开发团队还在多种其他环境中工作,持续交付可确保更改后的代码能够被自动推送到这些不同的环境中。
持续集成和持续交付需要连续测试,因为目标是向最终用户交付高质量的且安全的应用程序和代码。持续测试常常被作为自动化回归、性能等测试的一部分。
持续集成和持续交付(CI/CD)包含了相同的文化、操作原则以及一系列可加速软件开发过程的实践。其实现途径被称为CI/CD管道,被认为是DevOp团队的最佳实践之一。
行业专家称,由于希望改善内部或客户使用的软件应用程序的设计、开发和交付,越来越多的企业开始采用CI/CD。
市场研究机构Gartner的副总裁兼分析师Sean Kenefick说:“我们肯定会看到CI/CD使用量大大增加的情况。我个人也一直都在不断进行开发、测试和发布这方面的问题。”
Gartner在最近的一项名为《企业敏捷性》的调查报告中指出,越来越多的团队在进行敏捷开发,这些敏捷团队在持续集成、自动化验收测试和开发方面的执行率显然更高。
Kenefick说:“我认为CI是创建自动化管道的天然起点,这也正是团队的起始领域。CD中的困难是需要实现应用程序的自动化测试和重构,以便少量功能也可以单独被测试和发布。”
云咨询公司ServerCentral Turing Group的云解决方案高级主管Josh Quint说,他所在的公司参与的所有新软件项目都使用了一定程度的CI/CD。
这种趋势背后的核心驱动力是无服务器计算基础设施需要CI/CD集成,安全需求要求限制开发人员登录到生产基础设施的权限,以及敏捷方法需要更快的部署和测试周期。
CI/CD目前已经在许多参与开发的企业中成为了主流策略。卡内基梅隆大学软件工程学院(SEI)负责持续部署能力的技术总监Hasan Yasar说:“持续集成、全面自动化测试和持续交付之类的技术专长曾经一度只被一些紧跟潮流的初创公司所掌握,如今传统企业也已可以成功部署。”
以下是一些关于实施和维护CI / CD策略的建议。
尽早让主要利益相关者参与到CI/CD之中
Yasar说,让开发项目的所有利益相关者在项目之初就尽早参与到项目之中是一个好主意。例如,IT运营人员在架构决策中拥有发言权,因此开发人员可以在经过IT批准的基础设施上进行开发。
Yasar说:“全部决策都应该由所有的利益相关者做出,这样一来所有重大决策都可以交由专家完成。这种做法大大减少了整个项目生命周期中累积大量技术欠账。”
选择并部署正确的CI/CD系统
容器安全技术提供商StackRox的资深开发工程师Josh Komoroske说,市场上的CI/CD系统可以为企业带来具体价值,其使用情况可以反映出工程/产品企业的健康程度。
Komoroske负责StackRox的CI/CD流程,他说:“如果构建、测试和部署新功能变得很便捷,那么公司应变能力将会得到极大提高。如果要花上几周甚至几个月的时间才能在客户面前取得成功,那么客户就会选择其他能够做得更好的企业。”
在研究支持CI/CD流程的软件时,企业需要进行足够的研究。Komoroske说:“企业要有负责产品技术指导、寿命或健康状况的人来专门花费一些时间研究生态系统和可用的解决方案。请他们征求产品开发人员的意见。这些人将成为CI/CD系统的主要用户,因为他们每天都要处理它们。”
一旦企业选择了这样的系统,那么就需要避免弃用的问题。Komoroske说:“这些解决方案中的大多数都可以免费试用,并且能够与GitHub之类的平台进行集成。设置一个集成并使其开始构建某些东西,实现构建、测试或部署的自动化。当人们看到这些系统能够为其工作流程提供价值时,他们自然会将更多任务迁移到上面。”
将全面的自动化测试与手动批准相结合在一起
持续交付基本上由四个主要部分组成:
· 针对隔离进行重构
· 自动化测试
· 创建自动化流程管道
· 实现环境准备和配置的自动化
这四个组成部分相当笼统,可能需要许多单独的实践来实现它们。例如,为了实现测试自动化,团队应专注于以测试优先的方法,以加强自动化单元测试和功能测试的创建;创建自动回归、性能和安全性测试;进行自动化测试,以确保环境和业务流程平台被正确配置。
Kenefick说:“没有任何一项测试比这些测试更重要。与此同时还应该与其他质量实践相结合,例如使用静态分析工具,确保同行评审以及使用持续集成管道。”
Quint指出,要确保在部署过程中的关键时刻有手动批准的环节。他说:“手动批准环节可防止未经测试或未经批准的代码进入生产环境或更高的测试环境。这样还可使你能够控制代码到达关键环境的时间。”
跟踪指标以确保CI/CD成功
与大多数其他技术和流程部署一样,CI/CD也并非一劳永逸。Komoroske说:“我们要对构建/测试/部署周期的时间和脆弱性有深入的了解,这样可以确定优化和改进的领域与机会。尽管在速度方面快比慢要好,但是可靠性和正确性的重要性要高于速度。”
CI/CD流程和相关工具应被视为“力量倍增器”,其可缩短工程设计、测试和产品上市时间,从而为企业带来回报。企业可以通过采用CI/CD在开发和工程上实现可衡量的改进,通过衡量这些改进再根据时间对性能展开比较。
协作软件提供商Altimetrik的工程主管Farid Roshan说:“尽管我们都知道DevOps是在持续学习和改进的前提下建立起来的,但是大多数公司在采用CI/CD的早期就忽略了这一点。” 他指出,企业应该在CI/CD工具上处理数据清单,以帮助确定在整个开发过程中要衡量的关键绩效指标、绩效目标和分析。
了解采用CI/CD的业务驱动力并考虑未来需求
对于企业而言,重要的是要理解为什么需要采用CI/CD,以便企业的开发团队能够建立必要的能力,从而确保实现关键目标。
Roshan说:“如果工作恰当,CI/CD可以提高开发人员的生产力,优化交付框架,提高运营效率和敏捷转换。”
第一代CI/CD平台是作为编排服务开发的,它能够将整个产品生命周期中的流程连接起来,以提高生产效率。但是考虑到开发代码所需的时间,这样的平台可能不会产生良好的投资回报(ROI)。
Roshan表示:“现代CI/CD功能采用的是模块化架构,支持即插即用模式,并具有可配置的管道,能够支持各种交付框架。”适当地将管道作为代码进行部署可使工程团队开发高级功能,从而满足业务的当前需求。
尽管如此,预测未来需求也很重要。Roshan说:“企业要根据业务目标的未来发展开发CI/CD功能。在基于现有流程的孤岛中采用DevOps CI/CD会导致工具的部署出现分散化和缺乏标准化,这样一来即便实现了交付敏捷性,其所实现的ROI也是最低的。这种失误会在整个企业中产生连锁反应。”
全面实现自动化
Yasar说,作为CI/CD的一部分,企业应使能够实现自动化的东西都实现自动化,并对不能自动化的东西进行清楚的描述。他说:“自动化是DevOps的支柱之一,也是具有CI/CD功能的DevOps可以实现的主要优势之一。”
SEI推荐的敏捷开发方法是使用“基础设施即代码”(IaC)并对各种环境实现自动化。在基础设施即代码中,基础设施组件(例如网络、虚拟机和负载均衡器)的管理方法与DevOps团队管理源代码版本的方法相同。
Yasar说:“企业可以通过流程和实践来启用IaC,包括配置管理、环境供应等。目标是将所有自动化程序都视为代码,并存储在安全的版本控制系统中。”
理想情况下,基础设施代码与应用程序代码存储在同一存储库中,操作团队和其他利益相关者可以随时访问它。
作者:Bob Violino为Computerworld、CIO、CSO、InfoWorld和Network World等网站的特约撰稿人。
编译:陈琳华
原文网址:https://www.infoworld.com/article/3513499/how-to-get-started-with-cicd.html?nsdr=true