您可以通过使用规则来实现这一点:https://docs.gitlab.com/ee/ci/yaml/#rules
喜欢:
job:
image: $IMAGE
parallel:
matrix:
- ARCHIVE: ["archive-a.tgz", "archive-b.tgz" ]
IMAGE: ["image1", "image2"]
script:
- echo $ARCHIVE $IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $ARCHIVE == "archive-a.tgz" && $IMAGE == "image1"'
- if: $CI_PIPELINE_SOURCE == "schedule"
虽然这不是一个真正漂亮的解决方案,但它适用于您的情况 - 您也可以尝试否定它并使用when: never。根据rules 定义,这也应该有效:
在创建管道时评估规则,并按顺序评估规则,直到第一次匹配。找到匹配项后,该作业将包含在管道中或从管道中排除,具体取决于配置。
job:
image: $IMAGE
parallel:
matrix:
- ARCHIVE: ["archive-a.tgz", "archive-b.tgz" ]
IMAGE: ["image1", "image2"]
script:
- echo $ARCHIVE $IMAGE
rules:
- if: '$ARCHIVE == "archive-a.tgz" && $IMAGE == "image1"'
when: never
- when: always
免责声明:我提供的 sn-ps 未经测试!
第三种选择是一个中间作业,它持有逻辑,并有两个具有自己的规则的专用作业,例如并提供变量。有很多方法可以实现这一点,您必须看看哪一种最适合您的情况。
.job:
image: $IMAGE
script:
- echo $ARCHIVE $IMAGE
matrix:
extends: .job
parallel:
matrix:
- ARCHIVE: ["archive-a.tgz", "archive-b.tgz" ]
IMAGE: ["image1", "image2"]
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
push:
extends: .job
variables:
ARCHIVE: "archive-a.tgz"
IMAGE: "image1"
rules:
- if: $CI_PIPELINE_SOURCE == "push"