解决gitlab|解决gitlab runner在docker模式下报 503 Service Unavailable 错误

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
  1. 当以root用户在*nix系统上运行Gitlab Runner时,路径在 /etc/gitlab-runner/
  2. 当以及非root用户在*nix系统上运行Gitlab Runner时,路径在 ~/.gitlab-runner/
  3. 其它的系统,在./
然后添加以下信息:
[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版本:
解决gitlab|解决gitlab runner在docker模式下报 503 Service Unavailable 错误
文章图片

即然这样,那我想用下最新的版本应该问题不大吧,当前最新的版本是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,拉取成功的画面来了:
解决gitlab|解决gitlab runner在docker模式下报 503 Service Unavailable 错误
文章图片

总结 【解决gitlab|解决gitlab runner在docker模式下报 503 Service Unavailable 错误】此错误在google上搜索并没有找到傻瓜式的答案,所以解决问题的方向还是要由报错信息及原理上猜想。由官方文档或许到helper是必须要安装的image,然后由报错的地址发现其无法正常拉取image。于是最终把解决的关键点放到了:手动指定image的地址上来。

    推荐阅读