CI/CD 管道:通过示例进行学习
什么是 CI/CD 管道?
CI/CD 管道可自动化软件交付过程。它构建代码、运行测试并帮助您安全地部署新版本的软件。CI/CD 管道可减少人工错误、向开发人员提供反馈并实现快速的产品迭代。
CI/CD 管道在软件产品的整个生命周期中引入了自动化和持续监控。它涉及从集成和测试阶段到交付和部署。这些连接的实践称为 CI/CD 管道。
什么是持续集成、持续交付和持续部署?
- 持续集成 是一种软件开发方法,团队成员每天至少可以集成一次他们的工作。在这种方法中,每个集成都由自动构建检查以查找错误。
- 持续交货 是一种团队在短周期内开发软件产品的软件工程方法。它确保软件可以随时轻松发布。
- 持续部署 是一种软件工程过程,其中使用自动部署来交付产品功能。它可以帮助测试人员验证代码库更改是否正确以及是否稳定。
CI/CD 管道的阶段
CI/CD 管道是任何开发人员交付任何软件新版本时应执行的步骤的可运行规范。每个阶段的失败都会通过电子邮件触发通知, Slack或其他沟通平台。它使负责任的开发人员能够了解重要问题。
以下是 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 Pipeline 的优点/好处:
- 可以轻松地手动完成构建和测试。
- 它可以提高代码的一致性和质量。
- 提高灵活性并能够提供新的功能。
- CI/CD 管道可以简化沟通。
- 它可以实现软件交付过程的自动化。
- 帮助您更快地获得客户反馈。
- CI/CD 管道可帮助您提高产品可见性。
- 它使您能够消除手动错误。
- 降低成本和劳动力。
- CI/CD 管道可以加快软件开发生命周期。
- 它具有自动化的管道部署。
- CD 管道提供了从开发人员到客户的快速反馈循环。
- 改善组织员工之间的沟通。
- 它使开发人员能够知道构建中的哪些更改可以转向经纪,并在将来避免这些更改。
- 自动化测试以及少量手动测试运行有助于解决可能出现的任何问题。
重要的 CI/CD 工具
以下是重要的 CI/CD 工具:
1)詹金斯
Jenkins 是一个开源持续集成服务器,可帮助以自动化方式实现持续集成过程(不止于此)。Jenkins 是免费的,完全用 Java。Jenkins 是全球广泛使用的应用程序,安装量约为 300 万,并且还在日益增长。
特色:
- Jenkin 会在白天多次构建和测试代码。
- 自动化构建和测试过程,节省时间并减少缺陷。
- 每次构建和测试成功后都会部署代码。
- 开发周期很快。
链接: https://www.jenkins.io/download/
2) Bamboo
Bamboo 是一个持续集成构建服务器,可在一个地方自动执行构建、测试和发布。它与 JIRA 软件和 Bitbucket 无缝协作。
特色:
- 运行并行批量测试
- 配置 Bamboo 很简单
- 每个环境的权限功能允许开发人员和 QA 部署到他们的环境中
- 内置 Git 分支和工作流。它会自动合并分支。
链接: https://www.atlassian.com/software/bamboo
3)CircleCi
圆词 是一款灵活的 CI 工具,可在任何环境中运行,例如跨平台移动应用程序, Python API 服务器,或者 Docker 集群。这个工具可以减少 bug,提高应用程序的质量。
特色:
- 允许选择构建环境
- 支持多种语言,包括 C++, Java脚本、NET、PHP、 Python和 Ruby
- 对 Docker 的支持让您可以配置定制的环境。
- 当触发较新的构建时,自动取消任何排队或正在运行的构建。
为何 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、Bambo 和 Circle CI。
- CI/CD 管道可以提高可靠性。
- CI/CD 管道使 IT 团队对开发人员更具吸引力。
- 周期时间是从构建阶段到生产所需的时间。
- 开发频率允许您分析在自动化过程中发现的瓶颈。
- 变更前置时间衡量从开发阶段到部署的开始时间。
- 变更失败率关注的是开发成功的次数与失败的次数。
- MTTR(平均恢复时间)是您的团队从故障中恢复所需的时间。
- MTTF(平均故障时间)测量修复和停机之间的时间量。