了解CI/CD流水线
自动化流水线在CI/CD(持续集成/持续交付或持续部署)的实践中发挥着核心作用。本文将对什么是CI/CD流水线、如何构建CI/CD流水线进行讨论。
*持续集成:Continuous Integration
*持续交付:Continuous Delivery
*持续部署:Continuous Deployment
01.什么是CI/CD流水线?
CI/CD通过频繁对更新的代码进行检查与严格测试并及时处理反馈,从而在保证软件质量的前提下缩短交付所需时间。一般来说,可以通过不同的工具实现分阶段的CI/CD,从而实现整体的工作流,但该流程极易被不可避免的人工干预打断。因此,建立CI/CD流水线是很有必要的。
CI/CD流水线是指将开发直至部署的整体生态链的每一个步骤都通过流水线串联起来并代码化,使得开发流程能够通过自动化流水线的形式变得更为高效、快速:只需将本地代码发布到测试环境,就可根据流水线走向判断是否出现Bug并进行修正。
自动化的CI/CD流水线可以加快开发流程并加速各方反馈循环,确保每个步骤的执行始终如一,使软件自动、快速、持续的交付更加轻松。
02.如何构建CI/CD流水线
CI/CD流水线的最终形态取决于实际的产品类型及要求,但所有流水线使用的模式大致相同。
▲CI/CD流水线模式
在CI/CD流水线中,结果会被自动记录并反馈通知给开发人员,使其能够按需对工作流进行配置,以便快速重启因故障而停止的进程,并通过测试策略配置(只有前面的测试成功通过后,才会运行更复杂的测试)来更有效地利用服务器资源。完成自动化测试后,软件通常会被部署在一系列的暂存环境中,一些被用于最终的功能测试,另一些被用于培训和客户演示等。
让我们更详细地了解一下每个阶段的注意事项。
03.标志和分支
代码提交是CI/CD流水线的第一步,指将整个代码库放入版本控制系统(Version Control System,VCS)中,如Git、Mercurial或Perforce,开发团队的每个成员都应养成即刻或频繁提交自己代码的习惯。
即刻或频繁提交代码是CI/CD流水线中的重要实践步骤,但对于周期较长的大型开发项目来说,这其实是一柄双刃剑:虽然可以快速得到新增代码的反馈、减少影响进度的问题出现可能性,但由于流水线的末端是客户,所以必须采取手段以避免客户接触到半成品功能或共享工作状态。
功能标志和分支可以解决这一问题。开发人员可以设置功能标志以区分代码可见环境,并指定仅团队内部可见。功能分支指从主干中剥离出共享分支进行单独的功能开发,最终还是会触发CI/CD流水线,这既能满足开发需求,又可享受CI/CD带来的便利。
04.构建和测试
在完成代码提交并完成实例执行后,下一个阶段便是构建和测试。如果有现成的自动化单元测试,通常会在此之前进行静态分析检查。
具体使用的构建工具(如Ant、Maven)及构建步骤取决于项目所使用的语言及框架。为避免因缺少依赖项而出现经典的“只能在我的电脑上工作”的情况,可以使用专用的构建服务器,通过将生成的安装包、二进制文件和一些编译中间件部署到测试环境,并与流水线结合,即可进行更高级别的自动化测试:单元测试、集成测试、端到端测试甚至非功能测试都可同步运行。这不仅能够缩短流水线耗时,还能实现更快的反馈循环。
05.虚拟机
想要保证自动化测试的结果准确可靠,必须确保测试流程的稳定性与一致性。
理想情况下,测试环境的配置应尽可能接近实际运行环境,并在测试运行时重置相关环境,以避免环境不一致导致测试结果有误。长期以来,虚拟机 (Virtual Machine,VM) 一直是运行测试环境的常用选择,常见的虚拟机有VMware、VirtualBox等。虚拟机既能模拟出与当前操作系统不同的运行环境,又能避免破坏性指令导致的系统受损。有些虚拟机甚至还具备快照功能,可以快速回到破损前状态。
然而,构建新的虚拟机需要经历依赖项的配置过程,细节极易被遗漏,从而影响构建过程。只要将代码打包到容器即可避免疏漏产生。容器具备高可移植性,是应用程序层的抽象,指将代码和依赖项打包到一起,更易于部署到不同的环境中,有助于确保流水线的高效运行。
06.部署
当代码来到CI/CD流水线的部署步骤时,开发人员可以选择手动部署或自动部署。手动部署(持续交付)可以控制新特性或新功能的发布时间,部署过程涉及用户的停机时间。而使用完全自动化的持续部署,新增代码更改只需通过CI/CD流水线先前的所有阶段,便会直接被部署。这意味着,之前因开发人员数量、提交频率等因素受限的部署次数可以达到之前难以想象的每天数十次甚至上百次。
07.总结
CI/CD获得认可的根本原因在于其实现了测试阶段的左移,而构建CI/CD流水线则可更好地将其付诸实践。根据实际的产品和框架来构建合适的CI/CD工作流,并选择最能满足配置需求的CI/CD平台,对CI/CD工作流的实现大有助益。
SkyEye天目全数字实时仿真软件,通过虚拟化技术仿真芯片,可以在PC机上运行嵌入式目标程序,减少搭建硬件测试环境的成本,使测试阶段左移,从而缩短嵌入式软件交付的开发周期。其内置的命令行工具可以控制仿真的运行与停止,与CI/CD平台有着良好的可集成性。此外,SkyEye还提供丰富的自动化测试函数库,提供内存和全局变量的查看及修改等功能,并在自动化测试完成后生成自动化测试报告,是嵌入式领域CI/CD实践的最佳拍档。
参考链接
https://www.jetbrains.com/teamcity/ci-cd-guide/ci-cd-pipeline/
原文链接:https://mp.weixin.qq.com/s/x5VOBZF0plfJyyR5zpoWkw