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

使用$GITHUB_OUTPUT替代set-output在自托管运行器报错:目录不存在

解决GitHub Actions中$GITHUB_OUTPUT报错"Directory nonexistent"的问题

问题原因

报错/entrypoint.sh: 4: cannot create : Directory nonexistent是因为**$GITHUB_OUTPUT环境变量在Docker容器内未被正确设置**,导致脚本试图写入一个空路径。旧的::set-output是通过标准输出发送指令,不依赖该环境变量,因此能正常运行。

可能的触发因素:

  • 自托管运行器版本过低($GITHUB_OUTPUT要求runner版本≥2.285.0)
  • Docker容器未继承宿主的GITHUB_OUTPUT变量
  • entrypoint.sh使用登录shell(#!/bin/sh -l)重置了环境变量

解决方案

1. 升级自托管运行器版本

确保你的Debian自托管运行器版本≥2.285.0,这是$GITHUB_OUTPUT特性的最低要求。可通过runner的日志或执行./run.sh --version查看当前版本,版本不足时下载最新版替换即可。

2. 修正entrypoint.sh脚本

  • 移除登录shell标识-l,避免环境变量被重置:

    #!/bin/sh
    
    time=$(date)
    # 用双引号包裹变量,避免空值时的路径错误
    echo "time=$time" >> "$GITHUB_OUTPUT"
    
  • 可选:添加兼容逻辑,同时支持新旧输出方式:

    #!/bin/sh
    
    time=$(date)
    if [ -n "$GITHUB_OUTPUT" ]; then
      echo "time=$time" >> "$GITHUB_OUTPUT"
    else
      echo "::set-output name=time::$time"
    fi
    

3. 确保Action配置正确

在你的Action元文件(如action.yml)中,无需手动声明GITHUB_OUTPUT,GitHub Actions会自动将该变量注入Docker容器,保持基础配置即可:

name: 'Time Output Action'
description: 'Outputs current timestamp'
runs:
  using: 'docker'
  image: 'Dockerfile'

验证步骤

  1. 重启自托管运行器(确保版本升级生效)
  2. 推送修正后的代码到Action仓库
  3. 触发Workflow,检查是否不再报错,且输出变量能被后续步骤正常读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:35:24