GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。

更多关于极狐GitLabhttps://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。

学习极狐GitLab 的相关资料:

  1. 极狐GitLab 官网https://gitlab.cn
  2. 极狐GitLab 官网文档https://docs.gitlab.cn
  3. 极狐GitLab 论坛https://forum.gitlab.cn/
  4. 极狐GitLab 安装配置https://gitlab.cn/install
  5. 极狐GitLab 资源中心https://resources.gitlab.cn

搜索【极狐GitLab】公众号,后台输入加群,备注gitlab,即可加入官方微信技术交流群。

极狐GitLab 公众号后台回复培训,进群申请极免费学习狐GitLab CI 培训课程。

CI/CD 流水线是一套在代码变更持续集成至仓库时,能够降低潜在研发风险的卓越解决方案。CI/CD 流水线可以帮助消除代码错误带来的影响,从而使错误更容易被修复,这是一款能保障运行任务可见性且大大提高生产效率的工具。

由于 CI/CD 流水线的主要目的是加快开发进程,从而更快地为终端用户提供价值,整个过程始终有提高效率的空间。本文将介绍一些技巧,能够帮助你更好地使用极狐GitLab CI 中流水线功能。

有向无环图 (DAG) 如何实现并发流水线

在这里插入图片描述在基本流水线结构中,同一个阶段的所有作业将同时运行,而后续作业必须等待前序作业完成后才能开始。所有阶段的作业都遵循这样的顺序。也就是说,上图中第二阶段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:,就可以将大型流水线分解为可管理的单元以进行高效维护。

通过父子流水线降低合并冲突风险

在这里插入图片描述

为了更好地管理依赖项,许多组织更喜欢为项目设置单一存储库。但是单一储存库也有不完善之处。如果用存储库托管大量项目,使用单个流水线定义来触发不同组件的不同自动化流程,流水线性能就会受到负面影响。通过使用基于父子项目的流水线,你可以拥有多个并行运行的子流水线,从而能设计更高效的流水线。使用关键字 include: 从而在包含外部 YAML 文件的CI/CD 配置中就可以达到这个目的。在上图中,父流水线通过关键字 trigger:include生成子流水线。

这种方法只允许在必要时编辑流水线的一部分,进而减少了发生合并冲突的机会。

合并列车让目标分支更加稳定

当有大量合并请求流入项目时,存在合并冲突的风险。合并列车是极狐GitLab 的一个强大功能,允许用户在不破坏目标分支的情况下自动合并一系列已在排队的合并请求。使用此功能时你可以在列车添加一个 MR,列车将会进行接管,直到MR被合并。

在同一个作业中使用多个缓存

从极狐13.11 版本开始,极狐GitLab CI/CD 提供在单个作业中配置多个缓存键的功能,从而提高流水线性能,并帮助你在作业运行时节省宝贵的开发时间。

高效的流水线如何为你降低成本?

通过使用 CI/CD 策略确保安全合并更改和绿色主机,企业就无需太担心由于基础设施故障和代码冲突导致的意外停机。

有了更高效的流水线,开发人员能够减少花在维护上的时间,将更多的时间和空间集中在创造富有想法和创新力的工作上,从而提升代码质量改善公司氛围并提升整体士气。

如果你希望降低为大型项目运行 CI/CD 流水线的成本,欢迎点击下方阅读原文,登陆官网了解更多内容,或是申请免费专业版30天试用体验。

更多关于极狐GitLab CI 的内容可以查看极狐GitLab CI 官网页面


极狐GitLab
64 声望36 粉丝

极狐(GitLab) 以“核心开放”为原则,面向中国市场,提供开箱即用的开放式一体化安全DevOps平台——极狐GitLab。通过业界领先的优先级管理、安全、风险和合规性功能,实现产品、开发、QA、安全和运维团队间的高效协同...