在 Docker 容器中运行极狐GitLab Runner
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com,私有化部署
你可以在 Docker 容器中运行极狐GitLab Runner 来执行 CI/CD 任务。极狐GitLab Runner 的 Docker 镜像包含所有需要的依赖项:
- 运行极狐GitLab Runner。
- 在容器中执行 CI/CD 任务。
极狐GitLab Runner 的 Docker 镜像使用 Ubuntu 或 Alpine Linux 作为基础。它们封装了标准的 gitlab-runner 命令,类似于直接在主机上安装极狐GitLab Runner。
gitlab-runner 命令在 Docker 容器中运行。此设置将对 Docker 守护进程的完全控制委托给每个极狐GitLab Runner 容器。结果是,如果你在 Docker 守护进程内运行极狐GitLab Runner 而该守护进程也运行其他负载,隔离保证将会被打破。
在此设置中,你运行的每个极狐GitLab Runner 命令都有一个等效的 docker run 命令,如下所示:
- Runner 命令:gitlab-runner <runner command and options...>
- Docker 命令:docker run <chosen docker options...> gitlab/gitlab-runner <runner command and options...>
例如,要获取极狐GitLab Runner 的顶级帮助信息,可以将命令中的 gitlab-runner 部分替换为 docker run [docker options] gitlab/gitlab-runner,如下所示:
shell1docker run --rm -t -i gitlab/gitlab-runner --help 2 3NAME: 4 gitlab-runner - a GitLab Runner 5 6USAGE: 7 gitlab-runner [global options] command [command options] [arguments...] 8 9VERSION: 10 17.9.1 (bbf75488) 11 12(...)
Docker 引擎版本兼容性
Docker 引擎和极狐GitLab Runner 容器镜像的版本不必匹配。极狐GitLab Runner 镜像具有向后和向前兼容性。为了确保拥有最新的功能和安全更新,你应始终使用最新稳定的 Docker 引擎版本。
安装 Docker 镜像并启动容器
前提条件:
- 你已安装 Docker。
- 你已阅读常见问题解答,了解极狐GitLab Runner 中的常见问题。
-
使用 docker pull gitlab/gitlab-runner:<version-tag> 命令下载 gitlab-runner Docker 镜像。
-
使用 docker run -d [options] <image-uri> <runner-command> 命令运行 gitlab-runner Docker 镜像。
-
在 Docker 容器中运行 gitlab-runner 时,确保在重新启动容器时配置不会丢失。挂载一个永久卷来存储配置。可以以以下两种方式挂载卷:
-
可选。如果使用 session_server,通过在 docker run 命令中添加 -p 8093:8093 来公开端口 8093。
-
可选。要使用 Docker 机器执行器进行自动扩展,请通过在 docker run 命令中添加卷挂载来挂载 Docker 机器存储路径 (/root/.docker/machine):
- 对于系统卷挂载,添加 -v /srv/gitlab-runner/docker-machine-config:/root/.docker/machine
- 对于 Docker 命名卷,添加 -v docker-machine-config:/root/.docker/machine
-
注册一个新的 runner。极狐GitLab Runner 容器必须注册以获取任务。
一些可用的配置选项包括:
- 使用标志 --env TZ=<TIMEZONE> 设置容器的时区。
- 对于基于 redhat/ubi9-micro 的 符合 FIPS 的极狐GitLab Runner 镜像,使用 gitlab/gitlab-runner:ubi-fips 标签。
- 安装受信任的 SSL 服务器证书。
从本地系统卷
要将本地系统用于挂载到 gitlab-runner 容器的配置卷和其他资源:
-
可选。在 MacOS 系统中,/srv 默认不存在。创建 /private/srv 或其他私有目录进行设置。
-
运行此命令,根据需要进行修改:
shelldocker 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
从 Docker 卷
要使用配置容器挂载自定义数据卷:
-
创建 Docker 卷:
shelldocker volume create gitlab-runner-config -
使用你刚创建的卷启动极狐GitLab Runner 容器:
shelldocker 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
更新 runner 配置
在你 更改 runner 配置后,通过使用 docker stop 和 docker run 重新启动容器来应用更改。
升级 runner 版本
前提条件:
- 你必须使用与最初挂载数据卷相同的方法 (-v /srv/gitlab-runner/config:/etc/gitlab-runner 或 -v gitlab-runner-config:/etc/gitlab-runner)。
-
拉取最新版本(或特定标签):
shelldocker pull gitlab/gitlab-runner:latest -
停止并删除现有容器:
shelldocker stop gitlab-runner && docker rm gitlab-runner -
按原样启动容器:
shelldocker 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
查看 runner 日志
日志文件的位置取决于你如何启动 runner。当你将其作为:
- 前台任务,无论是作为本地安装的二进制文件还是在 Docker 容器中,日志都会打印到 stdout。
- 系统服务,如使用 systemd,日志可以在系统日志机制(如 Syslog)中查看。
- 基于 Docker 的服务,使用 docker logs 命令,因为 gitlab-runner ... 命令是容器的主进程。
例如,如果你用此命令启动容器,则其名称设置为 gitlab-runner:
shelldocker 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
要查看其日志,请运行此命令,替换 gitlab-runner 为你的容器名称:
shelldocker logs gitlab-runner
安装受信任的 SSL 服务器证书
如果你的极狐GitLab CI/CD 服务器使用自签名 SSL 证书,请确保你的 runner 容器信任极狐GitLab CI 服务器证书。这可以防止通信失败。
前提条件:
- 你的 ca.crt 文件应包含所有你希望极狐GitLab Runner 信任的服务器的根证书。
- 可选。gitlab/gitlab-runner 镜像在 /etc/gitlab-runner/certs/ca.crt 中查找受信任的 SSL 证书。要更改此行为,请使用 -e "CA_CERTIFICATES_PATH=/DIR/CERT" 配置选项。
- 将你的 ca.crt 文件复制到数据卷(或容器)上的 certs 目录中。
- 可选。如果你的容器已经在运行,请重新启动它以在启动时导入 ca.crt 文件。
Docker 镜像
在极狐GitLab Runner 17.10.0 中,基于 Alpine 的 Docker 镜像使用 Alpine 3.19。以下是可用的多平台 Docker 镜像:
- gitlab/gitlab-runner:latest 基于 Ubuntu,约 800 MB。
- gitlab/gitlab-runner:alpine 基于 Alpine,约 460 MB。
创建一个 runner Docker 镜像
你可以在极狐GitLab 仓库中更新可用之前升级镜像的操作系统。
前提条件:
- 你没有使用 IBM Z 镜像,因为它不包含 docker-machine 依赖项。此镜像不为 Linux s390x 或 Linux ppc64le 平台维护。
要为最新的 Alpine 版本构建 gitlab-runner Docker 镜像:
-
创建 alpine-upgrade/Dockerfile。
dockerfile1ARG GITLAB_RUNNER_IMAGE_TYPE 2ARG GITLAB_RUNNER_IMAGE_TAG 3FROM gitlab/${GITLAB_RUNNER_IMAGE_TYPE}:${GITLAB_RUNNER_IMAGE_TAG} 4 5RUN apk update 6RUN apk upgrade -
创建升级后的 gitlab-runner 镜像。
shell1GITLAB_RUNNER_IMAGE_TYPE=gitlab-runner \ 2GITLAB_RUNNER_IMAGE_TAG=alpine-v17.9.1 \ 3docker build -t $GITLAB_RUNNER_IMAGE_TYPE:$GITLAB_RUNNER_IMAGE_TAG \ 4 --build-arg GITLAB_RUNNER_IMAGE_TYPE=$GITLAB_RUNNER_IMAGE_TYPE \ 5 --build-arg GITLAB_RUNNER_IMAGE_TAG=$GITLAB_RUNNER_IMAGE_TAG \ 6 -f alpine-upgrade/Dockerfile alpine-upgrade -
创建升级后的 gitlab-runner-helper 镜像。
shell1GITLAB_RUNNER_IMAGE_TYPE=gitlab-runner-helper \ 2GITLAB_RUNNER_IMAGE_TAG=x86_64-v17.9.1 \ 3docker build -t $GITLAB_RUNNER_IMAGE_TYPE:$GITLAB_RUNNER_IMAGE_TAG \ 4 --build-arg GITLAB_RUNNER_IMAGE_TYPE=$GITLAB_RUNNER_IMAGE_TYPE \ 5 --build-arg GITLAB_RUNNER_IMAGE_TAG=$GITLAB_RUNNER_IMAGE_TAG \ 6 -f alpine-upgrade/Dockerfile alpine-upgrade
在你的容器中使用 SELinux
一些发行版,如 CentOS、Red Hat 和 Fedora 默认使用 SELinux(Security-Enhanced Linux)来增强底层系统的安全性。
使用此配置时请谨慎。
前提条件:
- 要使用 Docker 执行器 在容器中运行构建,runners 需要访问 /var/run/docker.sock。
- 如果你在强制模式下使用 SELinux,请安装 selinux-dockersock 以防止在 runner 访问 /var/run/docker.sock 时出现 Permission denied 错误。
-
在主机上创建一个持久目录:mkdir -p /srv/gitlab-runner/config。
-
在卷上使用 :Z 运行 Docker:
shelldocker 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