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

如何在GitHub Actions中实现矩阵作业的指定项仅包含?

GitHub Actions 矩阵仅包含指定应用的解决方案

方案一:修正作业级别if条件语法

你之前的报错大概率是JSON转义问题导致的。在GitHub Actions表达式中,用单引号包裹JSON字符串时,内部的双引号无需转义,直接使用正常的JSON数组格式即可:

jobs:
  example_matrix:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        app: ${{ fromJson(needs.affected-apps.outputs.apps) }}
    if: ${{ contains(fromJson('["app1", "app2"]'), matrix.app) }}
    steps:
      - uses: actions/setup-node@v3
      - uses: ...
      - uses: ...
      - uses: ...

这个条件会直接在作业级别生效,不匹配的矩阵项会被标记为“跳过”,仅执行符合条件的作业。

方案二:前置作业过滤矩阵数据源(更高效)

如果受影响应用数量极多,方案一虽然能跳过作业,但GitHub Actions仍会先创建所有矩阵作业项,可能造成不必要的资源占用。此时可以提前过滤出需要保留的应用,再生成矩阵:

jobs:
  filter-target-apps:
    runs-on: ubuntu-latest
    outputs:
      filtered_apps: ${{ steps.filter-step.outputs.apps }}
    steps:
      - id: filter-step
        run: |
          # 读取受影响应用列表
          affected_apps='${{ needs.affected-apps.outputs.apps }}'
          # 定义需要保留的应用清单
          allowed_apps='["app1", "app2"]'
          # 使用jq计算两个数组的交集,得到最终需要执行的应用列表
          filtered_result=$(echo "$affected_apps" | jq --argjson allowed "$allowed_apps" '. as $affected | $allowed | map(select(. as $item | $affected | index($item)))')
          # 将结果输出为GitHub Actions可用的变量
          echo "apps=$filtered_result" >> "$GITHUB_OUTPUT"

  example_matrix:
    runs-on: ubuntu-latest
    needs: [affected-apps, filter-target-apps]
    strategy:
      matrix:
        app: ${{ fromJson(needs.filter-target-apps.outputs.filtered_apps) }}
    steps:
      - uses: actions/setup-node@v3
      - uses: ...
      - uses: ...
      - uses: ...

这种方式会直接生成仅包含目标应用的矩阵,无需额外的条件判断,更适合大规模应用的场景。

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:27:30