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

news/2024/7/17 4:23:24

目录

CI/CD 是什么?

CI/CD 有哪些最佳实践?

深入研究 CD 的最佳实践

如何改进 CI/CD 流水线?

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

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

CI/CD 部署策略

如何在组织中实施 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 是以自动化方式加速软件交付的步伐,但是需要以缓慢而平稳的心态开始整个过程。

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


https://www.xjx100.cn/news/3118804.html

相关文章

VSCode 代码调试

断点调试(debug): 指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错…

pytorch 多卡并行训练

目录 设置参数: 训练时参数: 调用命令: 设置参数: import argparseparser argparse.ArgumentParser()parser.add_argument(--batch_size, typeint, default64, helpBatch size for training)parser.add_argument(--local_rank…

layui 日期选择框弹出后消失

原因是窗口太小,日期窗碰撞边缘后会消失,解决方法是增加 trigger: click 属性。 laydate.render({ elem: #kp_date , type: date , trigger: click });

机器学习与 S3 相集成 :释放数据的力量

文章作者:Libai 引言 在当今数据驱动的世界中,企业不断寻求如何高效利用企业自身所产生的数据的解决方案。机器学习已经成为一种提取有价值的见解和做出数据驱动决策的强大工具。然而,机器学习模型的成功在很大程度上依赖于高质量数据的可用…

DDoS高防IP到底是什么?

DDoS高防IP是提供一个带防御的IP,主要是针对网络中的DDoS攻击进行保护,是针对互联网服务器遭受大流量的DDoS攻击后,导致服务不可用的情况下,用户可以通过配置高防IP,将攻击流量引流到高防IP上,从而确保源站…

SpringCloud原理-OpenFeign篇(四、请求原理)

文章目录 前言正文一、书接上回,从代理对象入手二、ReflectiveFeign.FeignInvocationHandler#invoke()三、SynchronousMethodHandler#invoke(...) 的实现原理3.1 invoke(...)源码3.2 executeAndDecode(...) 执行请求并解码 四、如何更换client 的实现 附录附1&#…

详细学习Pyqt5中的2种弹簧

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

数学 --笔试、面试高频

数学 排列组合 10个相同的糖果,分给三个人,每个人至少要得一个。有()种不同分法 10个糖果,中间正好9个空挡,从这9个空挡中任意取出2个作为分割点,正好能把糖果分为3份,并且保证每一份中至少有一个糖果。…