【发布时间】:2021-10-25 23:59:07
【问题描述】:
使用 Jenkins 声明式管道,您可以遍历地图以运行每个元素的阶段:
https://newbedev.com/for-loop-in-jenkins-pipeline-code-example
有没有办法用 GitLab CI 做到这一点?
【问题讨论】:
使用 Jenkins 声明式管道,您可以遍历地图以运行每个元素的阶段:
https://newbedev.com/for-loop-in-jenkins-pipeline-code-example
有没有办法用 GitLab CI 做到这一点?
【问题讨论】:
可以用矩阵,也是一样的逻辑。
【讨论】:
我知道这已经得到了回答,但我仍然会添加一些细节等。一般来说,只有链接不是好的答案,因为它们可能指向未来的任何地方。
正如@Joao Vitorino 所说,有一个名为matrix builds 的功能,可以通过以下方式轻松实现
jobs:
parallel:
matrix:
- ENVIRONMENT:
- 'test'
- 'foo'
script: echo $ENVIRONMENT
这将生成两个作业,一个用于test,一个用于foo,并分别打印出选项。有关详细信息,请参阅:https://docs.gitlab.com/ee/ci/yaml/#parallel-matrix-jobs 您还可以执行多个变量和连接,例如:
# copied from the official gitlab docs
parallel:
matrix:
- PROVIDER: aws
STACK:
- monitoring
- app1
- app2
- PROVIDER: ovh
STACK: [monitoring, backup, app]
- PROVIDER: [gcp, vultr]
STACK: [data, processing]
这很可能会解决您的所有问题。除此之外,parallel:matrix 也适用于trigger。这意味着您可以创建一个完整的管道,该管道将使用您的属性作为child pipeline 触发,例如:
jobs:
parallel:
matrix:
- ENVIRONMENT:
- 'test'
- 'foo'
trigger:
include:
- local: path/to/child-pipeline.yml
strategy: depend
这将生成两个子管道,您可以在其中添加更多的步骤和逻辑,比普通的matrix:parallel-builds 更简单
【讨论】: