GitHub Actions中空矩阵的条件判断异常问题求助
问题分析与解决建议
核心问题
- if条件判断逻辑错误:GitHub Actions中输出变量
has_changes是字符串类型,原条件if: ${{ needs.get-chart.outputs.has_changes }}会将所有非空字符串(包括"false")判定为true,导致条件始终生效。 - 矩阵解析优先级高于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
相关产品推荐
相关产品推荐

