如何配置gitlab-runner在与gitlab相同的docker主机上运行

167次阅读
没有评论

问题描述

在一个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路径。可以通过以下步骤实现:

  1. 进入gitlab-runner容器的交互式终端:
    bash
    docker exec -it gitlab-runner bash

  2. 打开config.toml文件进行编辑:
    bash
    vi /etc/gitlab-runner/config.toml

  3. [runners.docker]部分添加或修改pull_policy属性为"never"
    toml
    [runners.docker]
    pull_policy = "never"
    # 其他属性...

  4. 保存并退出编辑器。

方案2:使用Volume来配置gitlab-runner

在Docker中运行的gitlab-runner会将其配置文件挂载到主机上的某个路径。这意味着你可以在主机上编辑这个配置文件,然后重启gitlab-runner容器使更改生效:

  1. 找到gitlab-runner容器的配置文件路径,可以通过以下命令获取:
    bash
    docker inspect -f '{{ range .Mounts }}{{ if eq .Destination "/etc/gitlab-runner" }}{{ .Source }}{{ end }}{{ end }}' gitlab-runner

  2. 使用编辑器(如vi或nano)打开这个文件进行编辑,设置pull_policy"never"
    bash
    vi /path/to/config.toml

  3. 保存更改并退出编辑器。

  4. 重启gitlab-runner容器以使配置更改生效:
    bash
    docker restart gitlab-runner

请注意,无论选择哪种方法,都需要确保在gitlab-runner配置文件中的[runners.docker]部分设置了pull_policy属性为"never"。这将确保gitlab-runner在运行时不会尝试拉取本地镜像。完成这些步骤后,你的gitlab-runner应该能够成功使用自定义镜像进行构建。

正文完