Gitlab CI/CD 中如何让并行作业需要不同的其他并行作业?

问题描述 投票:0回答:1

在 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,但并行部署作业明确需要上面指定的构建作业。

我尝试了以下方法,但每次都遇到语法错误:

  1. 在需求:并行:矩阵部分中指定:
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
  1. 参数化部署作业并行矩阵中的 BUILD_TASK 值:
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
  1. 通过指定并行作业的全名来参数化 BUILD_TASK
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

现在我已经没有办法尝试了,担心我想要在这里实现的目标可能无法实现,但我觉得这可能是其他人以前遇到过的问题。所以也许有人有想法并且可以提供帮助

gitlab-ci
1个回答
0
投票

目前无法在needs:parallel:matrix中扩展变量。

gitlab 的 issues 中有一个未解决的问题 https://gitlab.com/gitlab-org/gitlab/-/issues/423553

您需要单独编写每个作业,或者在正确设置变量的情况下动态生成 yml 文件。

© www.soinside.com 2019 - 2024. All rights reserved.