CI/CD 流水线教程及示例

⚡ 智能摘要

CI/CD 流水线是将代码变更从提交到生产环境的自动化路径。它通过四个阶段——源代码生成、构建、测试和部署——来构建、测试和部署软件,从而大幅减少人为错误,并缩短开发人员和最终用户之间的迭代周期。

  • 🔄 区分 CI、CD 和 CD: 持续集成每天合并代码;持续交付始终保持可发布性;持续部署将每个绿色构建版本直接推送到生产环境。
  • ????️ 完成以下四个阶段: 源代码 → 构建 → 测试 → 部署,出现任何故障时都会自动发出通知。
  • 🛠️ 选择合适的工具: Jenkins, Bamboo, CircleCIGitHub Actions、GitLab CI 和 Argo CD 涵盖了大多数现代流水线。
  • 📊 Trac选择合适的KPI: 周期时间、部署频率、变更提前期、变更失败率、MTTR 和 MTTF 显示了管道健康状况。
  • 🤖 将人工智能加入循环: AI 助手可以生成管道 YAML 文件、预测不稳定的测试并解释构建失败的原因,从而减少工程师进行故障排查的时间。

CI/CD 流水线

什么是 CI/CD 管道?

A CI/CD 管道 它自动化了代码变更从开发者提交到最终部署版本的整个流程。它构建代码、运行测试套件,并将二进制文件安全地部署到一个或多个环境中。精心设计的流水线可以减少人为错误,快速向开发者提供反馈,并支持小而频繁的产品迭代。

该流水线将自动化和持续监控贯穿整个软件生命周期——从集成和测试到交付和部署。这些相互关联的实践统称为 CI/CD 流水线。

什么是持续集成、持续交付和持续部署?

  • 持续集成(CI): 一种开发实践,团队成员每天至少集成一次他们的工作。每次集成都会通过自动化构建和测试运行进行验证,以便快速发现错误。
  • 持续交付(CD): 一种工程实践,团队在每次迭代结束时都将产品保持在可发布状态。部署到生产环境通常需要人工审批。
  • 持续部署(CD): 持续交付更进一步——每个通过自动检查的更改都会自动部署到生产环境,无需人工审核。

CI/CD 流水线的各个阶段

CI/CD 流水线是发布新版本软件所需步骤的可执行规范。任何阶段的失败都会触发通知——通过电子邮件、 Slack或者通过其他渠道——以便立即通知相关工程师。

CI/CD 管道的阶段

CI/CD 流水线的各个阶段。

源阶段

流水线由代码库的变更触发。任何提交都会通知 CI/CD 工具运行匹配的流水线。其他常见的触发条件包括用户发起的流程、计划运行以及上游流水线的运行结果。

构建阶段

构建阶段会编译源代码并解析其依赖项,最终生成可运行的产物。编译型语言,例如: C++, JavaC、Go 等语言必须生成二进制文件。解释型语言,例如…… JavaScript, PythonRuby 仍然受益于此阶段,可以打包依赖项、进行代码检查并生成容器镜像。

构建阶段的失败通常表明项目存在根本性的配置错误,因此必须立即解决该问题。

测试阶段

测试阶段执行自动化测试套件,以验证代码的正确性和软件行为。它能够在缺陷影响客户之前将其捕获并重现。编写和维护测试是开发人员的责任——流水线仅负责确保测试运行。

部署阶段

部署阶段会将经过验证的制品提升到目标环境,例如预发布环境、用户验收测试环境或生产环境。一旦构建版本通过了所有必需的测试,部署就可以自动触发(持续部署),也可以在手动检查后触发(持续交付)。

CI/CD 流水线示例

下面的示例展示了一个使用 GitHub 的具体流程: CircleCI以及 AWS。

  • 来源 Code 控制: 将应用程序代码托管在私有的 GitHub 存储库中,以便与构建、扫描和部署服务集成。
  • 持续集成: 联接 CircleCI 将其添加到存储库中,以便每次推送都会拉取新代码、构建它并执行测试套件。
  • 部署到用户验收测试阶段: 配置 CircleCI 将构建成功的版本部署到 AWS UAT 环境,供利益相关者测试。
  • 部署到生产环境: 如果采用持续交付,则可以通过人工审批来将工件推广到生产环境,并重复使用相同的 CI/CD 步骤。

CI/CD 管道最佳实践

以下做法可确保管道快速、可靠,并赢得团队的信任:

  • 在进行自动化之前,请记录当前的交付流程,以便您知道哪些内容需要保留、更改或删除。
  • 先从小规模的概念验证开始,而不是一次性实现整个流程的自动化。
  • 将流程构建成多个阶段,以便快速运行基本检查。
  • 每个工作流程都从一个干净、隔离的环境开始,以保​​持构建的可复现性。
  • 添加涵盖从代码风格到安全扫描等各个方面的开源工具。
  • 使用代码质量中心,对每个分支运行相同的测试。
  • 对每个拉取请求进行同行评审,并将流水线输出作为评审的一部分。
  • 在开始转型之前,先定义成功指标——它们能够推动持续改进。

CI/CD 流水线的优势

