CI/CD 最佳实践,让研发团队效率起飞!

本文来源: about.gitlab.com
作者: Valerie Silverthorne
译者: 极狐(GitLab) 市场部内容团队

CI/CD 是 DevOps 成功实践的核心,想要实现现代化应用程序开发的团队,必须遵从 CI/CD 最佳实践。如何确保团队正确使用 CI/CD?以下内容供你参考。

CI/CD 是什么?

CI/CD 既是技术流程,又是一种思想,还是一系列步骤......CI/CD 包括以上全部内容。简而言之,CI/CD 能让 DevOps 团队通过自动化来简化代码提交。

  • CI(持续集成) 简化了软件构建和源代码集成,实现版本控制,并通过自动化促进良好协作;
  • CI 结束后,持续交付(CD)开始自动化测试和部署。CD 不仅减少了花费在交付和部署过程中因手动操作所带来的诸多弊端,还能够让团队在管理软件生命周期方面,极大减少所使用的工具数量。

CI/CD 有哪些最佳实践?

如果想用 CI/CD 来获得成功,那就让持续集成、持续交付及持续部署成为团队的习惯,因为它们是软件研发实践的基石。DevOps 的目标就是更快将软件交付给用户,而 CI/CD 实践将让这一切变为现实。

如果问 10 个 DevOps 团队的 CI/CD 实践,会得到 10 个不同答案。但以下几个方面都是大家一致推崇的:

  1. 只构建一次: 不要为每个阶段创建一个新构建,这会带来不一致风险。在 CI/CD 流水线中,推荐使用同一个构建制品(与环境无关的构建);
  2. 简化测试: 在测试覆盖率和性能之间取得平衡。如果花费很长时间才能出现测试结果,用户则会试图绕开这些流程;
  3. 快速失败: 在 CI 侧,提交代码的研发人员需要尽快得知他们提交的代码是否有问题,以便还能在熟悉这些代码的时候快速回滚和修复。“快速失败” 理念帮助开发人员减少上下文切换,让 DevOps 专业人员更加快乐;
  4. 每天提交: 代码提交越规律,DevOps 团队将能看到越多价值;
  5. 有问题就修复: CI/CD 让修复失败构建变得更加简单;
  6. 清空预生产环境: 环境持续运行时间越长,越难追踪应用在环境上的配置变更和更新。在每次部署之间都清空预生产环境是好习惯;
  7. 始终自动化: 不断调整 CI/CD 流水线以确保实现持持续自动化;
  8. 明确步骤: 确保版本发布和回滚计划明确写进文档,并被整个团队理解;
  9. 保持安全: CI/CD 是一种左移,因此它提供了一个很好的机会,将安全集成到早期流程中;
  10. 反馈循环: 确保整个团队有一个简单办法来接受(或者贡献)反馈。

深入研究 CD 的最佳实践

CD(持续交付/部署)也值得深入研究一下它们的最佳实践,尽管风头总是被 CI 抢走了。以下是 CD 的最佳实践:

  • 立即开始: 不要等新平台,从现有的开始调整,让它们变得更快、更高效;
  • 少即是多: 最好的 CD 是用最少的工具完成的;
  • 追踪正在发生的事情: Issue 和 Merge Request 可能会失控,但 Milestone 可以提供帮助的,例如在设置敏捷冲刺和发布时,Milestone 具有双重作用:帮助跟踪正在进行的所有事项;进行有计划的交付;
  • 自动化部署变更: 通过自动化简化用户验收测试和 staging 环境部署;
  • 管理发布流水线: 自动化一切;
  • 建立监控: 密切关注生产流程能够节约时间和金钱,还能够对业务侧提供关键数据;
  • 启动持续部署: 一旦启动持续交付,就把手从部署上拿开,通过自动化将变更部署到生产环境。

如何改进 CI/CD 流水线?

所谓流水线,其实只是一种描述部署新版本软件所涉及到的一系列步骤的方式。监控和自动化被引入到 CI/CD 中,用以改进应用程序开发流程,特别是在集成和测试阶段,以及软件交付和部署阶段。

一个典型的 CI/CD 流水线应具有这些元素:计划、分析、设计、构建、测试、发布、部署、验证、合规及维护。这些步骤都可以手动实现,但是 CI/CD 流水线的价值体现在自动化。

如果要微调 CI/CD 流水线,可以考虑通过以下几点来增强性能:

  • 混合发布策略。 金丝雀发布(或金丝雀部署)或许值得考虑。在金丝雀发布中,只有特定用户群体能看到新功能特性部署。
  • 增加更多自动化测试,因为自动化测试用不嫌多。
  • 持续做减法。 更少的工具意味着更少的手动操作和步骤。如果 CI/CD 是 DevOps 平台的一部分,那么一切都应该在一个平台上。
  • 将软件组件分析视为常规实践,以确保 DevOps 团队持续追踪重要的开源软件问题。

