本文重点介绍了人们在实施过程中面临的十大CI/CD挑战及其潜在解决方案。
让我们从基础开始吧!
什么是CI / CD管道?
传统上,该软件是使用瀑布方法开发的,但是最近,敏捷和精益控制了软件开发领域。今天,DevOps实践在启用这种敏捷软件开发方法中起着至关重要的作用。要更深入地研究这些方法,请参考我们的敏捷与瀑布方法的比较。
持续集成和持续交付(即CI / CD管道工具,技术和阶段)是构建DevOps文化的基础。这些工具和技术消除了手动集成不同依赖项或手动测试代码库的安全性和设计漏洞的需要。CI / CD方法可自动执行从集成到交付,测试和部署的整个操作过程。
什么是持续集成?
持续集成(CI)是CI / CD流程阶段的开始步骤。
这意味着什么?
迭代开发软件时,开发团队经常编码,构建,测试,发布和部署功能。CI通过设置脚本主导的机制来自动检测共享代码存储库中的更改,从而实现此过程的自动化。可以使用轮询,定期监视或使用类似Webhooks的推出机制来检测更改。
一旦检测到更改,您的CI解决方案就会自动提取更新代码的副本,进行构建,执行单元测试,并执行依赖项兼容性检查以及早发现代码漏洞。可以使用开放源代码实施CIJenkins之类的工具或Gitlab CI,Circle CI或Codeship之类的持续集成SaaS服务。
什么是持续交付?
CI / CD管道的持续交付(CD)阶段通过将自动化测试的范围扩展到单元测试之外,从而增加了持续集成(CI)的优势。
测试不是持续集成的固有部分。尽管如此,DevOps团队还是更喜欢在集成级别进行单元测试,以识别代码错误并使应用程序更强大。CD除了单元测试外,还包含自动负载测试,API测试,集成测试等。
持续交付的动力在于,一旦超过持续集成(CI),就会触发用于构建,测试和暂存代码更新的自动化流程,从而使整个软件发布周期自动化。CI / CD管道的直接好处是,可以更快地将经过验证的,安全的,健壮的,可部署的应用程序推向登台或预生产环境。
什么是持续部署?
持续部署(CD)进一步扩大了持续集成和持续交付的范围。持续部署是CI / CD流水线过程的最后阶段。连续部署是一种测试驱动的方法,可以根据不同的参数验证应用程序并自动进行部署。
健壮的连续部署实施方案结合了连续监视和警报功能,以在出现任何问题时自动过渡回以前的部署版本。还存在一些持续部署方面的挑战,需要仔细解决。我们将在下一部分稍后讨论这些问题。
什么是连续测试?
无论是集成,交付还是部署,测试都是所有CI / CD流程阶段不可或缺的一部分。连续测试是一种使应用程序测试过程自动化并将其嵌入CI / CD管道中的方法,以实现更大的敏捷性。
可以并且应该在不同的CI / CD流程阶段实施不同类型的自动化测试,从而更轻松地克服CI / CD的挑战。例如,单元测试更适合CI / CD管道的连续集成阶段。此阶段的单元测试通常涉及独立于任何其他代码的测试和验证代码。集成测试,功能测试和验收测试可能是CI / CD管道的连续交付和连续部署阶段的一部分。
CI / CD常见的挑战(包括持续部署挑战)
坚持使用CI / CD进行敏捷软件开发的方法并非总是轻而易举。详细了解了CI / CD管道的术语和总体流程之后,现在让我们熟悉一些常见的CI / CD挑战。
(1) 有限的环境挑战
软件开发团队,尤其是测试人员,通常只能获得有限的基础结构资源来测试其代码。在这种情况下,团队倾向于建立共享的测试环境。
使用CI / CD管道时,共享测试环境并不总是很顺畅。与之相关的许多持续部署挑战。几个开发人员和团队(如果项目太大)正在同时将代码提交到同一CI环境。有时,一些并行测试正在进行中。这可能会导致环境配置问题,因为不同的测试可能需要不同的环境配置。
实际上,共享测试环境的不良配置通常会导致测试失败,进而导致部署失败。这削弱了CI / CD方法的目的-加快迭代开发速度。
解决方案可以是云中的按需或按需专用测试环境。LambdaTest的Selenium自动化测试功能可以减轻面临CI / CD挑战(例如有限的测试环境或效率低下的测试)的测试团队的压力。
(2) 基于所有权的CI / CD挑战
通常,在DevOps发布周期的后期会发现错误和代码错误。有时,CI / CD管道甚至会由于这些错误而失败或崩溃。失败的管道是正常的-如果所有代码都不是可集成的,并且代码没有安全地执行其预期的功能,它们就会中断。
但是,不良的CI / CD管道实施通常会使立即确定故障原因变得繁琐。反过来,这使得重定向到相关团队修复代码错误变得更加困难。
对此CI / CD挑战的快速解决方案是,确保使用易于识别的日志记录功能编写代码和测试用例。在CI / CD管道的每个阶段,将所有权角色分配给个人或团队。基于故障日志分析,这些人将负责找出故障原因,识别并重定向负责解决持续部署挑战的团队。
(3) 为大型项目实施多个CI / CD管道
在大型企业中,几个大型项目正在并行开发和维护中,而多个开发团队则逐步将更改提交给相应的代码存储库。因此,在提交,编译,构建,测试,交付,部署周期中引入问题时,通常很难对其进行分析并找出其根本原因。
对于企业级组织,这是CI / CD的主要挑战之一。作为解决方案,团队可以在整个组织中拥有标准的CI / CD管道模板,并将复杂的大型项目分解为较小的模块。这样可以进行有意义的报告,并加快反馈周期,以改进代码并解决问题。
(4) 集成安全工具
在451个研究的一项研究中,超过60%的受访者表示,缺乏有效的自动化集成安全工具是有效实施CI / CD工具的一大挑战。
> Source
诸如静态应用程序安全测试(SAST),软件组成分析测试(SCA)和动态应用程序安全测试(DAST)之类的安全测试可根据需要部署在CI / CD管道的不同阶段。
SAST和SCA负责确保CI阶段的安全性测试,并负责CI / CD管道的提交和构建阶段的提交前检查和增量测试。DAST和IAST负责模糊测试,笔测试,强化等。
451研究强调的安全挑战是安全实施效率低下,有时会误导信息。通过正确地确定哪种安全测试工具最适合您其余的CI / CD工具,可以解决这些问题。必须将工具配置为自动更新缺陷跟踪系统,如果它识别出关键的安全威胁,则中断构建,并更新指标监视仪表板。这将使负责任的团队能够对发现的威胁立即采取行动,并克服主要的持续部署挑战。
(5) 基于协调的CI / CD挑战
CI和CD通常由团队分别实施,并且工具和过程需要与增量反馈主导的过程兼容。
除了持续迭代开发中的工具外,业务团队和产品团队之间的沟通不畅还导致发布和部署周期的延迟。CI / CD管道的最大好处之一是加快了交付和部署周期,但是缺乏协调使用例失败。在大型项目中,公司在数据库和服务器上都有重要的数据和软件。
当构建或测试用例失败时,出于明显的安全原因,负责处理失败构建的团队将无法访问这些关键资源。但是,可以通过团队之间的适当协调和自动化流程来解决这些挑战。
(6) 成本和资源管理
在整个组织内实施CI / CD在业务敏捷性,产品健壮性,安全性和功能发布周期方面具有长期利益,但同时也带来相关成本。资源,工具和基础架构要求大大增加了项目成本。
此外,每个人都根据自己的便利选择工具和其他资源。此外,采用CI / CD并不总是意味着更好的敏捷性。如果开发人员和主管人员无法获得适当的指导和培训,它可能会减慢流程并阻碍开发人员的生产力。
(7) 在正在进行的项目和工作流程中实施CI / CD
敏捷,采用和实施CI / CD管道到现有的工作流程和项目也不是一件容易的事。特别是在大规模的旧项目和工作流程中,对任何部分的更改可能都需要在其他几个流程和工作流程中进行更改。
这不可避免地需要格外谨慎,深入的知识以及对CI / CD工具的丰富经验。就成本,延迟和质量而言,赌注很高。
公司和团队应该公正地评估他们是否真的需要CI / CD,以及是否会增加他们的流程和开发方法。如果答案是肯定的,他们还应该根据成本和基础设施资源评估可行性。
(8) 培训,文化和其他内部阻力
开发人员通常不喜欢执行操作任务,但是使用CI / CD方法时,开发人员通常需要进行干预并参与配置VM和其他环境。
由于CI / CD工具在市场上相对较新,因此没有足够的专业知识和培训,这又是一个挑战,因为CI / CD实施不当会增加成本和风险。
而且,公司面临开发人员,团队负责人和其他项目利益相关者的内部抵制。对他们来说,实施CI / CD是一种新方法,将他们推开了他们的舒适区。
(9) CI / CD管道的低效实施
缺乏专业知识,培训不足以及其他一些挑战可能会导致CI / CD管道的实施效率低下。人们看到团队会自动执行错误的流程,编写有缺陷的测试用例,以错误的方式配置CI,甚至将持续交付方法与持续部署概念混淆。
例如,不必每次成功交付都触发自动部署,因为一天可能有几次提交。您不能在同一天甚至几周内为用户发布10个产品版本。这是另一个重大的持续部署挑战,需要尽早解决。交付阶段应始终处于准备就绪状态。部署阶段更多是业务决策。
(10) 持续测试和优化
写得不好的单元测试和验收测试可能是反馈主导的迭代软件开发的瓶颈。但是,更多的是测试团队的内部问题,而不是CI / CD的挑战。但是,仅专注于功能测试对于CI / CD管道来说是一个糟糕的连续测试实践。还应针对非功能性要求(例如性能测量和可靠性测试)编写测试用例。
在银行和医疗保健应用中,性能功能可能非常关键。为性能测试和可靠性测试编写测试用例并不像测试功能需求那样简单。这些还需要大型测试环境来测试应用程序的可伸缩性,可靠性和各种测试失败方案。
LambdaTest在您的管道中的集成将如何解决CI / CD方面的挑战?
LambdaTest是跨浏览器兼容性测试工具。它使您能够在所有主要浏览器上以交互方式测试您的Web和移动应用程序,以适用于不同的移动操作系统(如Android,iOS)以及桌面环境(如Mac,Windows等)。
LambdaTest为您提供了开箱即用的自动化测试解决方案,可以轻松地与一系列应用程序集成,从错误记录到项目管理工具和仪表板。另外,如前所述,LambdaTest与您选择的CI工具集成在一起,使自动化测试为您带来无缝的体验。
克服最常见的CI / CD挑战的最佳方法之一是使用基于云的自动化测试平台,该平台可轻松与CI / CD工具集成。例如,LambdaTest在云中为您提供了一套自动化测试服务,以使用云Selenium Grid在2000多种浏览器和设备中测试您的软件。
就这样!
总而言之,CI / CD的大多数挑战都与不良做法和不良实施有关。正确评估CI / CD要求并选择正确的工具,正确配置CI / CD管道阶段,并正确地培训相关专业人员,将会成功实施CI / CD。因此,您的组织可以将更多的精力放在发布功能上,而不是控制操作上。
利用自动化的力量-利用自动化测试。
原文链接:
https://medium.com/better-programming/the-top-10-ci-cd-pipeline-implementation-challenges-and-solutions-a36abd28bfe5