GitLab动态并行运行作业
我有一个项目,它会在遵循特定惯例的文件夹中生成go主文件。问题是,当存在代码推送时,我需要在Gitlab CI管道中并行构建这些项目,并且我无法在GitLab动态并行运行作业,gitlab,gitlab-ci,gitlab-ci-runner,Gitlab,Gitlab Ci,Gitlab Ci Runner,我有一个项目,它会在遵循特定惯例的文件夹中生成go主文件。问题是,当存在代码推送时,我需要在Gitlab CI管道中并行构建这些项目,并且我无法在.Gitlab CI.yml中硬编码它们,因为它们是动态生成的。我需要并行构建这些go项目,如果所有单个项目构建都成功,我需要通过构建阶段。有人能告诉我这在Gitlab中是否可行。不幸的是,Gitlab CI不支持这一点,它似乎符合。正如本期和@Jakub中提到的,我正在寻找类似这样的解决方案(某种全局或模板解决方案),以便能够动态并行作业: buil
.Gitlab CI.yml
中硬编码它们,因为它们是动态生成的。我需要并行构建这些go项目,如果所有单个项目构建都成功,我需要通过构建阶段。有人能告诉我这在Gitlab中是否可行。不幸的是,Gitlab CI不支持这一点,它似乎符合。正如本期和@Jakub中提到的,我正在寻找类似这样的解决方案(某种全局或模板解决方案),以便能够动态并行作业:
build_%:
image: dnd
stage: build
glob: microservices/*/Dockerfile
context: microservices/{1}
script:
- docker build {1}
parallel: true
因此,我决定暂时使用Gitlab CI,直到Gitlab CI提供一个解决方案。我等得太久了……否则就得开始寻找jenkins job DSL插件了。现在也可以使用。 可以使用YTT为子管道生成YAML配置文件,但只要提供有效的YAML文件,就可以使用任何生成方法 .gitlab-ci.yml config-template.yml config-template-values.yml
Gitlab CI允许您运行所需的任何脚本。在bash中使用
find
和parallel
无法解决的问题上,您必须展开您正在努力解决的问题。是否要将每个项目作为单独的作业运行?原因到目前为止不受支持:。当然,这是可以做到的,但解决方案不会很好。
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
#@ load("@ytt:data", "data")
stages:
- test
#@ for service in data.values.services:
#@yaml/text-templated-strings
(@= service @)-test:
stage: test
script:
- #@ "test " + service
#@ end
#@data/values
---
services: []