如何衡量 CI/CD 是否成功?

DevOps 团队可能不知道他们的 CI/CD 实践运行如何,除非能够衡量它们。指标在改进系统性能及帮助识别何处可以增加价值时,扮演了非常重要的角色,还为任何改进的影响提供了基准。

以下是一些衡量 CI/CD 是否成功的指标:

➤ 循环周期

指从开始编写代码到推出功能特性需要的时间。

为计算出循环周期平均时长,需衡量研发流程整个阶段。该指标提供总体开发时长以及过程瓶颈的洞察。

➤ 价值实现时间

指发布编写的代码需要多长时间。集成、测试、交付及部署应该需要几分钟到几小时才能完成测试周期。如果 CI/CD 流水线的构建需要数天才能完成,则无法实现价值,需要对整个流程进行调整。

➤ 持续运行时长

正常运行时长是对稳定性及可靠性的一种衡量,这是运维团队首要任务之一。

当 CI/CD 策略自动化时,运维负责人就可以将更多时间聚焦在系统稳定性上,而在工作流问题上花费更少时间。

➤ 错误率

应用程序错误率是研发过程中的一个既定事实。追踪错误率非常重要,因为错误率不仅能够指出质量问题,还可以指示连续的性能问题以及与正常运行时间有关问题。

如果持续运行时长和错误率都很高,说明开发团队和运维团队之间存在常见的 CI/CD 挑战。

➤ 基础设施成本

在云原生开发中,基础设施成本非常重要。如不加以控制,部署和管理一个 CI/CD 平台会带来巨大成本。为了确定它们如何定价,云厂商将考虑网络硬件、基础设施维护及人力成本。

➤ 团队留存率

众所周知:当开发人员或者任何一个人真切感受到自己的价值和被重视的时候,他们会留下来。

当团队默契协作,那么留存是必然结果。相反,开发者合作不顺畅、进展缓慢等,他们可能会感到不舒服。通过查看团队留存率,可以发现潜在问题。

遵循 CI/CD 最佳实践有哪些收益?

当遵循最佳实践时,CI/CD 的好处会贯彻整个组织:

从 HR 到运维,团队能够更好的工作并达到最终目的;围绕 CI/CD 性能建立指标不仅可以提供有关开发的洞察,还可以延伸到业务的诸多方面;一个功能良好的 CI/CD 流水线能够改变 DevOps 团队的游戏规则。

以下是一些巨大的优势:

开发人员不是在修东西,而是在写代码。 越少的工具和工具链意味着在工具维护上花更少时间,从而将更多时间用于在生产高质量软件。

代码即生产。 不要让代码排队等待,而应该立马进入真实世界。这能让开发人员收到及时反馈的成就感。

开发人员可以专注于解决业务问题。 简化的 CI/CD 流水线能够让开发者真正聚焦在重要的事情上,而不是让问题代码、繁琐的手动操作、生产问题等其他事项来分散注意力。

更容易创新。 这是一个充满竞争的世界,组织需要所有可用的工具来勇立潮头。一个构建良好的 CI/CD 流程能够让软件研发更容易、更快和更安全,这也意味着 DevOps 团队有更多时间和精力去创新。

吸引并留下人才。 人力市场的竞争激烈,DevOps 人才难以被打动。与其画大饼说 “我们很重视 DevOps 团队”,不如围绕 CI/CD 流程和技术来进行一些实际投资。

每一个人发挥所长。 CI/CD流水线帮助研发、运维、安全以及测试各司其职,发挥所长。

CI/CD 部署策略

请记住,CI/CD 的目标是更快、更好地将软件交付到客户手中,提高生产力。诀窍在于采用在企业内部行之有效的部署策略。以下是一些让 CI/CD 成功的策略:

  • 频繁提交代码;
  • 自动化构建流程;
  • 并行运行测试,并构建一个部署流水线;
  • 快速失败并且采取左移措施,为开发人员提供技能和工具,以便在不破坏整体流程的基础上实现加速;
  • 使用能够快速获得反馈的 CI 工具。

如何在组织中实施 CI/CD?

在实施任何软件之前,关键是要确定业务驱动因素是什么,采用 CI/CD 也是如此,所有研发相关者都应该尽早参与实施过程。研发人员应该提供意见,因为他们将是产品的主要用户。

虽然这看起来有违直觉,因为 CI/CD 是以自动化方式加速软件交付的步伐,但是需要以缓慢而平稳的心态开始整个过程。

在集成过程中保持一致性很重要。执行单元测试、手动发版以及追踪指标。然后决定什么可以自动化、什么应该自动化。

你可能感兴趣的:(CI/CD 最佳实践,让研发团队效率起飞!)