使用一条 CI/CD 流水线管理所有的产品
创始人
2024-03-02 05:22:29
0

统一的持续集成与持续交付的流水线的构想是一种梦想吗?

当我加入 WorkSafeBC 负责云端运维和工程流程优化的云端运维团队时,我和大家分享了我的梦想,那就是一个工具化的流水线,每一个产品都可以持续集成和持续交付。

根据 Lukas Klose 的说法, 流程 flow (在软件工程的语境内)是“软件系统以稳定和可预测的速度创造价值的状态”。我认为这是最大的挑战和机遇之一,特别是在复杂的新兴解决方案领域。我力求通过一种持续、高效和优质的解决方案,提供一种持续交付模式,并且能够构建正确的事物让我们的用户感到满意。想办法把我们的系统分解成更小的碎片,这些碎片本身是有价值的,使团队能够渐进式地交付价值。这需要业务和工程部门改变思维方式。

持续集成和持续交付的(CI/CD)流水线

CI/CD 流水线是一种 DevOps 实践,用于更频繁、一致、可靠的地交付代码变更。它可以帮助敏捷开发团队提高部署频率,减少变更准备时间变更失败率和关键绩效指标(KPI)的平均恢复时间,从而提高质量并且实现更快的交付。唯一的先决条件就是坚实的开发流程、对质量的心态和对需求从构想到废弃的责任心,以及一个全面的流水线(如下图所示)。

Prerequisites for a solid development process

它简化了工程流程和产品,以稳定基础架构环境;优化工作流程;并创建一致的、可重复的、自动化的任务。正如 Dave Snowden 的 Cynefin Sensemaking 模型所说的那样,这样就允许我们将复杂不可解决的任务变成了复杂可解决的任务,降低了维护成本,提高了质量和可靠性。

精简流程的一部分是将 浪费实践类型 wasteful practice types Muri(过载)、Mura(变异)和 Muda(浪费)的浪费降低最低。

  • Muri(过载):避免过度工程化,避免与商业价值不相关的功能以及过多的文档。
  • Mura(变异):改善审批和验证流程(比如,安全签批);推动 左移提前 shift-left 策略以推行单元测试、安全漏洞扫描与代码质量检查;并改进风险评定。
  • Muda(浪费):避免技术债、错误或前期的详细文档等浪费。

看起来 80% 的重点都集中在提供一种可以集成和协作的工程产品上,这些系统可以采用一个创意和计划、开发、测试和监控你的解决方案。然而,一个成功的转型和工程系统是由 5% 的产品、15% 的过程和 80% 的开发人员组成的。

我们可以使用的产品有很多。比如,Azure DevOps 为持续集成(CI)、持续交付(CD)和可扩展性提供了丰富支持,并与 Stryker、SonarQube、WhiteSource、Jenkins 和 Octopus 等开源集成和商用成品(COTS)软件即服务(SaaS)进行集成。对于工程师来说,关注产品总是一种诱惑,但请记住,它们只是我们旅程的 5%。

5% about products, 15% about process, 80% about people

最大的挑战是打破数十年的规则、规定和已经步入舒适区的流程:“我们一直都是这样做的;为什么需要改变呢?

开发和运维人员之间的摩擦导致了各种支离破碎的、重复的、不间断的集成和交付流水线。开发人员希望能访问所有东西,以便持续迭代,让用户使用起来和持续地快速发布。运维人员希望将所有东西锁起来,保护业务、用户和品质。这些矛盾在不经意间导致了很难做到一种自动化的流程,进而导致发布周期晚于预期。

让我们使用最近的一次白板讨论中的片段来探索流水线。

想要支持流水线的变化是一项困难并且花费巨大的工作;版本和可追溯性的不一致使得这个问题变得更加复杂,因此不断精简开发流程和流水线是一项挑战。

我主张一些原则使得每个产品都能使用通用流水线:

  • 使一切可自动化的东西都自动化
  • 一次构建
  • 保持持续集成和持续交付
  • 保持持续精简和改进
  • 保持一个构建的定义
  • 保持一个发布流水线的定义
  • 尽早、频繁地扫描漏洞,并且尽快失败
  • 尽早、频繁地进行测试,并且尽快失败
  • 保持已发布版本的可追踪和监控