成熟的 CI/CD 流水线可以带来以下几个可衡量的好处:

  • 用可靠的自动化流程取代容易出错的手动构建和发布流程。
  • 提高每件出货产品的一致性和质量。
  • 提高灵活性——可按需提供新功能。
  • 简化开发人员、质量保证人员和运维人员之间的沟通。
  • 通过频繁发布版本加快客户反馈循环。
  • 通过仪表盘、日志和通知提高产品可见性。
  • 消除人为错误并降低发布成本。
  • 缩短软件开发生命周期。
  • 提供从开发者到最终用户的快速反馈循环。
  • 突出显示破坏构建的更改,以便可以快速撤销这些更改。
  • 将自动化测试与少量人工探索性测试相结合,以保持高质量。

重要的 CI/CD 工具

现代团队可以从完善的 CI/CD 工具生态系统中进行选择。以下介绍应用最广泛的工具。

1) Jenkins

Jenkins 是一个开源的持续集成服务器,可自动化构建、测试和发布工作流程。 Java 并由庞大的插件生态系统提供支持 Jenkins 为全球数十万个装置提供动力。

Jenkins

特色:

  • 每天多次构建和测试代码。
  • 实现整个构建/测试流程的自动化,节省时间并减少缺陷。
  • 每次构建和测试成功后部署代码。
  • 通过快速反馈加快开发周期。

链接: https://www.jenkins.io/download/


2) Bamboo

Bamboo 是一个持续集成构建服务器,它将自动构建、测试和发布集成到一个工具中。它可以与以下系统无缝集成: Jira Software 和 Bitbucket.

Bamboo

特色:

  • 并行运行批量测试。
  • 安装配置快捷方便。
  • 基于环境的权限允许开发人员和测试人员部署到他们自己的环境中。
  • 内置 Git 分支工作流程,可自动合并分支。

链接: https://www.atlassian.com/software/bamboo


3) CircleCI

CircleCI 是一个灵活的持续集成工具,可以运行跨平台移动应用的构建。 Python API、Docker集群等等。它通过快速反馈减少错误并提高应用程序质量。

CircleCI

特色:

  • 构建环境的选择。
  • 支持多种语言,包括 C++, Java脚本、.NET、PHP、 Python,以及 Ruby。
  • Docker对自定义构建镜像的支持。
  • 当触发新的构建时,自动取消已排队或正在运行的构建。

链接: https://circleci.com/


4) GitHub Actions、GitLab CI 和 Argo CD

GitHub Actions 和 GitLab CI 将 CI/CD 直接集成到源代码控制平台中,无需外部构建服务器。Argo CD 为 Kubernetes 集群添加了 GitOps 式的持续部署,使集群状态与 Git 中声明的预期状态保持一致。

为何 CI/CD 管道对 IT 领导者很重要?

  • 提高版本发布的可靠性和可预测性。
  • 使工程组织更加……trac对开发者来说很有效。
  • 从版本控制系统中提取代码,并一键执行构建。
  • 将二进制文件安全地迁移到目标环境中。
  • 允许项目负责人管理每个环境的环境变量和配置。
  • 将应用程序组件发布到 Web、数据库、API 和其他服务。
  • 显示有关每次版本发布状态的日志数据和警报。
  • 在代码变更生效前进行验证,减少生产环境中的缺陷。

CI/CD 流水线关键绩效指标

  • 周期或部署时间: 从构建到生产所需的时间。趋势分析揭示了交付流程中的瓶颈。
  • 部署频率: 你的发布频率如何?更频繁、更小规模的发布可以降低风险,并使故障更容易修复。
  • 变更交付周期: 从开发开始到成功部署所需的时间。这反映了规划、编码和交付环节的协同运作情况。
  • 变更失败率: 导致事故或需要回滚的部署百分比。 Tracks 管道安全。
  • 平均恢复时间(MTTR): 故障后恢复服务的平均时间。衡量系统弹性。
  • 平均故障间隔时间 (MTTF): 两次故障之间的平均时间。 Tracks 长期可靠性。

常见问题

CI/CD 是一套用于构建、测试和发布软件的自动化技术实践。DevOps 是一种更广泛的文化和组织变革,旨在协调开发和运维,而 CI/CD 是其核心工程实践之一。

持续交付确保产品始终处于可发布状态,但需要人工审批才能发布。持续部署则取消了这一关卡——所有通过流水线的变更都会自动部署到生产环境。

一个健康的流水线可以在十分钟内完成单元测试和集成测试,以便开发人员能够在上下文记忆犹新时获得反馈。更长的端到端测试套件可以并行运行,也可以安排在夜间运行。

将密钥存储在安全库中,严格控制代理权限,对工件进行签名,运行静态应用安全测试 (SAST) 和依赖项扫描,并审核谁可以编辑管道定义。将管道视为生产基础设施。

DORA 指标——部署频率、变更提前期、变更失败率和平均恢复时间——衡量卓越软件交付性能,并被广泛用于衡量 CI/CD 成熟度。

是的。甚至 Python, 红宝石, 和 Java脚本项目受益于构建阶段,该阶段会安装依赖项、检查代码、运行类型检查,并生成可部署的容器或包工件。

AI 助手可以生成流水线 YAML 文件、对不稳定的测试进行分类、总结构建失败原因并推荐回滚时机。它们缩短了故障排查时间,使工程师能够专注于根本原因分析,而不是耗费大量时间在日志中查找问题。

是的。人工智能工具可以将诸如“构建 Node.js 应用、运行 Jest、推送 Docker 镜像、部署到 AWS”之类的简单英语描述转换为可编辑的 GitHub Actions 或 GitLab CI YAML 代码,并对每个步骤进行解释。

总结一下这篇文章: