You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions工作流中是否支持配置动态strategy matrix?

动态策略矩阵在GitHub Actions中的实现方法

当然可以!GitHub Actions完全支持动态生成策略矩阵,不用非得写死固定的数组。我平时常用的方法是通过一个前置作业来生成矩阵数据,再把它传递给需要执行矩阵任务的作业,具体操作如下:

步骤1:创建生成动态矩阵的作业

首先定义一个专门用来生成矩阵数据的作业,这里可以用任意脚本语言(Bash、Python、Node.js都行)计算出你需要的数组,然后将结果输出为GitHub Actions可识别的输出变量。

举个Bash的例子,这里用Python脚本生成目标数组:

jobs:
  generate-dynamic-matrix:
    runs-on: ubuntu-latest
    # 定义作业输出,供后续作业引用
    outputs:
      target-matrix: ${{ steps.generate-matrix.outputs.matrix }}
    steps:
      - name: Calculate and output matrix
        id: generate-matrix
        run: |
          # 替换成你的自定义脚本逻辑,比如调用外部脚本生成数组
          # 这里用Python生成一个简单的数组示例
          MATRIX_CONTENT=$(python -c "print('[\"bar\", \"baz\", \"qux\"]')")
          # 将结果写入GitHub输出变量
          echo "matrix=$MATRIX_CONTENT" >> $GITHUB_OUTPUT

步骤2:在目标作业中引用动态矩阵

接下来创建需要执行矩阵任务的作业,通过needs依赖前面的生成作业,再用fromJson函数解析输出的矩阵数据,就能实现动态矩阵了:

execute-matrix-jobs:
    # 依赖生成矩阵的作业,确保先拿到数据
    needs: generate-dynamic-matrix
    runs-on: ubuntu-latest
    strategy:
      matrix:
        foo: ${{ fromJson(needs.generate-dynamic-matrix.outputs.target-matrix) }}
    steps:
      - name: Process item ${{ matrix.foo }}
        run: echo "当前处理的矩阵项是:${{ matrix.foo }}"

额外注意事项

  • 确保生成的矩阵数据是合法的JSON格式,如果是多维矩阵,可以生成包含多个键的JSON对象,比如{"foo": ["bar", "baz"], "os": ["ubuntu-latest", "windows-latest"]},然后直接在strategy.matrix中引用${{ fromJson(...) }}即可。
  • 如果你的生成逻辑比较复杂,可以把脚本单独放在仓库里(比如scripts/generate-matrix.py),然后在作业中调用这个脚本输出JSON。
  • 旧版本的GitHub Actions可能用set-output命令,现在官方推荐使用GITHUB_OUTPUT环境变量来设置输出,兼容性更好。

内容的提问来源于stack exchange,提问作者Pedro A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:30:23