我想在工作流程中动态指定策略矩阵。所以,而不是:
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。 (在撰写本文时)不可能为给定的矩阵参数动态提供可用值的数组(就像您的问题一样),但您至少有一个动态矩阵作业。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)