跳至主要內容

GitLab-docker安装

三思原创大约 7 分钟dockerdockergitlab-runner容器持续集成

本文介绍了在Docker容器中运行GitLab Runner的方法,通过使用Docker镜像可以实现GitLab Runner命令的包装和执行。提供了两种启动容器的选项,一种是使用本地系统卷挂载方式,另一种是使用Docker卷。读者可以根据需求选择适合的启动方式,并参考FAQ部分解决常见问题。

image
image

GitLab Runner

在容器中运行 GitLab Runner所有层级所有产品

这就是在 Docker 容器中运行 GitLab Runner 的方法。

Docker 引擎版本兼容性

一般来说,Docker Engine 的版本和 GitLab Runner 容器镜像的版本 不必匹配。GitLab Runner 镜像应该向后和向前兼容。 但是,为了确保您拥有最新的功能和安全更新, 您应该始终使用最新的稳定 Docker 引擎版本open in new window

GitLab Runner Docker 镜像的一般用法

GitLab Runner Docker 镜像(基于 Ubuntu 或 Alpine Linux) 被设计为标准命令的包装器,如 if GitLab Runner 直接安装在主机上。gitlab-runner

一般规则是,通常执行的每个 GitLab Runner 命令 如:

gitlab-runner <runner command and options...>

可以使用以下命令执行:

docker run <chosen docker options...> gitlab/gitlab-runner <runner command and options...>

例如,获取 GitLab Runner 命令的顶级帮助信息可能是 执行方式如下:

docker run --rm -t -i gitlab/gitlab-runner --help

NAME:
   gitlab-runner - a GitLab Runner

USAGE:
   gitlab-runner [global options] command [command options] [arguments...]

VERSION:
   16.5.0 (853330f9)

(...)

简而言之,命令的一部分被替换为 ,而 命令将保持注册文档中所述。 唯一的区别是该命令是在 Docker 容器。gitlab-runnerdocker run [docker options] gitlab/gitlab-runnergitlab-runner

安装 Docker 映像并启动容器

在开始之前,请确保已安装 Dockeropen in new window

若要在 Docker 容器内运行,需要确保在容器重启时配置不会丢失。为此,有两个选项,如下所述。gitlab-runner

请务必阅读 FAQopen in new window 部分,其中描述了 GitLab Runner 的一些最常见问题。

  • 如果您使用的是session_server,您还 需要通过添加到命令中来公开端口。8093-p 8093:8093docker run

  • 如果要使用 Docker Machine executor 进行自动缩放功能,还需要挂载 Docker Machine 存储路径: :/root/.docker/machine

    • 通过添加系统卷装载-v /srv/gitlab-runner/docker-machine-config:/root/.docker/machine
    • 通过添加 Docker 命名卷-v docker-machine-config:/root/.docker/machine

此设置将对 Docker 守护进程的完全控制权委托给每个 GitLab Runner 容器。 其效果是,如果您在 Docker 守护程序中运行 GitLab Runner,隔离保证中断 它还运行其他有效负载。

选项 1:使用本地系统卷挂载启动 Runner 容器

此示例将本地系统用于装载到容器中的配置卷。此卷用于配置和其他资源。gitlab-runner

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

在 macOS 上,默认情况下不存在。您可以创建或使用其他专用目录。/srv/private/srv

Docker Compose 安装

version: '3.1'

services:
  gitlab-runner:
    restart: always
    image: gitlab/gitlab-runner:latest
    container_name: gitlab-runner
    privileged: true
    ports:
      - '8093:8093'
    volumes:
    - /share/Container/container-station-data/Mount/Gitlab-runner/config:/etc/gitlab-runner
    - /share/Container/container-station-data/Mount/Gitlab-runner/run/docker.sock:/var/run/docker.sock

选项 2:使用 Docker 卷启动 Runner 容器

在此示例中,您可以使用配置容器来装载自定义数据卷。

  1. 创建 Docker 卷:

    docker volume create gitlab-runner-config
    
  2. 使用我们刚刚创建的卷启动 GitLab Runner 容器:

    docker run -d --name gitlab-runner --restart always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v gitlab-runner-config:/etc/gitlab-runner \
        gitlab/gitlab-runner:latest
    

要设置容器的时区,请在命令中使用标志 。查看可用时区的列表。docker run--env TZ=<TIMEZONE>

对于符合 FIPS 标准的 GitLab Runner 映像,基于 ,请使用标签。redhat/ubi8-minimalgitlab/gitlab-runner:ubi-fips

注册运行器

最后一步是注册新的运行器open in new window。GitLab Runner 容器在注册之前不会获取任何作业。

更新配置

如果更改 中的配置,则可能需要重新启动运行器才能应用更改。 是用于配置运行器的配置文件, 并在注册运行器时创建。config.tomlconfig.toml

您应该重新启动整个容器,而不是使用:gitlab-runner restart

docker restart gitlab-runner

升级版本

拉取最新版本(或特定标签):

docker pull gitlab/gitlab-runner:latest

停止并删除现有容器:

docker stop gitlab-runner && docker rm gitlab-runner

像最初一样启动容器:

docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

