VirtualBox

noteParallels 执行器和 VirtualBox 执行器工作方式相同。当前不支持缓存功能。

VirtualBox 允许您使用 VirtualBox 虚拟化为构建提供干净的构建环境。这个执行器支持所有可以在 VirtualBox 上运行的系统。唯一的要求是虚拟机需要暴露 SSH 服务器并提供与 Bash 或 PowerShell 兼容的 Shell。

note确保在极狐GitLab Runner 使用 VirtualBox 执行器的任何虚拟机上满足常见先决条件

概览

项目的源代码检出到:~/builds/<namespace>/<project-name>

其中:

  • <namespace> 是在极狐GitLab 上存储项目的命名空间。
  • <project-name> 是存储在极狐GitLab 上的项目的名称。

如果您想覆盖 ~/builds 目录,请在 config.toml 中的 [[runners]] 部分下指定 builds_dir 选项。

您也可以使用 GIT_CLONE_PATH 定义每个构建的自定义构建目录

创建新的基础虚拟机

  1. 安装 VirtualBox
    • 如果 Windows 和 VirtualBox 的运行安装在默认位置(例如 %PROGRAMFILES%\Oracle\VirtualBox),极狐GitLab Runner 会进行自动探测。 否则,您需要向 gitlab-runner 进程的 PATH 环境变量中添加安装文件夹。
  2. 在 VirtualBox 中导入或创建新的虚拟机。
  3. 将网络适配器 1 配置为 “NAT”(这是目前极狐GitLab Runner 能够通过 SSH 连接到客户机的唯一方式)。
  4. (可选) 将另外一个网络适配器配置为 “桥接网络”,从客户机(例如)访问因特网。
  5. 登录新的虚拟机。
  6. 如果是 Windows 虚拟机,请查看 Windows 虚拟机清单
  7. 安装 OpenSSH 服务器。
  8. 安装您构建所需的所有其他依赖项。
  9. 如果您想下载或上传作业产物,请在虚拟机内安装 gitlab-runner
  10. 退出并关闭虚拟机。

完全可以使用类似 Vagrant 的自动化工具部署虚拟机。

创建新的 Runner

  1. 在运行 VirtualBox 的主机上安装极狐GitLab Runner。
  2. 使用 gitlab-runner register 注册新的 Runner。
  3. 选择 virtualbox 执行器。
  4. 输入您之前创建的基础虚拟机的名称(在虚拟机设置的 通用 > 基本 > 名称 中查看)。
  5. 输入 SSH userpassword 或者虚拟机的 identity_file 的路径。

工作方式

当开启一个新构建:

  1. 会为虚拟机生成一个特定的名称:runner-<short-token>-concurrent-<id>
  2. 如果没有,会克隆虚拟机。
  3. 创建端口转发规则,访问 SSH 服务器。
  4. 极狐GitLab Runner 开启或还原虚拟机的快照。
  5. 极狐GitLab Runner 等待 SSH 服务器可用。
  6. 极狐GitLab Runner 创建运行的虚拟机的快照(为了加快后面的构建)。
  7. 极狐GitLab Runner 连接虚拟机并执行构建。
  8. 如果启用,使用虚拟机内的 gitlab-runner 二进制文件完成产物上传。
  9. 极狐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
  • 配置默认 Shell 为 pwsh。使用正确的完整路径更新示例:

    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "$PSHOME\pwsh.exe" -PropertyType String -Force
    
  • config.toml 添加 pwsh Shell。