在 Gitlab 管道中动态包含/排除作业

时间:2021-04-19 21:37:56

标签: gitlab gitlab-ci

我有一个包含几个阶段的流水线:detect, test, build, deploy

detect 阶段检测应用程序的类型,testbuild 阶段根据 detect 中的计算结果包含或排除作业。 detect 阶段将其值写入名为 BUILD_MODE 的环境变量。

我像这样使用 rules

ng-build:
  extends:
    - '.ng/job/build'
  stage: build
  rules:
    - if: $BUILD_MODE == "ANGULAR"
      when: always

npm-build:
  extends:
    - '.npm/job/build'
  stage: build
  rules:
    - if: $BUILD_MODE == "NPM"
      when: always

这样做的问题是,在 BUILD_MODE 阶段运行之后创建管道时,会静态评估 detect 变量,因此除非我在顶级 YML 中明确设置变量,否则上述方法永远不会起作用像这样的文件:

variables:
 BUILD_MODE: "ANGULAR"

解决这个问题的最佳方法是什么?我想要做的总结是评估一些条件,要么动态设置阶段,要么在创建管道线中的阶段之前设置变量本身,以便使用正确评估的规则创建它们。

1 个答案:

答案 0 :(得分:1)

你可以看看dynamic child-pipelines。也许您可以通过动态创建 npm/ng 构建作业来解决您的问题。