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

使用actions/checkout在自托管runner上遇文件属主为root:root问题

解决自托管GitHub Actions Runner清理目录失败的问题

可行方案

1. 先修复权限再清理(安全可控)

如果不想开放rm的sudo免密权限,可以先把工作目录下的文件属主切换为当前Runner用户,再执行删除。只需要给Runner用户配置仅允许无密码执行chown命令,比开放rm权限更安全:

  1. 在自托管Runner机器上执行sudo visudo,添加一行(替换runner为你的Runner实际用户名):
runner ALL=(ALL) NOPASSWD: /usr/bin/chown
  1. 修改工作流的清理步骤:
- name: Cleanup build folder
  run: |
    sudo chown -R $USER:$USER $RUNNER_WORKSPACE/ || true
    rm -rf $RUNNER_WORKSPACE/* || true

这里用$RUNNER_WORKSPACE内置变量代替硬编码路径,更适配不同Runner配置。

2. 从根源杜绝root文件生成

随机出现的root权限文件,大多是这两个原因导致的,针对性修复:

  • 检查工作流中是否有sudo执行的步骤,尽量避免用root权限操作;如果必须用,执行完后记得把生成的文件属主改回Runner用户。
  • 如果用到Docker挂载工作目录,运行容器时加上--user $(id -u):$(id -g)参数,让容器内操作使用当前Runner用户的UID/GID,避免生成root权限文件:
    docker run --user $(id -u):$(id -g) -v $RUNNER_WORKSPACE:/work ...
    

3. 预配置工作目录权限(一次性操作)

在Runner机器上执行以下命令,确保工作目录属主是Runner用户,并设置setgid位,让新创建的文件自动继承目录组权限:

sudo chown -R runner:runner /home/github/actions-runner/_work/
sudo chmod g+s /home/github/actions-runner/_work/

这能大幅减少后续出现root权限文件的概率。

问题原因

清理失败是因为之前的工作流步骤(比如sudo命令、Docker操作)生成了root属主的文件,而清理步骤以普通Runner用户身份执行,没有权限删除这些文件。回退到actions/checkout@v2没用,说明问题不在checkout动作本身,而是权限遗留导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:57:43