CI/CD 管道:通过示例学习

什么是 CI/CD 管道?

CI/CD 管道自动化软件交付过程。它构建代码、运行测试,并帮助您安全地部署新版本的软件。CI/CD 管道可减少手动错误,为开发人员提供反馈,并实现快速的产品迭代。

CI/CD 管道在软件产品的整个生命周期中引入自动化和持续监控。它涉及从集成和测试阶段到交付和部署。这些相互连接的实践被称为 CI/CD 管道。

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

  • 持续集成是一种软件开发方法,团队成员可以每天至少集成一次他们的工作。在此方法中,每次集成都会由自动构建进行检查以查找错误。
  • 持续交付是一种软件工程方法,团队以短周期开发软件产品。它确保软件可以随时轻松发布。
  • 持续部署是一种软件工程过程,产品功能通过自动部署交付。它帮助测试人员验证代码库更改是否正确且稳定。

CI/CD 管道的阶段

CI/CD 管道是任何开发人员在交付任何软件新版本时应执行的步骤的可运行规范。每个阶段的失败都会通过电子邮件、Slack 或其他通信平台触发通知。它使负责任的开发人员能够了解重要问题。

以下是 CI/CD 管道的重要阶段

Stages of CI/CD pipeline
CI/CD 管道的阶段

源阶段

在源阶段,CI/CD 管道由代码存储库触发。程序中的任何更改都会向 CI/CD 工具发出通知,该工具会运行相应的管道。其他常见触发器包括用户启动的工作流、自动化计划和其他管道的结果。

构建阶段

这是 CI/CD 管道的第二个阶段,您可以在其中合并源代码及其依赖项。这主要是为了构建一个可运行的软件实例,您可以将其交付给最终用户。

C++、Java、C 或 Go 语言编写的程序应进行编译。另一方面,JavaScript、Python 和 Ruby 程序无需构建阶段即可工作。

未能通过构建阶段意味着项目存在根本性的配置错误,因此最好立即解决此类问题。

测试阶段

测试阶段包括执行自动化测试以验证代码的正确性和软件的行为。此阶段可防止易于复制的错误到达客户。开发人员有责任编写自动化测试。

部署阶段

这是您的产品上线进行的最后阶段。一旦构建成功通过所有必需的测试场景,它就可以部署到实时服务器了。

CI/CD 管道示例

以下是 CI/CD 管道的示例

  • 源代码控制:将代码托管在 GitHub 上作为私有存储库。这将帮助您将应用程序与主要的应用程序和服务集成。
  • 持续集成:使用持续集成和交付平台 CircleCI 并提交所有代码。当收到更改通知时,此工具将拉取 GitHub 中可用的代码并进行构建和运行测试。
  • 将代码部署到 UAT:配置 CircleCI 将您的代码部署到 AWS UAT 服务器。
  • 部署到生产:您必须重用持续集成步骤来将代码部署到 UAT。

CI/CD 管道最佳实践

以下是 CI/CD 管道最佳实践

  • 写下当前开发流程,这样您就可以了解需要更改的流程以及可以轻松自动化的流程。
  • 先从小范围的概念验证项目开始,然后再一次性完成整个开发过程。
  • 设置一个包含多个阶段的管道,其中首先运行快速的基本测试。
  • 每个工作流都从相同、干净且隔离的环境开始。
  • 运行开源工具,涵盖从代码样式到安全扫描的所有内容。
  • 设置一个更好的代码中心,通过针对每个分支运行标准的测试集来持续检查代码质量。
  • 对每个拉取请求进行同行代码审查,以协作方式解决问题。
  • 您必须在开始向 CD 自动化过渡之前定义成功指标。这将帮助您持续分析您的软件,改进开发过程并根据需要进行调整。

CI/CD 管道的优势

以下是 CI/CD 管道的优点/好处

  • 构建和测试可以轻松手动执行。
  • 它可以提高代码的一致性和质量。
  • 提高灵活性,并能够发布新功能。
  • CI/CD 管道可以简化沟通。
  • 它可以自动化软件交付过程。
  • 帮助您获得更快的客户反馈。
  • CI/CD 管道有助于提高您的产品可见性。
  • 它使您能够消除手动错误。
  • 降低成本和劳动力。
  • CI/CD 管道可以加快软件开发生命周期。
  • 它具有自动化的管道部署。
  • CD 管道提供了一个快速的反馈循环,从开发人员到客户。
  • 改善组织内部员工之间的沟通。
  • 它使开发人员能够了解构建中的哪些更改可能导致故障,并避免在将来发生。
  • 自动化测试以及一些手动测试运行有助于修复可能出现的任何问题。

