gitlab runner安装并注册好后,在第一次启动时报无法拉取gitlab-runner-helper
错误:
Running with gitlab-runner 15.3.0 (bbcb5aba)
on debian-docker CHvjghoP
feature flags: FF_USE_FASTZIP:true
Preparing the "docker" executor
00:02
Using Docker executor with image ruby:3.0 ...
Pulling docker image registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba ...
WARNING: Failed to pull image with policy "always": Error response from daemon: Head "https://registry.gitlab.com/v2/gitlab-org/gitlab-runner/gitlab-runner-helper/manifests/x86_64-bbcb5aba": received unexpected HTTP status: 503 Service Unavailable (manager.go:235:1s)
ERROR: Job failed: failed to pull image "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba" with specified policies [always]: Error response from daemon: Head "https://registry.gitlab.com/v2/gitlab-org/gitlab-runner/gitlab-runner-helper/manifests/x86_64-bbcb5aba": received unexpected HTTP status: 503 Service Unavailable (manager.go:235:1s)
分析错误信息发现runner首先想拉取一个registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba
镜像,该镜像的作用应该是加速下载速度、安全链接、设置环境变量以及添加附件的软件等,由于默认的helper镜像位于gitlab的官方docker仓库中,而在接取此仓库时发生了503错误。
解决方案
gitlab runner需要一个helper,这是必须的。而当前的问题是:这个registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba
发生了503(可能是由于认证引起的)。
所以我们要做的是:重新为gitlab runner指定一个不需要权限认证的gitlab-runner-helper,幸运的是docker官方提供了这个image.
重新设置helper
我们打来gitlab runner所在服务器,登录后先查看自己的gitlab runner版本:
root@debian-docker:/etc/gitlab-runner# gitlab-runner -v
Version: 15.3.0
Git revision: bbcb5aba
Git branch: 15-3-stable
GO version: go1.17.9
Built: 2022-08-19T22:41:11+0000
OS/Arch: linux/amd64
然后找到配置文件config.toml
:
- 当以root用户在*nix系统上运行Gitlab Runner时,路径在
/etc/gitlab-runner/
- 当以及非root用户在*nix系统上运行Gitlab Runner时,路径在
~/.gitlab-runner/
- 其它的系统,在
./
然后添加以下信息:
[runners.docker]
...
helper_image="gitlab/gitlab-runner-helper:x86_64-${CI_RUNNER_VERSION}"
GitLab Runner 版本小于13.2的,加入以下信息:
[runners.docker]
...
helper_image="gitlab/gitlab-runner-helper:x86_64-${CI_RUNNER_REVISION}"
配置变更后,重新跑Job,再次查看日志,发现以下错误:
ERROR: Job failed: failed to pull image "gitlab/gitlab-runner-helper:x86_64-15.3.0" with specified policies [always]: Error response from daemon: manifest for gitlab/gitlab-runner-helper:x86_64-15.3.0 not found: manifest unknown: manifest unknown (manager.go:235:3s)
此时已经不再是504错误了,而且请求的image地址也变成了我们配置的itlab/gitlab-runner-helper:x86_64-15.3.0
,说明刚刚的配置生效了。但是很遗憾docker hub上并不存在x86_64-15.3.0
版本:
即然这样,那我想用下最新的版本应该问题不大吧,当前最新的版本是x86_64-v14.10.2
所以我再次修改配置文件config.toml
,把helper的版本改成x86_64-v14.10.2
[runners.docker]
...
helper_image="gitlab/gitlab-runner-helper:x86_64-v14.10.2"
重新运行job,拉取成功的画面来了:
总结
此错误在google上搜索并没有找到傻瓜式的答案,所以解决问题的方向还是要由报错信息及原理上猜想。由官方文档或许到helper是必须要安装的image,然后由报错的地址发现其无法正常拉取image。于是最终把解决的关键点放到了:手动指定image的地址上来。