在 Gitlab 管道配置中,我使用
parallel:matrix
功能来进行构建作业配置和部署作业。但是,部署作业中的不同并行作业分别需要来自不同构建作业的工件。
即,
deploy:incremental [x]
需要build:incremental [a]
deploy:incremental [y]
需要build:incremental [a]
deploy:incremental [z]
需要build:incremental [b]
这是(减少的)构建工作:
build:incremental:
extends: .build_job_base
parallel:
matrix:
- BUILD_TASK: [a, b, c]
这是当前(减少的)部署作业:
deploy:incremental:
needs: [build:incremental]
extends: .deploy_job_base
parallel:
matrix:
- IMAGE_TAG: $CI_REGISTRY_IMAGE:x
DOCKER_FILE: Dockerfile1
DOCKER_IGNORE: .dockerignore1
- IMAGE_TAG: [$CI_REGISTRY_IMAGE:y, $CI_REGISTRY_IMAGE:z]
DOCKER_FILE: Dockerfile2
DOCKER_IGNORE: .dockerignore2
我现在想要实现的是,deploy:incremental 作业整体上不依赖于 build:incremental,但并行部署作业明确需要上面指定的构建作业。
我尝试了以下方法,但每次都遇到语法错误:
deploy:incremental:
needs:
- job: build:incremental
parallel:
matrix:
- BUILD_TASK: a
when:
- IMAGE_TAG: [$CI_REGISTRY_IMAGE:x, $CI_REGISTRY_IMAGE:y]
- BUILD_TASK: b
when:
- IMAGE_TAG: $CI_REGISTRY_IMAGE:z
extends: .deploy_job_base
parallel:
matrix:
- IMAGE_TAG: $CI_REGISTRY_IMAGE:x
DOCKER_FILE: Dockerfile1
DOCKER_IGNORE: .dockerignore1
- IMAGE_TAG: [$CI_REGISTRY_IMAGE:y, $CI_REGISTRY_IMAGE:z]
DOCKER_FILE: Dockerfile2
DOCKER_IGNORE: .dockerignore2
deploy:incremental:
needs:
- job: build:incremental
parallel:
matrix:
- BUILD_TASK: $DEPEND_ON
extends: .deploy_job_base
parallel:
matrix:
- IMAGE_TAG: $CI_REGISTRY_IMAGE:x
DOCKER_FILE: Dockerfile1
DOCKER_IGNORE: .dockerignore1
DEPEND_ON: a
- IMAGE_TAG: $CI_REGISTRY_IMAGE:y
DOCKER_FILE: Dockerfile2
DOCKER_IGNORE: .dockerignore2
DEPEND_ON: a
- IMAGE_TAG: $CI_REGISTRY_IMAGE:z
DOCKER_FILE: Dockerfile2
DOCKER_IGNORE: .dockerignore2
DEPEND_ON: b
deploy:incremental:
needs: [build:incremental $DEPEND_ON]
extends: .deploy_job_base
parallel:
matrix:
- IMAGE_TAG: $CI_REGISTRY_IMAGE:x
DOCKER_FILE: Dockerfile1
DOCKER_IGNORE: .dockerignore1
DEPEND_ON: a
- IMAGE_TAG: $CI_REGISTRY_IMAGE:y
DOCKER_FILE: Dockerfile2
DOCKER_IGNORE: .dockerignore2
DEPEND_ON: a
- IMAGE_TAG: $CI_REGISTRY_IMAGE:z
DOCKER_FILE: Dockerfile2
DOCKER_IGNORE: .dockerignore2
DEPEND_ON: b
现在我已经没有办法尝试了,担心我想要在这里实现的目标可能无法实现,但我觉得这可能是其他人以前遇到过的问题。所以也许有人有想法并且可以提供帮助
目前无法在needs:parallel:matrix中扩展变量。
gitlab 的 issues 中有一个未解决的问题 https://gitlab.com/gitlab-org/gitlab/-/issues/423553
您需要单独编写每个作业,或者在正确设置变量的情况下动态生成 yml 文件。