更新GitHub Actions适配set-output弃用,遇多行输出分隔符匹配错误
解决GitHub Actions多行输出分隔符不匹配问题
核心问题原因
出现Matching delimiter not found错误,主要是这两个情况导致:
- 随机生成的分隔符刚好在
test.json内容里出现,GitHub提前终止输出解析,后续结束分隔符被当成内容的一部分 - 文件内容与分隔符之间没有正确换行,导致两者粘连,无法被识别
修复方案
方案1:使用高复杂度分隔符降低冲突概率
给随机分隔符添加固定前缀,延长长度,大幅降低和文件内容重复的可能性:
name: Action Test description: test new action output runs: using: "composite" steps: - name : write run : | delimiter="GH_ACTION_UNIQ_DELIM_$(openssl rand -hex 16)" echo "OUT<<${delimiter}" >> $GITHUB_OUTPUT cat test.json >> $GITHUB_OUTPUT echo "" >> $GITHUB_OUTPUT # 确保内容和分隔符之间有空行 echo "${delimiter}" >> $GITHUB_OUTPUT shell : bash id: write - name: Print Output run: echo ${{ steps.write.outputs.OUT }} shell: bash
方案2:用Base64编码彻底规避分隔符问题
如果文件内容包含任意特殊字符,直接编码后输出,读取时再解码,从根源避免分隔符冲突:
name: Action Test description: test new action output runs: using: "composite" steps: - name : write run : | echo "OUT=$(base64 -w 0 test.json)" >> $GITHUB_OUTPUT shell : bash id: write - name: Print Output run: echo ${{ steps.write.outputs.OUT }} | base64 -d shell: bash
方案3:强制给文件内容添加结尾换行
如果test.json文件末尾没有换行符,直接拼接分隔符会导致两者粘连,需强制补充换行:
run : | delimiter="$(openssl rand -hex 8)" echo "OUT<<${delimiter}" >> $GITHUB_OUTPUT cat test.json && echo "" >> $GITHUB_OUTPUT # 强制添加结尾换行 echo "${delimiter}" >> $GITHUB_OUTPUT
验证要点
- 检查
test.json内容,确认是否包含与分隔符格式类似的字符串 - 查看Action运行日志,确认输出的分隔符前后有正确换行,且分隔符唯一
内容的提问来源于stack exchange,提问作者grwadley
相关产品推荐
相关产品推荐

