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

更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:20:33