第 6 章 持续集成与持续交付(CICD)
概述和学习目标
在本章中,我们讨论了连续集成 (CI),连续交付/连续部署 (CD) 和范式转换的GitOps部署模型的复杂性。
在 本章结束时,您应该能够:
- 解释CI/CD (持续集成/持续交付) 的含义和重要性
- 讨论CI/CD管道及其用途
- 审查GitOps作为部署工具
CI/CD概述
持续集成
持续集成 (CI) 是一种软件开发实践,专注于定期将来自开发团队的代码修改合并到中央存储库中。它的主要目标是在开发周期的早期阶段识别和解决集成问题,并强调频繁的代码集成,自动化构建和测试程序。
持续交货
持续交付 (CD) 是一种软件开发实践,旨在以频繁且可靠的方式将软件更改发布到生产环境的过程自动化。它通过扩展自动化管道以包括部署和发布过程,建立在持续集成 (CI) 的概念之上。在连续交付中,目标是使软件处于可以在任何给定时间发布到生产中的状态。
CI/CD
持续集成和持续交付 (CI/CD) 是一种软件开发方法,它结合了持续集成和持续交付的实践,使从代码更改到生产部署的整个软件交付管道自动化。CI/CD管道可自动执行构建映像,运行测试和部署软件更新的过程。它最大限度地减少了手动错误,提供了开发人员反馈,并实现了快速的产品迭代。
CI/CD-你为什么要费心?
在不断发展的软件开发领域中,采用持续集成和持续交付 (CI/CD) 不仅已成为趋势,而且已成为基本必 要性。本章旨在全面了解为什么开发人员和工程师必须优先考虑并接受CI/CD实践。
- 对速度和效率的需求
合并CI/CD的主要原因之一是需要快速高效的软件交付。在一个上市时间是关键成功因素的世界里,开发人员面临着快速交付高质量代码的巨大压力。CI/CD自动化并简化了从代码集成到部署的整个开发流程,从而确保了快速高效的发布过程。 - 早期发现错误和问题
CI/CD有助于及早发现开发周期中的错误和问题。通过频繁地集成代码更改,开发人员可以在早期阶段识别并纠正问题,从而降低了错误累积并在开发过程后期引起重大问题的可能性。这不仅节省了时间,而且增强了软件的整体稳定性。 - 一致和可靠的构建
CI/CD确保每个代码提交都会触发一个自动化的构建过程,从而实现一致且可靠的构建。这种一致性对于开发人员和团队之间的协作至关重要,因为每个人都使用已知且稳定的代码库。它最大限度地减少了 “它在我的机器上工作” 的问题,促进了一个更具协作性和生产力的开发环境。 - 代码质量的自动化测试
自动化测试是CI/CD管道的组成部分。通过单元测试、集成测试和端到端测试,开发人员可以随着时间的推移保持甚至增强代码质量。自动化测试不仅可以验证代码的正确性,还可以作为将来开发的文档,帮助维护和开发软件。 - 快速部署,持续交付
持续交付是持续集成的兄弟姐妹,专注于自动化部署过程。有了CI/CD,开发者可以更频繁、更可靠地发布软件更新。这不仅通过及时提供新功能来改善用户体验,而且还可以更快地响应客户反馈和市场变化。 - 加强协作和 沟通
CI/CD促进了开发团队内部的协作和沟通文化。通过自动化日常任务,开发人员可以专注于工作中更关键的方面。此外,CI/CD工具提供了整个开发过程的可见性,使团队成员更容易理解并为项目做出贡献。 - 成本效率和资源优化
通过CI/CD自动执行重复任务不仅可以节省时间,而且可以减少人为错误的风险。这反过来又导致了成本效益,因为资源可以更有效地分配。借助CI/CD,开发人员可以专注于通过创新创造价值,而不是将大量时间花在手动和容易出错的流程上。
什么是持续集成(CI)?
持续集成 (CI) 是软件开发中的关键方法,它重塑了团队协作和交付高质量代码的方式。CI的核心是将多个贡献者的代码更改定期合并到共享存储库中。这种迭代过程是一种主动措施,可以在早期阶段识别和纠正集成问题,从而营造以稳定性和效率为特征的开发环境。
在CI的世界中,咒语是频繁的整合。与传统的开发方法不同,在传统的开发方法中,代码集成可能很少发生,CI鼓励开发人员每天多次合并其代码。这种频繁的集成伴随着自动化的构建过程,这是CI的基石。构建过程包括代码编译、自动化测试和可执行工件的创建等任务。自动化确保了代码库的构建始终如一且可靠,从而减少了可变性并确保了标准化的输出。
自动化测试是CI的另一个组成部分。开发人员利用各种类型的测试 (包括单元测试和集成测试) 来验证其代码的正确性。这种对自动化测试的强调具有双重目的: 它验证新集成的代码是否按预期运行,并且为捕获回归和缺陷提供了安全网。
CI的一个关键特征是即时反馈循环。开发人员会收到有关其代码集成成功或失败的及时通知。这种快速反馈可以快速 识别和解决问题,防止可能导致更复杂问题的缺陷积累。
CI的好处扩展到开发过程的各个维度。早期的错误检测是一个显著的优势,因为问题是在初级阶段被识别和解决的。频繁集成产生的一致代码库促进了团队成员之间的协作,促进了对项目状态的共同理解。通过自动化构建和测试的结合,增强了对代码质量的信心,使开发人员能够进行更改,并确保问题将得到及时发现和纠正。
CI为改进协作、提高效率和简化部署流程奠定了基础。通过培养持续整合的文化,团队可以更有效地应对不断变化的需求和市场动态。最终,CI不仅仅是一种开发实践; 它是一种基本的思维方式转变,在不断发展的软件工程领域中优先考虑协作,质量和敏捷性。
什么是持续交付 (CD)?
持续交付是一种软件开发实践,它扩展了持续集成的原则,以确保代码库始终处于可部署状态。主要目标是使软件发布可靠,可预测和可持续。在连续交付管道中,自动化测试和部署过程是不可或缺的组成部分。
关键特征
- 自动化测试与持续集成类似,持续交付非常重视自动化测试。这包括单元测试、集成测试和其他形式的测试,以验证代码库的正确性和功能。
- 部署自动化持续交付涉及自动化部署过程,以创建一致且可重复的发布软件的方法。虽然部署到生产中可能不会自动发生,但导致部署的过程是自动化的。
- 部署到分期或预生产在连续交付中,软件通常被部署到阶段或预生产环境中,在该环境中可以进行额外的测试、用户验收测试或其他验证过程。这使团队可以确保该软件已准备好进行生产发布。
- 生产释放的人工干预与连续部署不同,连续交付不会自动将更改部署到生产环境。生产的决定需要人工干预,提供额外的控制和监督层。
福利
- 可靠的版本持续交付可确保发布可靠且一致,从而降低了将错误引入生产环境的风险。
- 缩短上市时间使用自动化流程,将从开发状态转移到可部署状态所需的时间最小化,从而实现更快,更频繁的发布。
什么是持续部署(CD)?
持续部署将持续交付的原则向前推进了一步,自动将通过自动化测试的每一个代码更改直接部署到生产环境中。目标是最大限度地提高效率,并尽快向最终用户提供新功能或错误修复。
关键特征
- 自动化生产部署持续部署的标志是代码更改在通过自动化测试后自动部署到生产环境。这最大限度地减少了释放过程中的人工干预。
- 高度自动化从代码集成到部署,持续部署在整个开发管道中都严重依赖自动化。自动化测试和部署脚本在实现此自动化水平方面起着至关重要的作用。
- 立即用户访问通过持续部署,最终用户可以立即访问新功能或修复程序。这种快速部署周期可以快速响应用户反馈和不断变化的市场条件。
福利
- 更快的上市时间持续部署大大减少了新功能或错误修复到达最终用户所需的时间,从而在快速发展的市场中提供了竞争优势。
- 连续反馈回路最终用户不断获得新的功能和改进,从而促进了动态反馈循环,帮助开发人员迅速解决问题。
- 高效资源利用连续部署中的自动化简化了发布过程,优化了资源利用率,并允许开发人员专注于创造价值而不是手动部署任务。
持续部署和持续交付
持续部署 (CD) 和持续交付 (CD) 是与软件开发领域中的持续集成 (CI) 密切相关的实践。虽然它们有一些相似之处,但它们都有不同的特征,有助于有效交付高质量软件的总体目标。
总之,持续交付和持续部署是扩展持续集成的好处的实践。持续交付强调了直到生产环境的可靠和自动化过程,最终发布决策需要人工干预。另一方面,持续部署通过将代码更改自动部署到生产中,为最终用户提供对新功能的即时访问,从而进一步实现自动化。在持续交付和持续部署之间的选择取决于组织的风险承受能力、监管要求以及发布过程中需要进行人力监督等因素。
CI/CD原则和实践
持续集成 (CI) 和持续交付/持续部署 (CD) 是现代软件开发的基础实践。如果正确实施,这些实践有助于提高效率、代码质量以及快速可靠地交付软件的能力。
持续集成 (CI) 原则和实践
原则:
- 频繁的代码集成开发人员经常将他们的代码更改集成到共享存储库中,从而确保代码库以协作的方式不断发展。
- 自动化构建每次集成都会触发自动构建过程,包括编译代码,运行测试和创建可执行工件。自动化确保一致性和可靠性。
- 自动化测试每个集成都将运行一套全面的自动化测试,包括单元测试和集成测试,以在开发过程的早期检测和解决问题。
- 即时反馈开发人员会立即收到有关其代码集成成功或失败的反馈。快速反馈可以迅速解决问题,从而降低了缺陷累积的风险。
实践:
- 版本控制使用版本控制系统 (例如,Git) 来管理代码更改,实现协作,跟踪历史记录,并为回滚提供可靠的机制。
- 自动化构建设置由代码提交触发的自动化构建过程。这些过程应该编译代码,运行测试并生成可部署的工件。
- 自动化测试开发和维护一套自动化测试,以验证代码的正确性和功能。这包括单元测试、集成测试以及可能的端到端测试。
- 持续集成服务器使用CI服务器 (例如Jenkins,Travis CI) 来自动化集成和测试过程。CI服务器监视版本控制系统,并在代码更改时触发构建和测试。
持续交付 (CD) 和持续部署 (CD) 原则和做法
原则:
- 一致的部署流程确保部署过程是一致的和可重复的,降低了出错的风险,并确保每个版本都是可靠的。
- 自动化部署使部署过程自动化,以创建用于发布软件的简化且高效的方法。这包括部署到临时环境以进行其他测试。
- 环境奇偶校验:努力实现不同环境之间的 平价,如开发、分期和生产,以最大限度地减少与环境特定差异相关的问题。
实践:
- 持续交货在连续交付中,自动化过程可确保软件始终处于可部署状态。部署到生产需要人工干预,以便在发布之前进行最终审查和决定。
- 持续部署持续部署使自动化更进一步,一旦更改通过自动化测试,便会自动将更改部署到生产环境中。在释放过程中,人为干预被最小化。
- 功能切换使用功能切换或功能标志来启用或禁用生产中的特定功能。这允许部署和发布的解耦,从而实现功能的逐步推出。
- 回滚机制实现机制,以便在出现意外问题时快速回滚释放。这确保了对问题的快速响应,而不会导致长时间的停机时间。
- 监控和日志记录实施强大的监视和日志记录,以实时跟踪应用程序的性能和行为。这有助于快速识别和解决生产中的问题。
了解发布策略
发布策略在软件开发生命周期中起着至关重要的作用,它决定了如何以及何时将新功能,增强功能和错误修复交付给最终用户。不同的发布策略提供了不同程度的控制、风险管理和灵活性。让我们探讨一些常见的发布策略。
滚动释放
在滚动发布策略中,新功能和更新在准备就绪后就会持续不断地逐步发布。没有明显的版本号或主要发行版。软件始终处于进化状态。
特点:
- 持续更新: 更改会在没有固定发布时间表的情况下频繁发布。
- 无版本号: 不需要版本号或主要发行版。
- 增量改进: 用户持续收到小的、增量的改进。
用例:
- 可以无缝更新而不会中断用户的Web应用程序和服务。
- 不断发展和快速交付功能至关重要的软件。
功能切换 (功能标志)
功能切换涉及将新功能包装在可以从外部控制的条件语句中。这允许开发人员在不修改代码的情况下启用或禁用功能,从而提供了管理功能发布的灵活性。
特点:
- 选择性激活: 特征可以选择性激活或停用。
- 逐步推出: 使功能逐步推出到特定用户组。
- 快速实验: 促进A/B测试和快速实验。
用例:
- 用用户的子集测试新功能。
- 安全地发布如果出现问题可能会关闭的功能。
蓝绿部署
在蓝绿部署中,维护两个环境 (蓝色和绿色)。一个环境用作生产环境 (例如,蓝色),而另一个环境用于部署和测试新版本 (例如,绿色)。环境之间的切换决定了活动的生产版本。
特点:
- 零停机时间: 在不影响生产环境的情况下进行新版本的部署和测试。
- 快速回滚: 如果检测到问题,切换回以前的环境是快速的。
用例:
- 停机不可接受的Web应用程序。
- 确保关键系统中版本之间的无缝过渡。
金丝雀释放
Canary发行版涉及在完整发行版之前将软件的新版本部署到一小部分用户 (“canaries”)。这允许对新版本的性能进行真实测试和监控。
特点:
- 逐步推出: 从少量用户开始,逐步增加。
- 实时监控: 在金丝雀阶段密切监控性能和用户反馈。
- 风险缓解: 在完全发布之前识别并解决问题。
用例:
- 现实世界用户反馈很有价值的网络和移动应用程序。
- 将潜在问题对小用户子集的影响降至最低。
分阶段 (分阶段) 推出
在分阶段推出时,新版本最初会发布给有限的用户子集,然后随着时间的推移逐步发布给更广泛的受众。每个阶段都允许在扩展到下一个组之前监视和解决问题。
特点:
- 受控进展: 释放发生在预定阶段。
- 反馈和监控: 每个阶段都允许用户反馈和问题监控。
- 风险缓解: 问题可以在完全发布之前解决。
用例:
- 具有多样化用户群的大规模应用程序。
- 以可控的方式确保稳定性和性能。
选择正确的发布策略取决于诸如软件的性质,用户基础,可接受的风险水平以及组织的开发和部署实践等因素。通常,这些策略的组合被用来平衡快速交付与风险管理和用户体验的考虑。
GitOps作为部署工具
GitOps是一种部署方法,它利用Git作为基础架构和应用程序配置的单一真相来源。这种方法使开发人员能够使用熟悉的Git工作流,以声明式的方式管理他们的应用程序和基础结构。
GitOps的主要原则:
- 声明式配置基础结构和应用程序的所需状态在Git存储库中以YAML清单,Helm图表或其他声明式格式声明。
- 真理的单一来源Git存储库是系统所需状态的唯一真实来源,确保了一致性和可追溯性。
- 基于拉的对账GitOps控制器持续监视Git存储库中的更改,并自动将其应用于目标环境,以确保达到所需的状态。
使用GitOps进行部署的好处:
- 简化部署流程GitOps提供了一个简单明了的自动化部署过程,无需手动配置和部署脚本。
- 提高一致性和可靠性通过使用声明式配置和单一的事实来源,GitOps有助于确保在不同环境中进行一致和可靠的部署。
- 改进协作GitOps通过提供用于管理基础架构和应用程序的共享平台来鼓励开发人员和运营团队之间的协作。
- 增强的可审计性和可追溯性GitOps提供了对系统所做更改的完整审核跟踪,从而促进了故障排除和合规性审核。
流行的GitOps工具:
- Argo CD是一个开源GitOps连续交付工具,支持多个平台和环境。
- Flux CD是一个开源GitOps连续交付工具,专门为Kubernetes部署而设计。
- Tekton CD是基于Kubernetes构建的开源GitOps连续交付平台
- Jenkins X是一个开源平台,将GitOps原则与Jenkins相结合,进行连续交付。
GitOps采用注意事项:
- 基础架构即代码 (IaC) 的采用: GitOps要求现有的IaC实践来有效地管理基础架构配置。
- 工具选择: 选择合适的GitOps工具取决于特定的需求和要求。
- 安全注意事项: 实施适当的访问控制和安全实践对于保护GitOps部署中使用的Git存储库至关重要。
总体而言,GitOps提供了一种强大而灵活的方法来部署应用程序和管理基础架构。它的声明性,单一的真相来源和自动化的工作流 程使其成为寻求简化其部署流程并提高其整体软件交付效率的组织的一个引人注目的选择。
实验室6。设置Jenkins
asset-v1-LinuxFoundationX+LFS162x+1T2024+type@asset+block@Chapter_6_Lab_-_Setting_up_Jenkins.pdf
第六章总结
本章是对持续集成/持续交付 (CI/CD) 的全面介绍,这是现代软件工程实践中至关重要的基本方法。持续集成 (CI) 是指将多个贡献者的代码更改频繁地合并到单个软件项目中的自动化过程,从而最大程度地减少了集成问题。通过连续交付 (CD) 来补充此功能,该功能通过在构建阶段之后将所有代码更改自动部署到测试或生产环境中来扩展CI。我们研究了CI/CD在提高运营效率,促进更快的发布,提高软件质量以及降低与手动部署相关的风险方面的重要性。通过解释连续部署 (自动部署到生产) 和连续交付 (自动到预生产阶段,手动推送到生产) 之间的区别,本章讨论了软件部署过程中自动化的综合范围。
除了CI/CD之外,本章还过渡到有关GitOps的讨论,GitOps是一种使用Git作为声明性基础结构和应用程序的真理来源的范例。它概述了GitOps的关键原则,包括部署过程中的版本控制、协作、合规性和透明度,并强调了增强的安全性、可靠性和更快的恢复时间等好处。