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

动态JSON矩阵中如何排除指定值以跳过build-dot作业?

解决GitHub Actions动态矩阵排除nodejs项目不生效的问题

当动态生成的JSON矩阵用exclude字段无法跳过nodejs类型项目时,可通过以下几种可靠方式实现需求:

1. 生成动态矩阵时直接过滤nodejs项

在生成矩阵的步骤中,用工具(如jq)提前过滤掉project=nodejs的条目,从根源避免这类项进入矩阵。示例Workflow代码:

jobs:
  generate-matrix:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.filter-matrix.outputs.matrix }}
    steps:
      - id: filter-matrix
        run: |
          # 替换为你的原始矩阵JSON获取逻辑,示例用硬编码JSON
          raw_matrix='[{"project": "dotnet", "path": "src/dotnet-api"}, {"project": "nodejs", "path": "src/node-app"}, {"project": "dotnet", "path": "src/dotnet-service"}]'
          # 用jq过滤掉project为nodejs的项
          filtered_matrix=$(echo "$raw_matrix" | jq '[.[] | select(.project != "nodejs")]')
          echo "matrix=$filtered_matrix" >> "$GITHUB_OUTPUT"

  build-dot:
    needs: generate-matrix
    runs-on: ubuntu-latest
    strategy:
      matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
    steps:
      - name: Build .NET project
        run: dotnet build ${{ matrix.path }}

2. 在作业级别添加执行条件

如果需要保留完整矩阵结构但跳过nodejs任务的执行,可在build-dot作业中添加if条件判断,直接跳过不符合要求的项:

jobs:
  build-dot:
    runs-on: ubuntu-latest
    strategy:
      matrix: ${{ fromJson(your_dynamic_matrix_source) }}
    # 仅当project不是nodejs时执行作业
    if: ${{ matrix.project != 'nodejs' }}
    steps:
      - name: Build .NET project
        run: dotnet build ${{ matrix.path }}

3. 修正exclude字段的使用方式

若坚持使用exclude,需确保字段匹配完全正确——矩阵中的键和exclude中的键必须一致,且include和exclude需配合使用(动态矩阵通常用include引入):

jobs:
  build-dot:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include: ${{ fromJson(your_dynamic_matrix_source) }}
        exclude:
          - project: nodejs
    steps:
      - name: Build .NET project
        run: dotnet build ${{ matrix.path }}

注:这种方式在部分动态矩阵场景下可能因生成顺序问题失效,前两种方法更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:22