GitLab 动态并行运行作业

Ven*_*tta 1 gitlab gitlab-ci gitlab-ci-runner

我有一个项目,它在遵循特定约定的文件夹中生成 go main 文件。问题是,当有代码推送时,我需要在 Gitlab CI 管道中并行构建这些项目,并且我无法对它们进行硬编码,.gitlab-ci.yml因为它们是动态生成的。我需要并行构建这些 go 项目,并且如果所有单个项目构建都成功,则需要通过构建阶段。有人可以告诉我在 Gitlab 中是否可行吗?

小智 6

现在使用子管道功能也可以实现这一点。您可以使用 YTT 为子管道生成 YAML 配置文件 - 但只要您提供有效的 YAML 文件,就可以使用任何生成方法。

.gitlab-ci.yml

generate-config:
  stage: build
  script: ytt -f config-template.yml -f config-template-values.yml --data-value-yaml services="[${SERVICES}]" > generated-config.yml # with SERVICES=service1,service2
  artifacts:
    paths:
      - generated-config.yml

child-pipeline:
  stage: test
  trigger:
    include:
      - artifact: generated-config.yml
        job: generate-config
Run Code Online (Sandbox Code Playgroud)

配置模板.yml

#@ load("@ytt:data", "data")
stages:
  - test
#@ for service in data.values.services:
#@yaml/text-templated-strings
(@= service @)-test:
  stage: test
  script:
    - #@ "test " + service
#@ end
Run Code Online (Sandbox Code Playgroud)

配置模板值.yml

#@data/values
---
services: []
Run Code Online (Sandbox Code Playgroud)