在.gitlab.ci.yml中并行运行作业



基本上我目前在一个服务器上有5个测试许可证。当我手动触发测试脚本时,我有一个运行测试脚本的管道。连接license服务器,获取浮动license。这种方法现在很好,但很快我就会想要扩展它,这样当应用程序需要测试时,我就可以并行运行多个管道来运行多个测试。事情是这样的,我只是想有时候根据我需要测试的内容并行运行它们,我想手动触发每个管道。例如,有一天我可能只想在一个作业上运行测试脚本,因此这需要运行一个管道。另一天我可能想要同时运行3个作业,或者另一天我可能想要全天运行5个作业,但可能与正在运行的管道重叠,因此它需要运行自己的管道。

我的问题是,我该如何去设置这个gitlab yml文件。

如果有人能提供一个基本的例子,这将是有帮助的!

作为一般规则,同一阶段中的任何作业都是并行运行的。在这些作业中,您可以定义规则,指定给定作业何时运行。注意,需要手动启动作业将导致您的整个管道被列为"阻塞";当到达手动作业时。类似地,您需要将一些作业设置为allow_failure: true,否则它们将阻止下一阶段的执行。示例管道:


stages:
- build
- test
build_job:
image: alpine:latest
stage: build
script: 
- echo "hello world"
test_job_1: 
image: alpine:latest
stage: test
rules:
- when: manual
script: 
- echo "test 1"

test_job_2: 
image: alpine:latest
stage: test
rules:
- when: manual
script: 
- echo "test 2"

当你运行上面的管道时,你必须手动点击"play">

我要注意的是,这感觉像是一个反模式。听起来,您希望保留5个测试许可证,以确保不会有6个作业正在运行,并且由于没有免费许可证而导致作业失败的情况。如果是这样,这就是resource_group关键字要解决的用例之一。添加到同一资源组的作业不会并发运行(即使它们在不同的管道中),因此您可以有test_1资源组、test_2资源组等,并且这些作业总是自动并行运行,但是即使在不同的管道中也永远不会同时运行该作业的多个实例。这允许您确保只使用5个许可证,但您的测试仍然自动运行,而不需要手动触发它们,这还允许您更轻松地定义测试通过时要运行的下游作业。