我们的应用部署到 k8s 集群是通过 tag 选择对应的 gitlab-runner 执行部署脚本完成,现在我们同时使用了2个 k8s 集群,对于同一个 tag,需要由 2 个 gitlab-runner 同时执行部署脚本,请问如何实现?
gitlab runner 13.3 有个叫矩阵(matrix)的东西
how-to-become-more-productive-with-gitlab-ci#break-down-big-pipelines-with-parallel-matrix-jobs
没实际试过但是应该长的类似下面这样
部分.gitlab.ci.yml
.deploy-prod
stage: deploy
...
script:
- deploy.sh
only:
refs:
- /^v\d+\.\d+\.\d+/
deploy-prod-main:
extends: .deploy-prod
tags:
- prod-main
deploy-prod-sub:
extends: .deploy-prod
tags:
- prod-sub
@Laggage: 通过 parallel:matrix
搞定了,.gitlab-ci.yml 中的配置如下:
deploy-prod:
stage: deploy
tags:
- k8s-prod
variables:
DEPLOY_RUNNER: ${DEPLOY_RUNNER}
parallel:
matrix:
- DEPLOY_RUNNER: [kube-master0, k8s-master0]
parallel:matrix
实际就是给 gitlab-ci CI/CD 变量设置不同的值,变量通过 variables 定义,gitlab-ci 会启动不同的 gitlab-runner 以 parallel:matrix 中指定的各个值运行同一个 job。
上面的 DEPLOY_RUNNER
变量在部署中并没有实际用到,只是为了欺骗 gitlab-runner 以实现多个 runner 运行同一个 job。
pipeline 执行效果如下:
gitlab 的帮助文档对这个特性的说明太敷衍了,后来还是通过 stackoverflow 上的 multi stage gitlab matrix pipeline 中的配置弄明白的。
@Laggage: 定义 2 个 job,通过 extends
重用重复的配置,也是一种解决方法
stakoverflow 上的相同问题:Gitlab-Runner: Run the same job with multiple runners
– dudu 2年前