CI/CD 流水线是一套在代码变更持续集成至仓库时,能够降低潜在研发风险的卓越解决方案。CI/CD 流水线可以帮助消除代码错误带来的影响,从而使错误更容易被修复,这是一款能保障运行任务可见性且大大提高生产效率的工具。
由于 CI/CD 流水线的主要目的是加快开发进程,从而更快地为终端用户提供价值,整个过程始终有提高效率的空间。本文将介绍一些技巧,能够帮助你更好地使用极狐 GitLab CI 中流水线功能。
为需要利用到先前阶段结果的工作定义依赖关系
在基本流水线结构中,同一个阶段的所有作业将同时运行,而后续作业必须等待前序作业完成后才能开始。所有阶段的作业都遵循这样的顺序。也就是说,上图中第二阶段 Test 的第一个作业需要等到第一阶段 BUILD 的三个作业全部完成才能开始,这大大减慢了整个流水线的速度。
但是在极狐 GitLab 平台,通过使用关键词 needs:
,您可以为作业定义直接依赖关系,后续作业(如 Test 作业 2)只需等待相关联的作业(Build 作业 3)完成即可开始。通过使用 DAG 策略,您可以从某个项目的流程中节省几分钟,从而提高流水线执行速度并降低 CI 分钟消耗。
通过使用 needs: []
您可以让任何阶段的工作无需等其他工作完成就能立即运行。
并非流水线中的所有作业都需要运行相同的时间,有些项目可能只需要几秒钟,有些则需要更长的时间才能完成。当一个团队有很多成员需要等待前序作业完成后才能继续进行项目时,整个团队的生产效率就会大幅降低。
极狐 GitLab 提供了一种方法来克隆作业,并使用关键词 parallel:
使其并行运行从而加快执行速度。并行作业可能无法减少 CI 每分钟的消耗,但一定能帮助提高工作效率。
在发布并行矩阵作业之前,为了运行多个包含不同变量的作业实例,必须在 .gitlab-ci-yml
中手动定义作业,如下所示:
.run-test:
script: run-test $PLATFORM
stage: test
test-win:
extends: .run-test
variables:
- PLATFORM: windows
test-mac:
extends: .run-test
variables:
- PLATFORM: mac
test-linux:
extends: .run-test
variables:
- PLATFORM: linux
极狐 GitLab 13.3 版本发布了并行矩阵作业,可以让你根据指定的变量在运行时创建作业。假设需要同时运行多个实例,每个实例具有不同的变量值,那么结合 parallel:
和 matrix:
您就可以做到这一点。
test:
stage: test
script: run-test $PLATFORM
parallel:
matrix:
- PLATFORM: [windows, mac, linux]
通过使用 parallel:
和 matrix:
,就可以将大型流水线分解为可管理的单元以进行高效维护。
父流水线通过关键字 trigger:include 生成子流水线
为了更好地管理依赖项,许多组织更喜欢为项目设置单一存储库。但是单一储存库也有不完善之处。如果用存储库托管大量项目,使用单个流水线定义来触发不同组件的不同自动化流程,流水线性能就会受到负面影响。通过使用基于父子项目的流水线,你可以拥有多个并行运行的子流水线,从而能设计更高效的流水线。使用关键字 include: 从而在包含外部 YAML 文件的 CI/CD 配置中就可以达到这个目的。在上图中,父流水线通过关键字 trigger:include 生成子流水线。
这种方法只允许在必要时编辑流水线的一部分,进而减少了发生合并冲突的机会。
当有大量合并请求流入项目时,存在合并冲突的风险。合并列车是极狐 GitLab 的一个强大功能,允许用户在不破坏目标分支的情况下自动合并一系列已在排队的合并请求。使用此功能时你可以在列车添加一个 MR,列车将会进行接管,直到 MR 被合并。
从极狐 13.11 版本开始,极狐 GitLab CI/CD 提供在单个作业中配置多个缓存键的功能,从而提高流水线性能,并帮助你在作业运行时节省宝贵的开发时间。
通过使用 CI/CD 策略确保安全合并更改和绿色主机,企业就无需太担心由于基础设施故障和代码冲突导致的意外停机。
有了更高效的流水线,开发人员能够减少花在维护上的时间,将更多的时间和空间集中在创造富有想法和创新力的工作上,从而提升代码质量改善公司氛围并提升整体士气。
如果你希望降低为大型项目运行 CI/CD 流水线的成本,欢迎登陆官网了解更多内容,或是申请免费专业版60天试用体验。
*本文翻译自 GitLab 官方博客:How to become more productive with Gitlab CI