CI/CD 的优势众所周知,但怎样才能充分利用这些 DevOps 流程呢?
持续集成、交付和部署简化了构建、测试和发布代码的流程。 与传统方法相比,这些流程可以帮助您更快地将正常运行的产品交付到用户手中。 正确执行的自动化构建管道将帮助您和您的团队持续地快速交付正常运行的软件,并及时获得对最新更改的反馈。
我们来探索您应该考虑应用于管道的持续集成和交付最佳做法。
确保所有源代码、配置文件、脚本和依赖项均存储在版本控制中是实施持续集成的重要初始步骤。
但只有版本控制系统还不够 – 如何使用它才是关键。 持续集成的目标是使来自多个贡献者的更改实施起来更容易。 这种方式的关键在于更频繁地提交和共享代码更改。
运作方式如下:
频繁提交最开始可能会让人感觉不适,这通常是由于害怕受到审查或处理的任务超出了一天的工作量。 在团队内打造一种协作而非评判的文化至关重要。 实施对工作做法的更改时,讨论如何作为团队开展工作会很有帮助。 将任务拆分成更小、更容易管理的区块可以帮助个人采用这种做法。
如果您维护一个持续可发布的代码库,便可充分利用 CI/CD 做法。 这种方式可以在 bug 出现时予以立即解决,从而提高效率,并在生产中出现问题时迅速找到修正方法。
自动化测试和管道阶段可对代码是否可发布提供即时反馈,而这种最佳做法则侧重于如何应对其高亮显示的任何问题。
团队应共同承担构建责任,在出现故障时优先快速修复。 团队成员应协作解决问题,而不是责怪最后作出更改的开发者,以此培育一种建设性文化,加强 CI/CD 工作流,支持持续改进,尤其是在面临压力的情况下。
为了降低由于语法错误或缺少依赖项等简单错误造成的构建失败的风险,团队成员应先在本地构建并运行初始测试,然后再共享自己的更改。 大家都应该使用与 CI/CD 系统相同的脚本,以避免重复劳动。
一个常见的错误是为 CI/CD 管道的每个阶段创建一个新构建。 为不同的环境重新构建代码会带来不一致的风险,并意味着您无法确信之前的所有测试都已通过。
相反,应在构建管道的每个阶段推进使用相同的构建工件,并最终将其发布上线。
在部署脚本中调用变量、身份验证形参、配置文件或脚本,而不是将它们嵌入到构建本身,从而确保构建不受系统约束。
将构建工件视为源代码的产物。 在 Nexus 等中央工件仓库(而不是源控制系统)中对它们进行版本控制和存储。
使用 CI 服务器将相同的构建工件自动部署到每个测试环境。 随着工件通过每个阶段,您的团队成员对其可靠性的信心会逐渐增强。
虽然 CI/CD 在很大程度上依赖于自动化测试来确保软件质量,但这并不意味着您应测试每一种可能出现的情况。
平衡测试覆盖率与性能至关重要。 如果测试需要过长的时间才能得出结果,则存在个别人寻找理由和方法来绕过或加快此流程的风险。
分层构建自动化测试覆盖范围,从单元测试开始,然后是集成或组件测试。
先运行快速完成的测试,以尽早获得反馈。 通常情况下,单元测试运行速度最快。
考虑将测试拆分成多个批次,然后并行运行这些批次,从而更快地获得结果。
仅当速度较快的测试已通过且您已对构建建立信心时,再引入运行时间较长的测试。
考虑到人工质量保证需要的时间和人力,最好将这一阶段限制在所有自动化测试均已成功完成之后。
不要使用运行时间较长的测试来检查每种可能出现的情况。 优先通过较低级别的测试对更广的覆盖范围进行测试,并针对产品和用户的特定高风险领域集中进行较高级别的测试。
使预生产环境长时间运行会导致其设置与原始设置之间产生差异,并且各设置之间也存在差异。 这种配置偏离会导致测试结果不一致,从而破坏 CI/CD 流程。
在每次管道运行之间刷新测试和暂存环境是值得投资的最佳做法。
将测试环境托管到容器或虚拟机中,以实现快速刷新。
编写创建或拆除环境过程的脚本。 随后,您可以通过 CI/CD 服务器自动执行这些步骤。
编写环境创建脚本可以更轻松地扩展 CI/CD 流程并同时运行多个管道。
如果您选择静态环境,则需要对每个环境进行维护,以避免出现配置偏离。 这样会拖慢 QA 流程并推迟发布时间。
CI/CD 管道会让人接触到要部署到生产的代码和凭据,这使得 CI/CD 通道成为攻击者的首要目标。 因此,务必向 CI/CD 流程应用安全最佳做法。
一旦您投资了 CI/CD 策略并构建了让您对发布充满信心的可靠管道,您就不想让个别人绕过该流程,从而破坏您为此所做的努力。
人们经常想绕过 CI/CD 流程来实施次要或紧急更改。 但千万不要妥协,原因如下:
如果有人要求绕过该流程,请耐心向其说明 CI/CD 管道的优势。 还可以问一下现有流程中是否有任何部分可以改进。
管道设置流程的一个组成部分是为生产环境(即产品)实施监控。
最佳做法是为 CI/CD 管道本身设置类似的监控形式。
使用您的 CI/CD 工具收集的指标确定可能存在的问题和需要改进的领域。
对比每周、每天或每小时触发的构建数量,以了解您的管道基础架构的使用模式。 监控有助于确定您是否需要扩缩,并识别峰值负载时间。
跟踪一段时间内的部署速度,以发现趋势,并评估何时投资进行性能优化。
使用自动化测试得出的统计数据找出可以受益于并行化的领域。
找出日常被忽略的 QA 结果,查看可在哪些方面简化测试覆盖范围。
制定成功的 CI/CD 工作流取决于团队和组织文化,而不仅仅是您采用的流程和工具。
持续集成、交付和部署是核心 DevOps 流程。 目标是打破开发者、QA 工程师和运营人员之间的传统壁垒,鼓励各学科之间进行协作。 采用这些 DevOps 最佳做法有几点好处。
团队成员可以全面了解整个工作流程,并有机会开展协作,从而获益于不同领域的专业知识。
共同承担维护管道的责任可以防止任何一个人成为单点故障。
鼓励共同承担软件交付的责任可以让所有团队成员都能做出贡献,无论是修正构建、自动执行任务,还是改进流程。
打造信任文化,让团队成员能够尝试和分享想法,让组织从中受益,并改进您交付的软件。
出现问题时,您可以借此机会学习,并进一步提高 CI/CD 做法的稳健性和有效性。
遵循持续集成、交付和部署的最佳做法具有诸多好处。
自动执行构建、测试和部署任务可以加快发布流程,让您能够更快速地交付软件更新。 自动化 CI/CD 对于缩短上市时间和快速向用户交付功能至关重要。
更频繁地部署更改让您可以定期收集用户反馈。 您可以使用用户的洞察来帮助完善计划和调整策略。
自动化 QA 流程可以在开发周期中更早地检测到 bug,从而能够更快地解决问题,并促进交付质量更高的代码和更强大的软件。
自动化检查可以确保按照一致的标准对每个更改进行检查,从而最大限度地降低 bug 影响生产的风险。 因此,用户的体验更加顺畅,停机的可能性也会大大降低。
由于自动执行构建、测试和部署软件的重复步骤,团队成员可以将更多时间投入到开发新功能、进行创新设计或加强整体 DevOps 做法等创造性任务中。
实施持续集成、交付和/或部署可能让大家觉得是一项艰巨的任务。 成功的 CI/CD 策略涉及到多个关键元素,并需要一定的时间才能打造出坚实的 DevOps 文化。
就像在软件开发项目中一样,制定目标并向团队传达非常重要。
无论目标是每周发布一次并持续交付到预生产环境,还是追求通过向用户提供更新进行持续部署,制定明确的目标都至关重要。
制定目标后,将达成目标所涉及的步骤分解成可管理的区块。 逐步实施管道意味着您可以从一开始就体验到 CI/CD 的优势。
大多数团队的起点是持续集成。 CI 涉及到版本控制、分支策略、添加或扩展自动化测试覆盖范围,以及开始自动执行构建和测试等任务。 使用 CI 服务器可以帮助您协调这些活动、整理结果并实施逻辑,以自动执行构建和测试的连续阶段。
制定自动化 CI 流程后,您可以进一步实现持续交付或部署。
长远看来,自动执行环境创建可以节省时间,并提高您的管道的可靠性和稳健性。 您随后可以使用自动创建的环境运行更多自动化测试和人工测试。
实施期间和制定 CI/CD 策略后,您都可以分析 CI/CD 工具提供的数据并与团队成员互动,以确定改进流程的机会。 这种迭代方式可以确保实现持续改进,并最大限度地发挥 CI/CD 为您的团队和组织带来的优势。
采用这些 DevOps 最佳做法将帮助您最大限度地利用持续集成、交付和部署流程:
TeamCity 是一个 CI/CD 自动化平台,设计宗旨是帮助您构建和扩缩 CI/CD 管道。 无论您现有的构建和测试自动化水平如何,都可以轻松上手 TeamCity。
广泛集成所有主流版本控制系统、支持流行的构建和测试框架、采用直观的基于 Web 的 UI,这意味着您只需几分钟便可创建第一个管道。 全面支持“配置即代码”允许您通过 UI 生成所有管道定义并将其存储在版本控制中。
TeamCity 的高度可扩缩和高性能设计可以确保通过自动化测试快速获得反馈,同时,无论您的工作地点在哪,与主要 IDE 和消息传递平台的集成都可以提供通知。 广泛的安全功能可以帮助保护您的源代码和管道免受攻击。
随着您的流程的日趋成熟,您可以利用 TeamCity 的内置测试覆盖率报告、不稳定测试识别和构建代理统计数据来不断优化您的 CI/CD 流程。