高效精简GitLab CI/CD配置文件
使用两组关键字,避免冗余的、易出错的GitLab持续集成配置文件。

实际项目中经常会出现一套项目代码需要适配多种编译环境的状况。例如跨平台移植要完成ARM64与X64的适配;支持不同的硬件加速器如CUDA、ASCEND NPU、Rockchip NPU等。时间一久,持续集成的配置文件变得越来越冗长,而且其中有众多的重复项目,修改起来非常繁琐且易出错。
这篇文章展示了如何使用GitLab提供的两个抽象功能来精简配置文件,让CI/CD配置更加清晰高效。
假设一个C++工程使用预定义变量 ENABLE_BOT
来控制代码的两种不同行为。在CI/CD配置文件中使用以下内容来实现条件性构建。
image: yinguobing/opencv:4.5.4-devel-ubuntu22.04
build option1:
stage: build
before_script:
- mkdir _build
script:
- cmake -S . -B _build -DENABLE_BOT=ON
- cmake --build _build
artifacts:
paths:
- _build/efficient-gitlab-cicd
build option2:
stage: build
before_script:
- mkdir _build
script:
- cmake -S . -B _build -DENABLE_BOT=OFF
- cmake --build _build
artifacts:
paths:
- _build/efficient-gitlab-cicd
.gitlab-ci.yaml
该配置文件可以正常工作,并且在每次提交后生成两项流水线任务如下图。

但是这份配置文件中存在明显的多处重复项目。优化的第一步,就是把这些完全相同的项目提取出来。