【问题标题】:How to access matrix variables in Github actions如何在 Github 操作中访问矩阵变量
【发布时间】:2021-03-10 02:43:33
【问题描述】:

我已经为我的 CI 需求设置了一个 Github 工作流,每当我使用 matrix 值进行比较时,它似乎会以某种方式将分配给 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 环境并行运行一个新作业,并避免在每个作业中运行不必要的构建(例如质量)并减慢作业速度)

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

【问题讨论】:

    标签: python github continuous-integration github-actions


    【解决方案1】:

    此问题与您的 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 部分添加的任何配置都应该包含所有键/值,否则它将被设置为我们没有提及任何值的空字符串?
    • 刚刚测试过,它有效!谢谢,我上面的假设是正确的,我们必须在我们通常指定的 include 部分中指定 matrix 的所有键/值。
    • 是的,我也找到了。很奇怪,但它有效:)
    猜你喜欢
    • 2023-03-23
    • 2021-05-21
    • 2019-10-23
    • 1970-01-01
    • 2021-10-29
    • 2022-08-18
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多