但是,如果我要打破这些,最重要的原则就是保持简单。如果你不能说明流水线化的原因(是什么、为什么)和过程(如何),你或许是不了解自己的软件过程的。我们大多数人想要的不是最好的、超现代的和具有革命意义的流水线 —— 我们仅仅是需要一个功能强大的、有价值的和能促进工程的流水线。首先需要解决的是那 80% —— 文化、人员和他们的心态。请你的 CI/CD 骑士们穿上闪亮的盔甲,在他们的盾牌上贴上 TLA( 两个/三个字母的缩写 two/three-lettered acronym )符号,加入到实践和经验工程的力量中来。

统一流水线

让我们逐步完成我们的白板会议实践。

每个应用使用一套构建定义来定义一个 CI/CD 流水线,用来触发拉取请求的预合并验证持续集成的构建。生成一个带有调试信息的发布的构建,并且将其上传到 符号服务器。这使开发人员可以在本地和远程生产环境进行调试,而在不用考虑需要加载哪个构建和符号,符号服务器为我们施展了这样的魔法。

在构建过程中进行尽可能多的验证(左移提前),这允许开发新特性的团队可以尽快失败,不断的提高整体的产品质量,并在拉取请求中为代码审核人员提供宝贵证据。你喜欢有大量提交的拉取请求吗?还是一个带有少数提交和提供了漏洞检查、测试覆盖率、代码质量检查和 Stryker 突变残余等支持的拉取请求?就我个人而言,我投后者的票。

Breaking down the CD release pipeline

不要使用构建转换来生成多个特定环境的构建。通过一个构建实现发布时转换标记化和 XML/JSON 的值替换。换句话说,右移滞后具体环境的配置。

Shift-right the environment-specific configuration

安全存储发布配置数据,并且根据数据的信任度敏感度,让开发和运维都能使用。使用开源的密钥管理工具、Azure 密钥保险库、AWS 密钥管理服务或者其他产品,记住你的工具箱中有很多方便的工具。

Dev-QA-production pipeline

使用用户组而不是用户,将审批人管理从跨多个流水线的多个阶段移动到简单的组成员。

创建一条流水线并且对赋予特定的交付阶段的权限,而不是重复流水线让团队进入他们感兴趣的地方。

Pipeline with access to specific delivery stages

最后,但并非最不重要的是,拥抱拉取请求,以帮助提高对代码仓库的洞察力和透明度,增进整体质量、协作,并将预验证构建发布到选定的环境,比如,开发环境。

这是整个白板更正式的视图。

所以,你对 CI/CD 流水线有什么想法和经验?我的通过一条流水线来管理它们的这个梦想是空想吗?


via: https://opensource.com/article/19/7/cicd-pipeline-rule-them-all

作者:Willy-Peter Schaub 选题:lujun9972 译者:chunibyo-wly 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

伊朗伊斯兰革命卫队总司令萨...
▲伊朗伊斯兰革命卫队总司令侯赛因·萨拉米 资料图片 图据视觉中国 ...
2025-06-13 20:15:24
“四链”人才共话AI赋能科...
本报讯(记者 武红利)昨天,IQ Talk轻社交活动举行,以“科学...
2025-06-13 07:12:36
出行平台滴滴今天推出智能体...
观点网讯:6月10日,出行平台滴滴推出智能体AI小滴,这是针对差旅...
2025-06-10 15:42:11
【Git】pull 分支报...
报错消息 示例图: 示例代码: ➜ ...
2025-06-01 18:31:43
蓝桥杯嵌入式--LCD屏幕...
前言之前在专栏里已经介绍过LCD相关库文件的移植,今...
2025-06-01 03:21:25
MySQL OCP888题...
文章目录1、原题1.1、英文原题1.2、中文翻译1.3、答案2、题...
2025-05-31 23:45:38

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...