GitLab Runner以Shell执行器运行CI任务时遭遇权限拒绝问题
解决GitLab Runner Shell执行器apt-get权限被拒问题
问题重现
使用GitLab Runner的Shell执行器运行CI任务时,执行apt-get --quiet update --yes直接报错权限不足:
$ apt-get --quiet update --yes Reading package lists... E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to lock directory /var/lib/apt/lists/ W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied) W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
已在sudoers文件中配置gitlab-runner用户免密执行所有命令,但直接在Runner主机上用sudo -u gitlab-runner apt-get --quiet update --yes测试时,同样出现上述错误。
解决方案
CI脚本中添加sudo前缀
CI任务默认以gitlab-runner用户身份执行,而apt-get需要root权限才能操作。修改CI脚本里的命令,加上sudo:sudo apt-get --quiet update --yes由于已经配置了gitlab-runner免密sudo,执行时不会要求输入密码。
验证sudo配置是否生效
在Runner主机上执行以下命令,确认gitlab-runner用户能通过sudo提权:sudo -u gitlab-runner sudo apt-get update --yes如果这个命令能正常运行,说明sudo配置没问题,只是CI脚本里没加sudo导致权限不足。
清理apt锁文件
如果上述操作后还是报错,可能是系统中其他进程占用了apt的锁文件:- 查看占用锁的进程:
sudo lsof /var/lib/apt/lists/lock # 或者用fuser sudo fuser /var/lib/apt/lists/lock - 杀掉对应的进程(替换
<PID>为查到的进程ID):sudo kill -9 <PID> - 如果进程已终止但锁文件残留,直接删除锁文件:
sudo rm /var/lib/apt/lists/lock /var/cache/apt/pkgcache.bin /var/cache/apt/srcpkgcache.bin
- 查看占用锁的进程:
内容的提问来源于stack exchange,提问作者Zexxxx
相关产品推荐
相关产品推荐

