为弹性伸缩 Docker Machine 安装和注册极狐GitLab Runner
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
History
- 自动扩缩容功能引入于极狐GitLab Runner 1.1.0。
Docker Machine 执行器已在极狐GitLab 17.5 中弃用,计划于极狐GitLab 20.0(2027年5月)中移除。在极狐GitLab 20.0 之前,我们将继续支持 Docker Machine 执行器,但不再添加新功能。我们只会修复可能导致 CI/CD 作业无法执行或影响运行成本的关键性错误。如果您在 Amazon Web Services (AWS) EC2、Microsoft Azure Compute 或 Google Compute Engine (GCE) 上使用 Docker Machine 执行器,建议您迁移到 GitLab Runner Autoscaler。
有关自动扩缩容架构的概述,请参阅自动扩缩容的综合文档。
Docker Machine 的分叉版本
Docker 已经弃用 Docker Machine。然而,GitLab 维护了一个 Docker Machine 的分叉版本,为依赖 Docker Machine executor 的极狐GitLab Runner 用户提供支持。
准备环境
要使用自动缩放功能,Docker 和极狐GitLab Runner 必须安装在同一台机器上:
- 登录到一台新的基于 Linux 的机器,该机器可以作为堡垒服务器,Docker 在其上创建新机器。
- 安装极狐GitLab Runner。
- 从 Docker Machine 分叉版本 安装 Docker Machine。
- 可选但推荐,准备一个代理容器注册表和缓存服务器,以便与自动缩放的 runners 一起使用。
配置极狐GitLab Runner
-
熟悉使用 docker-machine 和 gitlab-runner 的核心概念:
-
第一次使用 Docker Machine 时,最好手动执行 docker-machine create ... 命令,并使用您的 Docker Machine 驱动程序。使用您打算在 [runners.machine] 部分的 MachineOptions 中配置的选项运行此命令。这种方法可以正确设置 Docker Machine 环境并验证指定的选项。在此之后,您可以使用 docker-machine rm [machine_name] 销毁机器并启动 runner。
首次使用时,对 docker-machine create 的多个并发请求是不好的。当使用 docker+machine executor 时,runner 可能会启动几个并发的 docker-machine create 命令。如果 Docker Machine 对此环境来说是新的,每个进程都会尝试创建用于 Docker API 认证的 SSH 密钥和 SSL 证书。这个动作会导致并发进程互相干扰。这可能会导致一个不可工作的环境。因此,在您首次将极狐GitLab Runner 与 Docker Machine 设置时,手动创建一个测试机器是很重要的。
- 注册一个 runner 并在询问时选择 docker+machine executor。
- 编辑 config.toml 并配置 runner 以使用 Docker Machine。访问专门页面获取有关极狐GitLab Runner 自动缩放的详细信息。
- 现在,您可以尝试在项目中启动新的流水线。几秒钟后,如果您运行 docker-machine ls,您应该会看到一个新的机器正在创建。
升级极狐GitLab Runner
-
检查您的操作系统是否配置为自动重启极狐GitLab Runner(例如,通过检查其服务文件):
-
如果是,确保服务管理器配置为使用 SIGQUIT,并使用服务的工具来停止进程:
shell# For systemd sudo systemctl stop gitlab-runner # For upstart sudo service gitlab-runner stop
-
如果不是,您可以手动停止进程:
shellsudo killall -SIGQUIT gitlab-runner
-
发送SIGQUIT 信号使进程优雅地停止。进程停止接受新的作业,并在当前作业完成后退出。
-
等待极狐GitLab Runner 退出。您可以使用 gitlab-runner status 检查其状态,或等待最多 30 分钟的优雅关闭:
shellfor i in `seq 1 180`; do # 1800 seconds = 30 minutes gitlab-runner status || break sleep 10 done
-
现在,您可以安全地安装新的极狐GitLab Runner 版本,而不会中断任何作业。
使用 Docker Machine 的分叉版本
安装
-
下载适合的 docker-machine 二进制文件。将二进制文件复制到 PATH 可访问的位置,并使其可执行。例如,要下载并安装 v0.16.2-gitlab.35:
shellcurl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.35/docker-machine-Linux-x86_64" cp docker-machine-Linux-x86_64 /usr/local/bin/docker-machine chmod +x /usr/local/bin/docker-machine
故障排除
在使用 Docker Machine executor 时,您可能会遇到以下问题。
错误:创建机器时出错
在安装 Docker Machine 时,您可能会遇到一个错误,指出 ERROR: Error creating machine: Error running provisioning: error installing docker。
Docker Machine 尝试使用以下脚本在新配置的虚拟机上安装 Docker:
shellif ! type docker; then curl -sSL "https://get.docker.com" | sh -; fi
如果 docker 命令成功,Docker Machine 假设 Docker 已安装并继续。
如果不成功,Docker Machine 会尝试下载并运行 https://get.docker.com 上的脚本。如果安装失败,则可能是操作系统不再受 Docker 支持。
要解决此问题,您可以在安装极狐GitLab Runner 的环境中设置 MACHINE_DEBUG=true 来启用 Docker Machine 的调试。
错误:无法连接到 Docker 守护进程
作业可能在准备阶段失败,并出现错误消息:
plaintextPreparing environment ERROR: Job failed (system failure): prepare environment: Cannot connect to the Docker daemon at tcp://10.200.142.223:2376. Is the docker daemon running? (docker.go:650:120s). Check https://docs.gitlab.com/runner/shells/#shell-profile-loading for more information
当 Docker 守护进程在 Docker Machine executor 创建的 VM 中的预期时间内未能启动时,会出现此错误。要解决此问题,请在[runners.docker]部分中增加 wait_for_services_timeout 值。