什么是 CI/CD 管道?
在日益激烈的应用程序市场竞争中,企业面临着应对软件更新、漏洞修复和创新发展的压力。软件和运营团队必须紧密协作,在不影响业务运营的前提下处理用户反馈、解决问题和部署更新。传统的软件开发周期,尤其是基于顺序式瀑布模型的开发周期,难以跟上现代软件交付的步伐。随着软件开发生命周期日益紧凑,开发团队转向 CI/CD,以高效创建精准、高质量且更安全的代码。
CI/CD 代表持续集成和持续交付。某些情况下,CD 也可表示持续部署。
- 持续集成使多名开发人员能够同时处理和合并代码,而不会影响代码稳定性。
- 持续交付是一种自动化工作流,用于测试、验证和准备软件,以在人工批准后发布软件。
- 持续部署与持续交付类似,区别在于前者的审批流程通过预先配置的规则自动进行。
CI/CD 可共同实施为一条自动化管道,使先前所有需要手动完成的流程实现自动化。要深入理解 CI/CD 管道的工作原理,请参阅下图。
CI/CD 管道的每个阶段都包含软件开发流程中的特定活动。这些阶段采用自动化测试,在软件构建向前推进之前,对代码进行质量、漏洞及其他技术问题的全面审查。这样,开发团队可以及早发现并修复代码问题,从而为企业节省大量时间、资源和成本。
设置 CI/CD 管道看似简单。然而,企业在实施 CI/CD 工作流时经常面临挑战,尤其是在本地设置中。例如,当企业需要管理大量应用程序、工具和团队成员时,就会遇到基础设施瓶颈。如果问题得不到解决,开发人员将花费更多时间修复管道问题,而非专注于代码本身。
将 CI/CD 工作流迁移至 AWS 云,使团队能够扩展现代软件开发工作负载,更高效地传达变更信息,并更有效地管理资源。例如,Duolingo 已将其 CI/CD 管道迁移至 AWS EC2 Mac,且已实施高级自动扩展策略。因此,他们将构建时间从 50 分钟缩短至仅 16 分钟。
如何建立 CI/CD 管道?
AWS 借助托管和自动化服务,使 CI/CD 的实施更轻松、更自动化且更安全。您的团队无需手动配置开发工具、服务器和资源,而是可以重点关注高价值活动,例如响应用户请求和制定软件发布策略。
首先,您可以使用 AWS CloudFormation 自动部署云资源,这是 DevOps 团队建立 CI/CD 管道所必需的步骤。首先描述模板中需要的资源,或者直接使用预构建的模板。CloudFormation 随后会预置资源,这些资源共同构成支持 CI/CD 的基础环境。然后,您可以按以下方式在 AWS 云中实现 CI/CD 管道的各个阶段。
源
源阶段追踪开发人员所做的版本更改。开发人员将原始代码的版本从共享的中央存储库复制到本地机器。随后,对修改后的代码进行编辑、编译、测试,并将其与存储库合并。
以下是您的团队如何使用 AWS 工具进行和管理代码变更。
步骤 1 - 使用 IDE 编写代码
开发人员可以使用 AWS Cloud9(一种支持常用编程语言的基于云的集成式开发环境(IDE))创建新代码或编辑现有代码。借助 Cloud9,只要能访问互联网,即可在 Web 浏览器上编写、运行和调试源代码。或者,如果您安装第三方 IDE,可下载软件开发工具包(SDK),以支持使用多种语言编写代码,包括 Java、Python 和 JavaScript。借助这些 SDK,您可以在首选编程环境中通过应用程序编程接口(API)访问 AWS 资源和库。
步骤 2 - 将代码提交至中央存储库
开发人员利用第三方工具(如 GitHub)创建私有代码存储库、管理拉取请求以及合并变更。其充当版本控制系统,可追踪其他开发人员提交的变更,并在需要时回退至先前可正常运行的源代码。
构建和测试
在构建阶段,会将存储在中央存储库中的代码发送到编译服务器。随后,编译服务器将源代码及其依赖项转换为名为“构件”的软件文件,开发人员可在后续阶段运行该文件。例如,如果您正在构建 Java 程序,您将获得 JAR 或 WAR 文件。在此阶段可执行若干初步测试,包括单元测试和静态代码分析。
- 单元测试确保单个软件功能产生正确的结果。
- 静态代码分析可检查源代码,以识别缺陷、安全漏洞以及是否符合编码标准。
如果代码在任何测试中失败,开发人员会将其回滚到先前状态并解决问题。
按照惯例,软件团队需要设置自己的编译服务器,以打包应用程序。此外,还需要手动编写测试脚本、验证脚本,并通过反复迭代监控结果。现在,可使用 AWS CodeBuild 加速 CI/CD 构建工作流。这让您的团队能够在进行更改时自动构建和测试软件。它会从指定的存储库中定位源代码,并运行您配置的构建脚本。
AWS CodeBuild 会自动扩展其计算容量,以匹配您的构建工作负载。这样,您就不必等待之前的构建完成才能开始新的构建。软件团队能够及早发现代码问题,并在问题变得复杂之前予以解决。
例如,如果您正在构建 Node.js 项目,可将 Jasmine 或 Jest 测试框架与 AWS CodeBuild 集成。借助这些框架,您可以轻松编写测试用例、指定预期结果,并在构建过程中进行验证。
测试阶段紧接在构建阶段之后。该设计旨在使应用程序接受更严格的测试,从而帮助软件团队提升代码质量、性能、安全性及其他关键方面。借助 CI/CD 管道,测试得以自动化进行并扩展至多个领域。
- 集成测试确保应用程序使用的所有服务和第三方组件能够正确地进行交互。
- 功能测试从最终用户的角度对应用程序进行全面评测。
- 安全测试旨在检测应用程序中可能存在的安全风险和漏洞。
- 性能测试确保应用程序在极端或意外条件下(例如突发流量激增)仍能保持响应和正常运行。
同样,应用程序必须通过所有指定的测试,才能进入下一阶段。
暂存
暂存阶段,您可以在将应用程序发布给最终用户之前进行最终检查。在此阶段,软件团队将应用程序部署在模拟真实世界实施环境的测试环境中。通常,该团队会使用模拟数据并召集一组最终用户进行应用测试,旨在发布前发现尚未被察觉的问题。
例如,您已更新应用程序,且希望在与用户交互时核查其表现。在暂存环境中部署该应用程序,有助于您评测其性能表现,同时不会影响业务运营。在满足所有测试条件后,软件团队将应用程序部署到生产环境中,从而使终端用户能够访问该应用程序。
跨环境部署可能充满挑战,尤其是团队采用手动部署的情况下。AWS CodeDeploy 可简化应用程序部署工作。其可自动将应用程序部署到各种环境。您可以查看部署活动、跟踪变更,并在需要时回滚到先前版本。其还可弥合暂存阶段和生产阶段之间的差距。例如,您可以将用于暂存环境的精确部署说明直接应用于生产环境。
生产
生产是真实用户访问应用程序的实时环境。在修改、测试和验证变更后,软件团队会在生产环境中发布更新后的应用程序。虽然此举标志着 CI/CD 管道的结束,但确保应用程序满足性能、安全和业务需求方面的工作仍在持续。因此,当应用程序在生产环境中运行时,您持续监控其运行状况。
Amazon CloudWatch 是一项服务,可让开发和运营团队查看其在 AWS、本地或其他云环境中部署的应用程序。它自动收集并可视化运营数据,助您深入了解应用程序在实际运行环境中的表现。此外,您还可以设置警报,以便在需要团队及时处理的事件发生时收到通知。
如何实现 CI/CD 管道的自动化?
简化不同提供商的 CI/CD 工具可能颇具挑战性,尤其当涉及大量手动设置时。然而,借助 AWS CodePipeline,您可以在保持灵活性的同时,实现整个代码发布流程的自动化、扩展和加速。
AWS CodePipeline 让您可以使用图形用户界面构建 CI/CD 工作流。您可以轻松地将 AWS 服务集成到管道中,或连接到您正在使用的现有工具和资源。例如,如果要将 Jenkins 用作编译服务器,可将其与 AWS CodePipeline 集成。
下面,我们将概述实现该目标的步骤。
- 安装 Jenkins 以及适用于 Jenkins 的 AWS CodePipeline 插件。
- 然后,使用适用于 Jenkins 的AWS Identity and Access Management(IAM)设置访问权限。这使得 Jenkins 能够使用授权凭证与 AWS CodePipeline 进行交互。
- 登录 AWS CodePipeline 控制台,并创建自定义管道。
- 将管道连接到共享源代码存储库,例如 GitHub。
- 然后,添加构建阶段,并选择 Jenkins 作为编译服务器。
- 添加任何必要的测试阶段,包括所需的测试操作和构建触发器。
- 下一步,将部署阶段连接到 AWS CodeDeploy 或其他部署服务。
AWS 如何支持您的 CI/CD 管道需求?
借助 CI/CD 管道,企业可以加快生产、测试和发布应用程序更新,同时不会影响软件质量和安全性。软件开发团队通过自动化 CI/CD 工具修改代码、合并更改、自动测试、安排部署等。然而,部分团队因基础设施、资源及流程限制,在扩展 CI/CD 工作流时面临挑战。
AWS 提供一套基于云的解决方案,用于创建、简化和扩展您的 CI/CD 管道。
- AWS CloudFormation 预置运行 CI/CD 工具的资源。
- AWS Cloud9 让开发人员可以通过浏览器编写、运行和调试代码。
- AWS CodeBuild 让您可以编译、测试和打包应用程序,而无需管理自己的编译服务器。
- AWS CodeDeploy 可以在任何环境上自动部署,包括本地和 AWS 实例。
- AWS CodePipeline 让您可以构建完整的 CI/CD 工作流,从源代码到生产环境全部覆盖。
- AWS CloudWatch 让运营团队可以持续监控、记录和分析已部署的应用程序。
如果您在设置 CI/CD 管道时需要进一步帮助,请联系 Amazon 专业服务团队。