您需要使用与 最初 ( 或 )。-v /srv/gitlab-runner/config:/etc/gitlab-runner--volumes-from gitlab-runner-config

读取 GitLab Runner 日志

当 GitLab Runner 作为前台任务启动时(无论是本地安装的二进制文件还是 在 Docker 容器中),日志将打印到标准输出中。什么时候 GitLab Runner 是作为系统服务启动的(例如,使用 Systemd),日志在大多数 通过 Syslog 或其他系统日志记录机制记录的案例。

使用 GitLab Runner 作为基于 Docker 的服务启动,因为命令是 容器的主进程,可以使用命令读取日志。gitlab-runner ...docker logs

例如,如果 GitLab Runner 是使用以下命令启动的:

docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

您可以通过以下方式获取日志:

docker logs gitlab-runner

其中 是容器的名称,设置为 第一个命令。gitlab-runner--name gitlab-runner

您可以在 Docker 文档页面上open in new window找到有关处理容器日志的更多信息。

安装受信任的 SSL 服务器证书

如果您的 GitLab CI 服务器使用自签名 SSL 证书,那么您应该 确保 GitLab CI 服务器证书受 GitLab Runner 信任 容器,以便他们能够相互交谈。

映像配置为查找受信任的 SSL 但是,可以使用配置选项更改 中的证书。gitlab/gitlab-runner/etc/gitlab-runner/certs/ca.crt-e "CA_CERTIFICATES_PATH=/DIR/CERT"

将文件复制到数据卷(或容器)上的目录中。 该文件应包含所有服务器的根证书 希望 GitLab Runner 信任。GitLab Runner 容器在启动时导入文件,因此如果 容器已在运行,可能需要重新启动它才能使更改生效。ca.crtcertsca.crtca.crt

Docker 镜像

以下多平台 Docker 映像可用:

  • gitlab/gitlab-runner:latest​基于 Ubuntu。
  • gitlab/gitlab-runner:alpine​基于Alpine,占地面积小得多 (~160/350 MB Ubuntu 与 ~45/130 MB Alpine 压缩/解压缩)。

请参阅 GitLab Runneropen in new window 源代码,了解 Ubuntu 和 Alpine 映像的可能构建说明。

创建 GitLab Runner Docker 镜像

从 GitLab Runner 16.1 开始,基于 Alpine 的 GitLab Runner Docker 镜像使用 Alpine 3.18.2。但是,您可以在映像的操作系统在 GitLab 存储库中可用之前对其进行升级。

要为最新的 Alpine 版本生成 Docker 映像,请执行以下操作:gitlab-runner

  1. 创造。alpine-upgrade/Dockerfile

    ARG GITLAB_RUNNER_IMAGE_TYPE
    ARG GITLAB_RUNNER_IMAGE_TAG
    FROM gitlab/${GITLAB_RUNNER_IMAGE_TYPE}:${GITLAB_RUNNER_IMAGE_TAG}
    
    RUN apk update
    RUN apk upgrade
    
  2. 创建升级后的映像。gitlab-runner

    GITLAB_RUNNER_IMAGE_TYPE=gitlab-runner GITLAB_RUNNER_IMAGE_TAG=alpine-v16.1.0 docker build -t $GITLAB_RUNNER_IMAGE_TYPE:$GITLAB_RUNNER_IMAGE_TAG --build-arg GITLAB_RUNNER_IMAGE_TYPE=$GITLAB_RUNNER_IMAGE_TYPE --build-arg GITLAB_RUNNER_IMAGE_TAG=$GITLAB_RUNNER_IMAGE_TAG -f alpine-upgrade/Dockerfile alpine-upgrade
    
  3. 创建升级后的映像。gitlab-runner-helper

    GITLAB_RUNNER_IMAGE_TYPE=gitlab-runner-helper GITLAB_RUNNER_IMAGE_TAG=x86_64-v16.1.0 docker build -t $GITLAB_RUNNER_IMAGE_TYPE:$GITLAB_RUNNER_IMAGE_TAG --build-arg GITLAB_RUNNER_IMAGE_TYPE=$GITLAB_RUNNER_IMAGE_TYPE --build-arg GITLAB_RUNNER_IMAGE_TAG=$GITLAB_RUNNER_IMAGE_TAG -f alpine-upgrade/Dockerfile alpine-upgrade
    

IBM Z 映像不包含依赖关系,因为它尚未针对 Linux s390x 或 Linux ppc64le 进行维护 平台。有关当前状态,请参阅问题。docker-machine

SELinux的

某些发行版(CentOS、Red Hat、Fedora)默认使用 SELinux 来增强底层系统的安全性。

在处理此类配置时必须特别小心。

  1. 如果要使用 Docker 执行程序在容器中运行构建,则需要访问 . 但是,如果 SELinux 处于强制模式,则在访问 时会看到错误。 安装 selinux-dockersock 以解决此问题。/var/run/docker.sockPermission denied/var/run/docker.sock
  2. 确保在 host: 上创建了持久性目录。mkdir -p /srv/gitlab-runner/config
  3. 在卷上运行 Docker::Z
docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner:Z \
  gitlab/gitlab-runner:latest