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

GitHub Actions中如何将环境变量的JSON用作matrix列表

解决GitHub Actions中复用JSON环境变量作为Matrix列表的问题

问题原因

GitHub Actions的matrix策略在作业初始化阶段解析,此时作业级/工作流级的env变量还未加载到作业上下文,直接引用${{ fromJson($SERVICES_JSON) }}会失效。

解决方案1:改用工作流变量定义服务列表

如果可以接受同时定义工作流变量和环境变量,将服务列表设为工作流级variables,既满足matrix直接访问需求,也能通过env同步给其他作业:

name: Deployment
on:
  workflow_dispatch:

# 定义工作流级变量,供matrix直接解析
variables:
  SERVICES_JSON: '[
    "a",
    "b",
    "c"
  ]'

# 同步为环境变量,供其他作业使用
env:
  SERVICES_JSON: ${{ variables.SERVICES_JSON }}

jobs:
  pull-docker-images:
    runs-on: ubuntu-latest
    name: Pull docker images
    strategy:
      matrix:
        service: ${{ fromJson(variables.SERVICES_JSON) }}
    steps:
      - name: Prepare new image name
        env:
          SERVICE: ${{ matrix.service }}
        run: echo "NEW_IMAGE=${DOCKER_REGISTRY}/${PROJECT}/${SERVICE}:${BUILD}" >> $GITHUB_ENV

解决方案2:通过前置作业传递矩阵参数

如果必须保留env中的SERVICES_JSON,可以用前置作业将JSON内容输出为作业产物,后续作业通过needs获取并解析为矩阵:

name: Deployment
on:
  workflow_dispatch:

env:
  SERVICES_JSON: '[
    "a",
    "b",
    "c"
  ]'

jobs:
  # 前置作业:提取服务列表作为输出产物
  setup-matrix:
    runs-on: ubuntu-latest
    outputs:
      services: ${{ steps.extract.outputs.services }}
    steps:
      - id: extract
        run: echo "services=$SERVICES_JSON" >> $GITHUB_OUTPUT

  # 依赖前置作业的拉取镜像作业
  pull-docker-images:
    needs: setup-matrix
    runs-on: ubuntu-latest
    name: Pull docker images
    strategy:
      matrix:
        service: ${{ fromJson(needs.setup-matrix.outputs.services) }}
    steps:
      - name: Prepare new image name
        env:
          SERVICE: ${{ matrix.service }}
        run: echo "NEW_IMAGE=${DOCKER_REGISTRY}/${PROJECT}/${SERVICE}:${BUILD}" >> $GITHUB_ENV

额外结构修正

原始YAML存在语法错误:jobs下必须先定义作业名称(如pull-docker-images),再嵌套runs-on、name等字段,上述示例已修正该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:41:24