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

GitLab Runner
在容器中运行 GitLab Runner所有层级所有产品
这就是在 Docker 容器中运行 GitLab Runner 的方法。
Docker 引擎版本兼容性
一般来说,Docker Engine 的版本和 GitLab Runner 容器镜像的版本 不必匹配。GitLab Runner 镜像应该向后和向前兼容。 但是,为了确保您拥有最新的功能和安全更新, 您应该始终使用最新的稳定 Docker 引擎版本。
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 映像并启动容器
在开始之前,请确保已安装 Docker。
若要在 Docker 容器内运行,需要确保在容器重启时配置不会丢失。为此,有两个选项,如下所述。gitlab-runner
请务必阅读 FAQ 部分,其中描述了 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 容器
在此示例中,您可以使用配置容器来装载自定义数据卷。
创建 Docker 卷:
docker volume create gitlab-runner-config
使用我们刚刚创建的卷启动 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
注册运行器
最后一步是注册新的运行器。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 文档页面上找到有关处理容器日志的更多信息。
安装受信任的 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 Runner 源代码,了解 Ubuntu 和 Alpine 映像的可能构建说明。
创建 GitLab Runner Docker 镜像
从 GitLab Runner 16.1 开始,基于 Alpine 的 GitLab Runner Docker 镜像使用 Alpine 3.18.2。但是,您可以在映像的操作系统在 GitLab 存储库中可用之前对其进行升级。
要为最新的 Alpine 版本生成 Docker 映像,请执行以下操作:gitlab-runner
创造。
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
创建升级后的映像。
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
创建升级后的映像。
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 来增强底层系统的安全性。
在处理此类配置时必须特别小心。
- 如果要使用 Docker 执行程序在容器中运行构建,则需要访问 . 但是,如果 SELinux 处于强制模式,则在访问 时会看到错误。 安装 selinux-dockersock 以解决此问题。
/var/run/docker.sockPermission denied/var/run/docker.sock
- 确保在 host: 上创建了持久性目录。
mkdir -p /srv/gitlab-runner/config
- 在卷上运行 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