重要的 CI/CD 工具

以下是重要的 CI/CD 工具

1) Jenkins

Jenkins 是一个开源的持续集成服务器,有助于以自动化的方式实现持续集成过程(不仅限于此)。Jenkins 是免费的,并且完全用Java编写。Jenkins 是一个被广泛使用的应用程序,在全球拥有约 30 万个安装量,并且每天都在增长。

Jenkins

功能

  • Jenkin 会在一天内多次构建和测试代码。
  • 自动构建和测试过程,节省时间并减少缺陷。
  • 每次成功构建和测试后都会部署代码。
  • 开发周期很快。

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


2) Bamboo

Bamboo 是一个持续集成构建服务器,它在一个地方执行——自动构建、测试和发布。它与 JIRA 软件和 Bitbucket 无缝协作。

Bamboo

功能

  • 运行并行批处理测试
  • 设置 Bamboo 非常简单
  • 每个环境的权限功能允许开发人员和 QA 将其部署到他们的环境中
  • 内置 Git 分支和工作流。它会自动合并分支。

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


3) CircleCi

CircleCi 是一个灵活的 CI 工具,可以在任何环境中运行,例如跨平台移动应用、Python API 服务器或 Docker 集群。此工具可减少错误并提高应用程序质量。

CircleCi

功能

  • 允许选择构建环境
  • 支持 C++、JavaScript、.NET、PHP、Python 和 Ruby 等多种语言
  • 对 Docker 的支持允许您配置自定义环境。
  • 当触发更新的构建时,自动取消任何排队或正在运行的构建。

链接: https://circleci.com/

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

  • CI/CD 管道可以提高可靠性。
  • 它使 IT 团队对开发人员更具吸引力。
  • CI/CD 管道帮助 IT 领导者从版本控制中拉取代码并执行软件构建。
  • 帮助将代码移动到目标计算环境。
  • 使项目负责人能够轻松管理环境变量并为目标环境进行配置。
  • 项目经理可以推送应用程序组件到 Web 服务、数据库服务、API 服务等。
  • 提供关于交付状态的日志数据和警报。
  • 它使程序员能够在代码更改继续进行之前验证它们,从而减少缺陷最终进入生产环境的可能性。

CI/CD 管道 KPI

  • 周期或部署时间:周期时间是从构建阶段到生产的时间。您可以通过测量开发过程阶段来获得平均生命周期时间。此指标将深入了解您流程中的瓶颈以及整体开发时间的快慢。
  • 开发频率:开发频率允许您分析自动化过程中发现的瓶颈。更频繁的小版本发布可降低缺陷风险,并在发现缺陷时进行修复。此类指标是您团队效率的整体衡量标准。
  • 变更前置时间:它衡量从开发阶段开始到部署的时间。此指标是整个开发过程以及团队协作情况的指标。
  • 变更失败率:它关注开发成功次数与失败次数的比例。
  • MTTR 与 MTTF:MTTR(平均恢复时间)是您的团队从故障中恢复所需的时间。MTTF(平均故障时间)衡量修复和停机之间的时间。这些指标反映了团队响应和修复问题的能力。

摘要

  • CI/CD 管道自动化软件交付过程。
  • CI/CD 管道在软件产品的整个生命周期中引入自动化和持续监控。
  • 持续集成是一种软件开发方法,团队成员可以每天至少集成一次他们的工作。
  • 持续交付是一种软件工程方法,团队以短周期开发软件产品。
  • 持续部署是一种软件工程过程,产品功能通过自动部署交付。
  • CI/CD 管道有四个阶段:1) 源阶段,2) 构建阶段,3) 测试阶段,4) 部署阶段。
  • 重要的 CI/CD 工具 包括 Jenkins、Bamboo 和 Circle CI。
  • CI/CD 管道可以提高可靠性。
  • CI/CD 管道使 IT 团队对开发人员更具吸引力。
  • 周期时间是从构建阶段到生产的时间。
  • 开发频率允许您分析自动化过程中发现的瓶颈。
  • 变更前置时间衡量从开发阶段到部署的时间。
  • 变更失败率关注开发成功次数与失败次数的比例。
  • MTTR(平均恢复时间)是您的团队从故障中恢复所需的时间。
  • MTTF(平均故障时间)衡量修复和停机之间的时间。