使用$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'
验证步骤
- 重启自托管运行器(确保版本升级生效)
- 推送修正后的代码到Action仓库
- 触发Workflow,检查是否不再报错,且输出变量能被后续步骤正常读取
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

