如何在Github actions中访问矩阵变量

3

我已经为我的 CI 需求设置了一个 Github 工作流,但是当我使用 matrix 变量进行比较时,它似乎会将其赋值重置为空字符串。

if: matrix.python-version == '3.8' && matrix.toxenv=='quality'

我指定了runs-on: ${{ matrix.os }},但它失败并显示以下错误信息:

当评估作业“run_tests”的“runs-on”时出错。(第12行,第14列): 意外的值''

如果我指定runs-on: ubuntu-20.04,它就能正常工作。

Github完整工作流程: (我设置了TOXENV环境变量,以便并行运行每个tox环境的新任务,并避免不必要的构建,在每个作业(例如quality)中运行并减慢作业速度)

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  run_tests:
    name: Tests
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-20.04]
        python-version: ['3.5', '3.8', '3.9']
        toxenv: ['django22', 'django30','django31']
        include:
          - python-version: "3.8"
            toxenv: "quality"
        exclude:
          - python-version: "3.5"
            toxenv: "django30"
          - python-version: "3.5"
            toxenv: "django31"

    steps:
    - uses: actions/checkout@v2
    - name: setup python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install pip
      run: pip install -r requirements/pip.txt

    - name: Install Dependencies
      run: pip install -r requirements/ci.txt

    - name: Run Tests
      env:
        TOXENV: python${{ matrix.python-version }}-${{ matrix.toxenv }}
      run: tox

    # it'll run a separate job for quality checks with python 3.8
    - name: Run Quality
      if: matrix.python-version == '3.8' && matrix.toxenv=='quality'
      env:
        TOXENV: ${{ matrix.toxenv }}
      run: tox

    - name: Run Coverage
      if: matrix.python-version == '3.8' && matrix.toxenv=='django22'
      uses: codecov/codecov-action@v1
      with:
        flags: unittests
        fail_ci_if_error: true
1个回答

5
问题与您的include部分有关。我不知道为什么,但在这里,您必须完全定义要为哪个组合添加另一个配置。以下语法将起作用:
jobs:
  run_tests:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-20.04]
        python-version: ['3.5', '3.8', '3.9']
        toxenv: ['django22', 'django30','django31']
        include:
          - python-version: '3.8'
            toxenv: 'quality'
            os: [ubuntu-20.04]
        exclude:
          - python-version: '3.5'
            toxenv: 'django30'
          - python-version: '3.5'
            toxenv: 'django31'
    steps:
    - name: Get color
      run: echo "${{ matrix.os }} - ${{ matrix.python-version }} - ${{ matrix.toxenv }}"

我们在include部分添加的任何配置都应该包含所有的键/值,否则对于我们没有提及任何值的情况下,它将被设置为空字符串。 - Aarif
刚刚测试了一下,它可以工作!谢谢,我上面做出的假设是正确的,我们必须在“include”部分中指定所有“matrix”的键/值,就像我们通常会指定的那样。 - Aarif
是的,我也发现了。虽然很奇怪,但它确实有效 :) - Krzysztof Madej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接