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

什么是 CI/CD 管道?
A CI/CD 管道 它自动化了代码变更从开发者提交到最终部署版本的整个流程。它构建代码、运行测试套件,并将二进制文件安全地部署到一个或多个环境中。精心设计的流水线可以减少人为错误,快速向开发者提供反馈,并支持小而频繁的产品迭代。
该流水线将自动化和持续监控贯穿整个软件生命周期——从集成和测试到交付和部署。这些相互关联的实践统称为 CI/CD 流水线。
什么是持续集成、持续交付和持续部署?
- 持续集成(CI): 一种开发实践,团队成员每天至少集成一次他们的工作。每次集成都会通过自动化构建和测试运行进行验证,以便快速发现错误。
- 持续交付(CD): 一种工程实践,团队在每次迭代结束时都将产品保持在可发布状态。部署到生产环境通常需要人工审批。
- 持续部署(CD): 持续交付更进一步——每个通过自动检查的更改都会自动部署到生产环境,无需人工审核。
CI/CD 流水线的各个阶段
CI/CD 流水线是发布新版本软件所需步骤的可执行规范。任何阶段的失败都会触发通知——通过电子邮件、 Slack或者通过其他渠道——以便立即通知相关工程师。
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 为全球数十万个装置提供动力。
特色:
- 每天多次构建和测试代码。
- 实现整个构建/测试流程的自动化,节省时间并减少缺陷。
- 每次构建和测试成功后部署代码。
- 通过快速反馈加快开发周期。
链接: https://www.jenkins.io/download/
2) Bamboo
Bamboo 是一个持续集成构建服务器,它将自动构建、测试和发布集成到一个工具中。它可以与以下系统无缝集成: Jira Software 和 Bitbucket.
特色:
- 并行运行批量测试。
- 安装配置快捷方便。
- 基于环境的权限允许开发人员和测试人员部署到他们自己的环境中。
- 内置 Git 分支工作流程,可自动合并分支。
链接: https://www.atlassian.com/software/bamboo
3) CircleCI
CircleCI 是一个灵活的持续集成工具,可以运行跨平台移动应用的构建。 Python API、Docker集群等等。它通过快速反馈减少错误并提高应用程序质量。
特色:
- 构建环境的选择。
- 支持多种语言,包括 C++, Java脚本、.NET、PHP、 Python,以及 Ruby。
- Docker对自定义构建镜像的支持。
- 当触发新的构建时,自动取消已排队或正在运行的构建。
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 长期可靠性。




