是否可以在GitHubActions的工作流中使用动态策略矩阵?

我想在工作流程中动态指定一个策略矩阵。所以,而不是:

strategy:
  matrix:
    foo: [bar, baz]

我想首先调用一些脚本,该脚本将计算并返回一个数组,例如[bar, baz]给我,然后我想将其用作策略矩阵。

这可能吗?

回答

可用的 GitHub Actions 工作流程功能是不可能的,但可以使用一个有点hacky 的解决方案来提供所有必需的矩阵参数值的组合。您可以生成所有组合的JSON在前面的工作流程作业的一个片断并将其作为就业outputs再与基质使用include关键字在接下来的工作提供全部采用矩阵参数和值组合fromJson()功能的演示官方公告。为了更好地解释这个概念,让我们看一下示例静态矩阵作业:

jobs:
  matrix-job:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        includes:
          - foo: foo-1
            bar: bar-1
          - foo: foo-1
            bar: bar-2
          - foo: foo-2
            bar: bar-1
    steps:
      - run: |
          echo foo=${{ matrix.foo }}
          echo bar=${{ matrix.bar }}

工作流结果是:

在此工作流中,所有矩阵参数值组合都是静态提供的。我们可以将其转换为动态提供,如下所示:

jobs:
  setup-matrix:
    runs-on: ubuntu-latest
    steps:
      - name: Setup matrix combinations
        id: setup-matrix-combinations
        run: |
          MATRIX_PARAMS_COMBINATIONS='
              {"foo": "foo-1", "bar": "bar-1"},
              {"foo": "foo-1", "bar": "bar-2"},
              {"foo": "foo-2", "bar": "bar-1"},
          '
          echo ::set-output name=matrix-combinations::{"include":[$MATRIX_PARAMS_COMBINATIONS]}
    outputs:
      matrix-combinations: ${{ steps.setup-matrix-combinations.outputs.matrix-combinations }}
  matrix-job:
    runs-on: ubuntu-latest
    needs: setup-matrix
    strategy:
      matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix-combinations) }}
    steps:
      - run: |
          echo foo=${{ matrix.foo }}
          echo bar=${{ matrix.bar }}

和结果:

这两个工作流具有相同的结果,matirx-job但最后一个工作流提供动态生成的矩阵输入。这是您可以动态生成矩阵构建的唯一方法,您必须使用matrix.include. 不可能(在撰写本文时)为给定的矩阵参数(如您的问题)动态提供可用值数组,但您至少有动态矩阵作业。


以上是是否可以在GitHubActions的工作流中使用动态策略矩阵?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>