VirtualBox
Parallels 执行器和 VirtualBox 执行器工作方式相同。当前不支持缓存功能。
VirtualBox 允许您使用 VirtualBox 虚拟化为构建提供干净的构建环境。这个执行器支持所有可以在 VirtualBox 上运行的系统。唯一的要求是虚拟机需要暴露 SSH 服务器并提供与 Bash 或 PowerShell 兼容的 Shell。
如果 Git LFS 安装在虚拟机上,极狐GitLab Runner 会使用
git lfs
命令。
请确保 Git LFS 在任何使用 VirtualBox 执行器运行极狐GitLab Runner 的虚拟机上都是最新的。概览
项目的源代码检出到:~/builds/<namespace>/<project-name>
。
其中:
-
<namespace>
是在极狐GitLab 上存储项目的命名空间。 -
<project-name>
是存储在极狐GitLab 上的项目的名称。
如果您想覆盖 ~/builds
目录,请在 config.toml
中的 [[runners]]
部分下指定 builds_dir
选项。
您也可以使用 GIT_CLONE_PATH
定义每个构建的自定义构建目录。
创建新的基础虚拟机
- 安装 VirtualBox。
- 如果 Windows 和 VirtualBox 的运行安装在默认位置(例如
%PROGRAMFILES%\Oracle\VirtualBox
),极狐GitLab Runner 会进行自动探测。 否则,您需要向gitlab-runner
进程的PATH
环境变量中添加安装文件夹。
- 如果 Windows 和 VirtualBox 的运行安装在默认位置(例如
- 在 VirtualBox 中导入或创建新的虚拟机。
- 将网络适配器 1 配置为 “NAT”(这是目前极狐GitLab Runner 能够通过 SSH 连接到客户机的唯一方式)。
- (可选) 将另外一个网络适配器配置为 “桥接网络”,从客户机(例如)访问因特网。
- 登录新的虚拟机。
- 如果是 Windows 虚拟机,请查看 Windows 虚拟机清单。
- 安装 OpenSSH 服务器。
- 安装您构建所需的所有其他依赖项。
- 如果您想上传作业产物,请在虚拟机内安装
gitlab-runner
。 - 退出并关闭虚拟机。
完全可以使用类似 Vagrant 的自动化工具部署虚拟机。
创建新的 Runner
- 在运行 VirtualBox 的主机上安装极狐GitLab Runner。
- 使用
gitlab-runner register
注册新的 Runner。 - 选择
virtualbox
执行器。 - 输入您之前创建的基础虚拟机的名称(在虚拟机设置的 通用 > 基本 > 名称 中查看)。
- 输入 SSH
user
和password
或者虚拟机的identity_file
的路径。
工作方式
当开启一个新构建:
- 会为虚拟机生成一个特定的名称:
runner-<short-token>-concurrent-<id>
。 - 如果没有,会克隆虚拟机。
- 创建端口转发规则,访问 SSH 服务器。
- 极狐GitLab Runner 开启或还原虚拟机的快照。
- 极狐GitLab Runner 等待 SSH 服务器可用。
- 极狐GitLab Runner 创建运行的虚拟机的快照(为了加快后面的构建)。
- 极狐GitLab Runner 连接虚拟机并执行构建。
- 如果启用,使用虚拟机内的
gitlab-runner
二进制文件完成产物上传。 - 极狐GitLab Runner 关闭或停止虚拟机。
Windows 虚拟机清单
如果您想在 Windows 上使用 VirtualBox,您可以安装 Cygwin 或 PowerShell。
使用 Cygwin
- 安装 Cygwin。
- 从 Cygwin 安装
sshd
和 Git(不要使用 Windows Git,否则会引入很多路径问题)。 - 安装 Git LFS。
- 配置
sshd
并将其设置为服务(参见 Cygwin wiki)。 - 为 Windows 防火墙创建规则,在端口 22 允许入口 TCP 流量。
- 向
~/.ssh/known_hosts
添加极狐GitLab 服务器。 - 使用 the
cygpath
utility 在 Cygwin 和 Windows 间转换路径。
使用本地 OpenSSH 和 PowerShell
引入于极狐GitLab Runner 14.6。
- 安装 PowerShell。
- 安装 OpenSSH。
- 安装 Windows Git。
- 配置
sshd
,将其设置为服务并为 Windows 防火墙添加规则。 -
配置默认 Shell 为
pwsh
。使用正确的完整路径更新示例:New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "$PSHOME\pwsh.exe" -PropertyType String -Force
- 向
config.toml
添加pwsh
Shell。