【问题标题】:How do I run a single job for pushes and a `matrix` job for schedules?如何为推送运行单个作业并为日程安排运行“矩阵”作业?
【发布时间】:2021-10-20 05:20:54
【问题描述】:

说,我的.gitlab-ci.yml 中有这个工作配置,利用parallel matrix 工作:

job:
  image: $IMAGE
  parallel:
    matrix:
      - ARCHIVE: ["archive-a.tgz", "archive-b.tgz" ]
        IMAGE: ["image1", "image2"]
  script:
    - echo $ARCHIVE $IMAGE

我需要如何改变它以便:

  • 对于推送,只运行一个作业 (archive-a.tgz + image1)
  • 对于调度,四个作业运行

【问题讨论】:

    标签: gitlab gitlab-ci


    【解决方案1】:

    您可以通过使用规则来实现这一点: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"
    
    

    【讨论】:

    • 谢谢!第三个选项最适合我,所以我现在有一个基本模板作业和两个正在扩展它的实际工作人员?。
    猜你喜欢
    • 2018-04-28
    • 1970-01-01
    • 2014-01-25
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 2021-03-20
    相关资源
    最近更新 更多