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

GitHub Actions中空矩阵的条件判断异常问题求助

问题分析与解决建议

核心问题

  1. if条件判断逻辑错误:GitHub Actions中输出变量has_changes是字符串类型,原条件if: ${{ needs.get-chart.outputs.has_changes }}会将所有非空字符串(包括"false")判定为true,导致条件始终生效。
  2. 矩阵解析优先级高于if条件:GitHub会先解析作业的strategy.matrix配置,再判断if条件。当charts为空数组[]时,矩阵直接因无有效值报错,if条件根本没机会执行。

解决办法

步骤1:修正if条件判断

将if条件改为明确判断字符串是否为"true",确保只有当值为"true"时才执行作业:

if: ${{ needs.get-chart.outputs.has_changes == 'true' }}

步骤2:避免矩阵为空

有两种可行方式:

方式一:给矩阵设置默认占位值

修改example作业的strategy部分,当charts为空时自动填充一个占位值,结合修正后的if条件,确保无变更时作业不执行:

example:
  name: ${{ matrix.chart }}
  runs-on: ubuntu-latest
  needs: [get-chart]
  if: ${{ needs.get-chart.outputs.has_changes == 'true' }}

  strategy:
    matrix: 
      # 当charts为空数组时,用['dummy-chart']作为默认值
      chart: ${{ fromJSON(needs.get-chart.outputs.charts) || ['dummy-chart'] }}

方式二:在输出阶段避免空数组

修改get-chart步骤的逻辑,当has_changes为false时,输出包含占位值的数组而非空数组:

- id: get-chart
  run: |
    # 替换为你实际判断变更的逻辑
    HAS_CHANGES="false"
    if [ "$HAS_CHANGES" = "true" ]; then
      echo "charts=[\"chart-a\", \"chart-b\"]" >> $GITHUB_OUTPUT
      echo "has_changes=true" >> $GITHUB_OUTPUT
    else
      # 无变更时输出占位值数组,避免矩阵为空报错
      echo "charts=[\"no-changes\"]" >> $GITHUB_OUTPUT
      echo "has_changes=false" >> $GITHUB_OUTPUT
    fi

最终完整示例

结合两种修正后的工作流代码:

get-chart:
  name: Get Chart Information  
  runs-on: ubuntu-latest

  outputs:
    has_changes: ${{ steps.get-chart.outputs.has_changes }}
    charts: ${{ steps.get-chart.outputs.charts }}

  steps:
    - id: get-chart
      run: |
        echo "charts=[]" >> $GITHUB_OUTPUT
        echo "has_changes=false" >> $GITHUB_OUTPUT

example:
  name: ${{ matrix.chart }}
  runs-on: ubuntu-latest
  needs: [get-chart]
  # 明确判断has_changes为字符串"true"
  if: ${{ needs.get-chart.outputs.has_changes == 'true' }}

  strategy:
    matrix: 
      # 为空时填充默认值,避免矩阵报错
      chart: ${{ fromJSON(needs.get-chart.outputs.charts) || ['dummy-chart'] }}

这样修改后,当has_changes为"false"时,example作业会被if条件跳过;当charts为空时,矩阵会使用默认占位值,不会触发"Matrix vector 'chart' does not contain any values"错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:25:13