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

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的锁文件:

    1. 查看占用锁的进程:
      sudo lsof /var/lib/apt/lists/lock
      # 或者用fuser
      sudo fuser /var/lib/apt/lists/lock
      
    2. 杀掉对应的进程(替换<PID>为查到的进程ID):
      sudo kill -9 <PID>
      
    3. 如果进程已终止但锁文件残留,直接删除锁文件:
      sudo rm /var/lib/apt/lists/lock /var/cache/apt/pkgcache.bin /var/cache/apt/srcpkgcache.bin
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:02:20