这个问题通常是因为权限问题。gitlab-runner默认以当前用户身份运行任务,但root启动的runner在尝试切换到非root用户执行任务时会失败。
主要原因是gitlab-runner的配置问题。检查你的config.toml文件,特别是[runners.docker]或[runners.shell]部分。如果是docker执行器,确保配置了正确的用户映射。
[[runners]]
name = "my-runner"
url = "https://gitlab.com"
token = "YOUR_TOKEN"
executor = "docker"
[runners.docker]
image = "alpine:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
# 关键配置:允许以非root用户运行
allowed_users = ["root", "gitlab-runner"]
# 或者指定运行用户
user = "gitlab-runner"
如果是shell执行器,需要确保gitlab-runner用户可以访问必要的目录:
# 创建gitlab-runner用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 将gitlab-runner用户添加到sudoers(如果需要)
echo "gitlab-runner ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/gitlab-runner
# 修改runner配置使用这个用户
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
另外检查runner的注册状态:
sudo gitlab-runner verify
sudo gitlab-runner run
查看日志确认具体错误:
sudo journalctl -u gitlab-runner -f
建议使用非root用户运行gitlab-runner服务。