【问题标题】:Execute multiple runners for single gitlab CI pipeline为单个 gitlab CI 管道执行多个运行器
【发布时间】:2022-06-12 16:36:08
【问题描述】:
我有一个 gitlab CI 配置为构建和部署代码到 3 个不同的服务器,在部署每个服务器之前只需进行微小的更改。在部署之前,我根据正在部署的服务器编辑一些文件,并从 CI 管道推送到同一个 repo。
为此,我想使用 3 个不同的运行器来运行,以便构建代码并将其部署到每个服务器,但找不到如何去做。
我可以使管道中的每个作业在多个运行器上并行运行(使用并行矩阵),但是作业运行的顺序(即首先在所有运行器上执行 1 个作业),更改不会持续到部署作业。
有没有办法可以触发多个跑步者执行相同的工作?或者是他们的解决方法。
【问题讨论】:
标签:
gitlab
devops
gitlab-ci
gitlab-ci-runner
gitlab-ci.yml
【解决方案1】:
为每个跑步者定义唯一的tags(例如deploy-win11、deploy-rhel8、deploy-solaris)。
创建一个template job 和三个扩展模板作业的作业(每个用于一个目标系统)。然后为这三个作业中的每一个定义required tags。
享受成功,每个作业都在自己的特定运行器上运行,部署正确版本的软件。
【解决方案2】:
我不确定我是否完全理解这个问题,但我认为你错过了stages。
您可以在.gitlab-ci.yml 中定义这样的阶段
(你可以随意命名):
stages:
- build
- test
- deploy
这样,管道将等到所有 build 作业完成后再运行 test 作业。
现在,您必须指定作业应在哪个阶段执行:
build_job_1:
variables:
NODE_OPTIONS: --max_old_space_size=8192
GIT_CLEAN_FLAGS: none
stage: build
tags:
- runner1
build_job_2:
variables:
NODE_OPTIONS: --max_old_space_size=4096
stage: build
tags:
- runner2