如何配置GitLab CI Shell Runner,使推送归属Runner专属用户?
解决GitLab CI Shell Runner推送显示实例管理员的问题
核心原因
部署密钥本身没有独立用户身份,GitLab会把部署密钥的操作归属到创建该密钥的用户(即你提到的实例管理员)。你设置的全局提交作者信息只是Git提交记录里的作者标识,和GitLab Activity显示的推送者身份是两回事——推送者身份由GitLab识别的操作账号决定。
解决方法
方法1:创建专属服务用户并关联SSH密钥
- 在GitLab实例中新建一个专门的服务用户(比如
ci-runner-bot),给该用户分配目标仓库的写入权限。 - 在Runner主机上,切换到Runner执行作业的用户(通常是
gitlab-runner),生成专属SSH密钥对:sudo -u gitlab-runner ssh-keygen -t ed25519 -C "ci-runner-bot@your-domain.com" - 将生成的公钥添加到这个服务用户的SSH密钥列表中(不是仓库的部署密钥)。
- 在
.gitlab-ci.yml中明确设置提交身份,和服务用户信息保持一致:
完成后,推送操作的归属就会显示为这个专属服务用户。before_script: - git config user.name "ci-runner-bot" - git config user.email "ci-runner-bot@your-domain.com"
方法2:用项目访问令牌替代部署密钥
- 进入仓库「设置」→「访问令牌」,创建一个项目访问令牌,勾选
write_repository权限并设置过期时间。 - 在CI/CD变量中添加该令牌,命名为
CI_PROJECT_TOKEN。 - 在CI作业里改用HTTPS方式推送,通过令牌认证:
这种方式下,推送者会显示为git remote set-url origin https://gitlab-ci-token:${CI_PROJECT_TOKEN}@gitlab.example.com/your-group/your-project.git git push origin your-branchProject Bot(或你给令牌设置的自定义名称),不会关联到实例管理员。
方法3:修改部署密钥的关联用户(需管理员权限)
- 若你是GitLab实例管理员,可进入仓库「设置」→「仓库」→「部署密钥」,找到目标密钥后编辑,将其关联用户改为你创建的专属服务用户。
此方法无需重新生成密钥,但仅限管理员操作。
注意事项
- 提交记录的作者信息(
user.name/user.email)和GitLab Activity显示的推送者是两个独立概念,前者仅存于Git提交中,后者由GitLab的操作账号身份决定。 - 避免用实例管理员身份执行CI推送,防止权限过大和身份混淆。
内容的提问来源于stack exchange,提问作者epR8GaYuh
相关产品推荐
相关产品推荐

