CI / CD使开发团队能够更频繁,更可靠地交付软件更新。这种敏捷和DevOps的实践使公司能够灵活地满足业务目标和客户需求。
本文介绍了CI / CD背后的主要概念。继续阅读以了解自动发布管道如何使开发人员和公司受益。
什么是CI / CD?
CI / CD是一套使软件开发的构建,测试和部署阶段自动化的实践。自动化减少了交付时间表,并提高了整个开发生命周期的可靠性。
CI / CD中的CI代表 持续集成。CD是指 持续交付或持续部署,这取决于团队选择将代码更改推向生产环境的方式。
了解持续集成,交付和部署之间的区别,以了解每种实践如何优化开发流程中的阶段。
持续集成和持续交付是CI / CD中两个不同的过程,它们具有不同的目的:
● CI运行自动化的构建和测试步骤,以确保代码更改可靠地合并到中央存储库中。
● CD提供了一种快速无缝的方法来将代码交付给最终用户。
CI / CD的目标是帮助开发人员快速高效地发布软件。该团队不断将代码交付生产,并不断运行新功能和错误修复。
持续集成(CI)的解释
持续集成是将更新持续集成到代码库中的实践。CI提供了一致的自动化过程来构建,打包和测试新软件。
使用CI,开发人员可以将代码更改(无论是纠正性的还是创新性的)提交到共享存储库中。更新总是很小,因此易于跟踪。每个新的集成都会触发自动的构建和测试序列。此过程向开发人员提供快速反馈,并通知所有错误。
理想情况下,CI反馈循环的时间不应超过10分钟。构建和合并应尽可能频繁地进行,理想情况下每天应进行多次。
CI是大型项目的理想选择,因为许多开发人员可以独立处理复杂的应用程序。自动构建使团队可以避免合并冲突,错误和重复工作。
连续交付(CD)的解释
持续交付从持续集成结束的地方开始。CD使开发人员可以随时将常规软件更改(新功能,改进,错误修复)部署到不同的环境和最终用户。
进入CD进程的所有代码都必须先通过CI。
较小,更频繁的软件发行版具有较小的破坏性,并且在出现问题时更容易进行故障排除或回滚。该团队还具有快速交付新功能的能力,可以帮助公司更好地满足客户需求。
连续测试说明
连续测试是运行自动化测试的实践,而代码更改则通过CI和CD进行。单个CI / CD流程可以进行多种类型的测试:
● 单元测试(CI测试,可确保各个功能在构建过程中正确执行)
● 集成测试(检查组件和服务是否全部协同工作)
● 功能测试(确保功能按团队期望执行)
● 验收测试(性能,可伸缩性,压力,容量等)
● 静态代码分析(检查语法问题和漏洞)
● 自动化测试,例如API测试和安全性测试
并非每个CI / CD过程都具有所有这些测试,但是连续测试的目标始终是相同的。持续测试可以快速发现问题,并在错误导致生产中出现问题之前通知团队。
什么是CI / CD管道?
CI / CD管道是所有软件在其开发生命周期中遵循的可运行的逐步路径。典型的管道可构建代码,运行测试并安全地部署应用程序的新版本。
自动化管道为团队提供了以下好处:
● 快速部署新软件更新
● 可靠的构建和测试流程
● 更少的错误和错误最终投入生产
● 所有代码更改,测试和部署的透明日志
CI / CD管道不会改变开发人员创建软件的方式。在没有自动管道的情况下,工程师仍然需要手动执行相同的步骤。但是,手动方法的效率较低,因为团队必须更多地专注于重复性任务和修复错误,而不是编写软件。
CI / CD管线阶段
典型的CI / CD管道具有四个主要阶段:提交,构建,测试和部署。
提交阶段 | 源代码存储库在提交后触发管道。 | 集成将新功能和更新与代码库合并。 | 开发人员可以获得有关新代码质量的反馈。 | CI / CD工具运行单元测试和集成测试以检查潜在问题。 |
建立阶段 | 初始测试结束后,第二阶段开始。 | 如有必要,该过程将编译程序(对于Java,C / C ++和Go代码是典型的),然后管道将构建容器。 | 管道将代码和依赖项结合在一起,以创建软件的可运行实例。
| 如果此步骤失败,则说明代码(或其依赖项)存在问题,开发人员必须先解决该问题,然后再继续。 |
测试阶段 | 此阶段是一个安全网,可防止异常错误到达最终用户。 | 自动化测试可验证代码的正确性。 | 自动化测试会检查产品的行为。 | 该管道向开发人员提供反馈,并报告新代码更改的状态。 |
部署阶段 | 如果代码更改通过测试阶段,则管道将启动最终部署阶段。 | 该应用程序上线了。 | 除了为最终用户保留的生产环境外,通常还有多个部署环境。 | 实时监控可确保新功能按预期运行。 |
通常的做法是在每个阶段结束时设置通知。关键时刻的警报和报告使团队成员保持同步。
测试阶段往往会在不同管道之间发生最大的变化。根据项目规模,测试阶段可以持续数秒到数小时。一些大型项目甚至分多个阶段运行测试。在该设置中,测试通常并行运行以节省时间。
更复杂的管道除了四个核心步骤外,还具有其他步骤,例如数据同步,应用程序和库修补或归档信息资源。
CI / CD的好处
更快,更可靠的发布
CI / CD加快了开发过程,并允许产品快速到达用户手中。管道还可以减少构建代码时的风险,使开发人员可以专注于编码而不是修复错误。
可见度更高
CI / CD管道使团队可以详细分析构建并测试结果。更高的透明度揭示了开发过程中潜在的改进领域。开发人员可以轻松地跨阶段导航,发现效率低下并优化流程以提高生产率。
早期错误检测
各种类型的自动化测试可以在早期阶段识别出大多数错误问题。在自动测试和手动质量检查之间,CI / CD几乎没有余地让最后一刻出现错误。
快速反馈循环
快速交付更新会导致不断的用户反馈。通过A / B测试功能以及与用户一起试用产品的早期版本来利用用户的输入。
更快乐的开发和运营团队
CI / CD允许开发人员以更少的手动任务和更少的错误修复来推动代码更改。由于标准化的环境,交付过程中的测试,单独的环境变量以及自动回滚,因此运营团队享有稳定性。
CI / CD的主要原理
拥抱自动化
除非您将其提交给代码并使之按需可执行,否则手动过程是不可重复或可靠的。团队应该使尽可能多的流程自动化,包括测试,发布和配置更改。
优化您的测试策略
标准CI / CD设置可以并行运行不同的测试,以减少测试时间。但是,团队不应同时运行所有测试类型。例如,如果基本单元测试先前失败,则运行耗时的UI测试毫无意义。
将管道设置为具有多个阶段,在这些阶段中首先运行快速和基础测试(安全扫描,单元测试等)。一旦代码通过初始测试,管道就可以运行集成,API和UI测试。
使用一致的环境
如果每次运行都会修改环境,则CI / CD管道将不可靠。从相同的隔离环境启动每个工作流,并确保项目之间的一致性。
版本控制一切
版本控制使您可以跟踪代码更改,并在必要时恢复到较早的部署。配置,脚本,数据库和文档应通过版本控制来跟踪编辑并确保一致性。
在本地环境中运行回归测试
团队应在其本地环境中运行所有或部分回归测试。本地测试可确保开发人员仅在回归测试检查更改后才提交代码。这种做法有助于在代码到达其他开发人员之前解决问题。
使用基础架构作为代码(IaC)
高效的CI / CD依赖灵活且一致的基础架构部署。基础架构即代码(IaC)使开发人员能够为IT环境提供自动脚本。
IaC是DevOps的一项重要实践,它消除了手动基础架构设置和配置漂移的问题。
以小迭代开发
团队应该进行小的迭代。如果在功能分支中开发,则它们的寿命不应超过一天。如果更新需要更多的时间来开发,请使用功能标记,但要减少迭代次数。
始终搜索需要改进的地方
测量团队构建代码并投入生产所需的时间。重要的DevOps指标可帮助您了解团队是否可以快速为用户提供价值以及管道的哪些阶段需要优化。
您还应该监视每个部署的有效性。反馈循环有助于衡量诸如业务收入,用户转化率和参与时间之类的指标。使用这些统计信息来识别改进机会,并将其纳入您的渠道。
提高管道安全性
管道包含有价值的数据,并可以访问集中式存储库。采取必要的措施以确保CI / CD系统的最佳安全性。
根据您的风险级别,考虑使用高级身份和特权访问管理系统以及VPN进行访问。
最好的CI / CD工具
CI / CD工具可帮助DevOps团队创建管道并自动化集成,部署和测试阶段。这是您可以选择的最受欢迎的CI / CD工具的列表:
● Jenkins:自动化服务器,可以处理从简单CI到复杂CI / CD管道的任何事情。
● TeamCity: CI服务器,可帮助您使用可重用的设置和配置来构建和部署项目。
● Spinnaker:适用于多云环境的开源CD平台。
● GoCD:强调建模和可视化的CI / CD服务器。
● CircleCI:基于云的灵活CI / CD工具,非常适合小型项目。
● Travis CI:具有强大构建矩阵的基于Ruby的工具。
● Bamboo: CI服务器,支持多个顶级堆栈(Docker,AWS,Amazon S3,Git,CodeDeply,Mercurial)以及多达一百个远程构建代理。
大多数管道还包括各种严格不用于CI / CD的DevOps工具。CI / CD工作流中会定期显示用于容器运行时(Docker,rkt),容器编排(Kubernetes)和配置自动化(Ansible,Chef,Puppet等)的工具。
一种更快,更可靠的软件构建方式
加快软件交付速度的更强大的开发周期对于保持IT行业的竞争力至关重要。将您的团队转向CI / CD,以更快,更精确,更有效地开始开发软件。
下一条: 什么是数字签名及其好处?