【问题标题】:How to pass array variables to parallel matrix in GitLab CI pipeline?如何将数组变量传递给 GitLab CI 管道中的并行矩阵?
【发布时间】:2023-01-26 05:51:06
【问题描述】:

尝试配置并行测试。有没有办法将变量设置为数组并在矩阵中使用它?例如:

stages:
- test

variables:
  SUITES: $SUITES

test:
  stage: test
  image: $CI_REGISTRY_IMAGE
  parallel:
    matrix:
      - SUITE: [$SUITES]
  script:
    - pytest -m ${SUITE} --json-report --json-report-file=${SUITE}_report.json
  artifacts:
    when: always
    paths:
      - "${SUITE}_report.json"
    expire_in: "1 day"

这个案例是为每个作业并行运行套件和工件。也许,我看错地方了?

【问题讨论】:

    标签: pytest gitlab-ci pipeline


    【解决方案1】:

    请参阅有关 parallel:matrix 关键字的 GitLab 文档。整个想法是设置多个变量定义,每个变量定义将并行运行。并行的每个列表元素将是一个作业规范;列表元素应该是字典,指定要在每个作业中设置的变量。

    在你的情况下:

    test:
      stage: test
      image: $CI_REGISTRY_IMAGE
      parallel:
        matrix:
        - SUITE: endpoints
        - SUITE: smoke
        - SUITE: auth
      script:
        - pytest -m ${SUITE} --json-report --json-report-file=${SUITE}_report.json
      artifacts:
        when: always
        paths:
          - "${SUITE}_report.json"
        expire_in: "1 day"
    

    【讨论】:

    • 感谢你的回复!我实际上需要像这样将 SUITE 变量作为数组传递: SUITES: $SUITE 我的问题不正确,抱歉
    • 为什么?您能否修改您的问题以包含完整的上下文,包括如何/何时设置 SUITE 的值? SUITE 是项目或组变量,还是从触发项目等传入的?上下文很重要
    • 我有一个类似的用例,其中矩阵的变量(这里是 SUITE)应该从我的管道中以前的工作设置的变量 $SUITES 中读取。所以我也有类似的东西 - SUITE: [$SUITES] 但我的工作不会在那里爆炸字符串。
    • 如果您有新问题,请创建一个新帖子,不要将其添加为对此答案的评论。见How to Ask
    【解决方案2】:

    我对矩阵功能有类似的问题。我有一个管道模板,可以构建一个“基本”docker 图像的多个图像,其中每个图像的工具版本不同。例如,我想为 .NET 3.1、5.0 和 6.1 构建自定义“基础”.NET 映像。

    之前我声明了一个变量: VERSIONS_TO_BUILD: "3.1 5.0 6.0"

    然后循环遍历该列表(例如:VERSION_TO_BUILD 中的每个版本,运行 docker build)。

    我也在扫描生成的容器。因此,多个作业将具有相同的矩阵列表。

    我刚刚发现了这个矩阵功能。我意识到我可以这样设置我的工作:

    build:
      parallel:
        matrix:
          - VERSION: 3.1
          - VERSION: 5.0
          - VERSION: 6.0
    
    # repeat for scan job
    

    如前所述,我使用的是模板,因此相同的管道可用于 .NET、Node、Java、Maven 等。我希望做的是包含模板,然后定义我用于该 repo 的版本,然后重新使用它。

    include:
      - base_image_pipeline.yml
    
    variables:
      VERSIONS:
        - "3.1"
        - "5.0"
        - "6.0"
    
    build:
     parallel:
       matrix:
        - $VERSIONS
    
    scan:
     parallel:
       matrix:
        - $VERSIONS
    

    我觉得 !reference 关键字可能是最好的选择,但我想要其他输入。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2021-12-24
      • 2023-01-04
      • 2019-11-04
      • 1970-01-01
      • 2022-12-22
      • 2022-08-11
      • 2020-03-15
      • 2019-08-18
      相关资源
      最近更新 更多