问题描述
在一个Docker容器中运行了一个GitLab实例,现在希望在同一主机上设置gitlab-runner。两者都在运行中:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
279473dceb2f gitlab/gitlab-runner:alpine "/usr/bin/dumb-ini..." About a minute ago Up About a minute gitlab-runner
6d7af0d6b946 gitlab/gitlab-ce:latest "/assets/wrapper" 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:8022->22/tcp gitlab
用户已注册一个Docker镜像作为共享Runner:
concurrent = 1
check_interval = 0
[[runners]]
name = "default shared maven runner"
url = "http://url-of-my-gitlab.instance"
token = "valid token"
executor = "docker"
[runners.docker]
pull_policy = "never"
tls_verify = false
image = "maven-java-8:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
已注册的镜像maven-java-8
是一个具有正确settings.xml
设置的自定义镜像,并在docker images
中列出。然而,管道仍然失败,显示如下错误:
Running with gitlab-ci-multi-runner 9.3.0 (3df822b) on Maven Test (5b2573e4)
Using Docker executor with image maven-java-8 ...
Using docker image sha256:c266311d78b33f89f6eecce00f19a0428e37ba6af6734c8fced32fa11e4bd4ba for predefined container...
Pulling docker image maven-java-8 ...
ERROR: Job failed: Error response from daemon: repository maven-java-8 not found: does not exist or no pull access
用户理解为它试图使用gitlab-runner容器内的本地镜像。GitLab版本是gitlab-ce 9.2.7,Runner版本是v9.3.0。用户的.gitlab-cy.yml
文件内容如下:
test:
script:
- mvn clean test
请问我漏掉了什么?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
用户的问题涉及到在同一主机上设置gitlab-runner,以便它能够在一个Docker容器内运行。解决方案可以通过调整gitlab-runner的配置来实现。以下是解决方案的两种方法:
方案1:调整docker executor配置
在config.toml
文件中,通过设置pull_policy
为"never"
,可以解决这个问题。但需要注意的是,这个配置文件在gitlab-runner容器中的/etc/gitlab-runner/config.toml
路径。可以通过以下步骤实现:
-
进入gitlab-runner容器的交互式终端:
bash
docker exec -it gitlab-runner bash -
打开
config.toml
文件进行编辑:
bash
vi /etc/gitlab-runner/config.toml -
在
[runners.docker]
部分添加或修改pull_policy
属性为"never"
:
toml
[runners.docker]
pull_policy = "never"
# 其他属性... -
保存并退出编辑器。
方案2:使用Volume来配置gitlab-runner
在Docker中运行的gitlab-runner会将其配置文件挂载到主机上的某个路径。这意味着你可以在主机上编辑这个配置文件,然后重启gitlab-runner容器使更改生效:
-
找到gitlab-runner容器的配置文件路径,可以通过以下命令获取:
bash
docker inspect -f '{{ range .Mounts }}{{ if eq .Destination "/etc/gitlab-runner" }}{{ .Source }}{{ end }}{{ end }}' gitlab-runner -
使用编辑器(如vi或nano)打开这个文件进行编辑,设置
pull_policy
为"never"
:
bash
vi /path/to/config.toml -
保存更改并退出编辑器。
-
重启gitlab-runner容器以使配置更改生效:
bash
docker restart gitlab-runner
请注意,无论选择哪种方法,都需要确保在gitlab-runner配置文件中的[runners.docker]
部分设置了pull_policy
属性为"never"
。这将确保gitlab-runner在运行时不会尝试拉取本地镜像。完成这些步骤后,你的gitlab-runner应该能够成功使用自定义镜像进行构建。