GitHub Actions无法用变量构造策略矩阵的问题排查
问题分析与解决
你的问题出在三个核心环节:
1. 字符串分割逻辑错误
你用$envList -split ''把环境列表拆成了单个字符,比如"item1_pom item2"会被拆成i,t,e,m,1,_,p,o,m, ,i,t,e,m,2,后续循环根本找不到符合*_*规则的项,导致$unique_envList为空,传递给下一个作业的是空字符串,直接触发fromJson解析失败。
2. JSON数组格式不合法
你手动拼接的JSON数组没给元素加双引号,生成的是[item1, item3, item4],但合法的JSON字符串数组必须是["item1","item3","item4"],GitHub Actions的fromJson无法解析这种格式错误的内容。
3. 输出变量的生成方式不严谨
手动拼接JSON容易出现格式偏差,应该用PowerShell自带的工具生成标准JSON,同时要避免多余的换行或转义干扰。
修正后的完整工作流代码
name: Your Workflow on: push: branches: - main jobs: CONSTRUCT_UPLOAD_ZIP: outputs: NEWENV-MATRIX: ${{ steps.newmatrixtask.outputs.newgenmatrix }} runs-on: windows-latest steps: - name: Construct new zip per environment id: newmatrixtask run: | # 按空格分割环境列表,替换原错误的空字符串分割 $envList = "item1_pom item2 item3_xml item4_txt" $envList = $envList -split ' ' $unique_envList = @() foreach ($item in $envList) { if ($item -like "*_*") { # 提取下划线前的部分 $item = ($item -split "_")[0] $unique_envList += $item } } # 用ConvertTo-Json生成标准JSON数组,-Compress参数去掉多余换行 $newmatrix = $unique_envList | ConvertTo-Json -Compress # 输出变量,确保格式正确无干扰 Write-Output "newgenmatrix=$newmatrix" >> $env:GITHUB_OUTPUT upload-to: needs: CONSTRUCT_UPLOAD_ZIP runs-on: windows-latest strategy: matrix: envName: ${{ fromJson(needs.CONSTRUCT_UPLOAD_ZIP.outputs.NEWENV-MATRIX) }} steps: - name: Upload to JFrog run: | echo "Uploading for the environment: ${{ matrix.envName }}"
关键修正点说明
- 把
-split ''改成-split ' ',正确按空格分割环境项 - 用
ConvertTo-Json -Compress生成紧凑的标准JSON数组,自动给元素添加双引号 - 用
Write-Output确保输出的JSON没有多余换行,避免解析错误
修改后,upload-to作业会生成三个并行任务,分别对应item1、item3、item4,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

