GitLab Runner Windows 安装指南
本文档源自 GitLab 官方文档,提供了在 Windows 系统上安装、配置、升级、卸载 GitLab Runner 的完整指南,并包含详细的故障排除方案。
本指南详细说明了如何在 Windows 操作系统上安装和运行 GitLab Runner。
📋 系统要求
在 Windows 上安装和运行 GitLab Runner 需要满足以下条件:
- Git:可从 Git 官网 下载安装。
- 用户账户密码:如果你计划使用用户账户(而非内置系统账户)来运行 Runner,则需要知道该账户的密码。
- 系统区域设置:建议将系统区域设置为 英语(美国),以避免潜在的字符编码问题。更多信息请参阅 issue 38702。
1. 安装步骤
1.1 创建专用目录
首先,在你的系统上创建一个专用文件夹,例如 C:\GitLab-Runner。
1.2 下载 Runner 可执行文件
根据你的系统架构,下载对应的 64 位或 32 位二进制文件,并将其放入上一步创建的文件夹中。
64位程序: https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-windows-amd64.exe 32位程序: https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-windows-386.exe
此处假设你已将可执行文件重命名为 gitlab-runner.exe(此步骤为可选操作)。你可以按照 “Bleeding Edge - 下载其他标记版本” 中的说明,下载任何可用版本的二进制文件。
重要安全提示:务必限制 GitLab Runner 目录及其可执行文件的 写入权限。如果未设置这些权限,普通用户可能会替换该可执行文件,并以提升的权限运行任意代码。
1.3 安装并启动服务(两种方式)
你可以选择使用内置系统账户(推荐)或用户账户来运行 GitLab Runner 服务。
请注意:以下命令示例均基于步骤 1.1 中创建的目录 C:\GitLab-Runner。
方式一:使用内置系统账户运行服务 这是推荐的方式,无需提供用户凭据。
cd C:\GitLab-Runner
.\gitlab-runner.exe install
.\gitlab-runner.exe start
方式二:使用用户账户运行服务 如果你选择使用特定用户账户运行,需要提供该账户的用户名和密码。
cd C:\GitLab-Runner
.\gitlab-runner.exe install --user ENTER-YOUR-USERNAME --password ENTER-YOUR-PASSWORD
.\gitlab-runner.exe start
如果在安装过程中遇到任何错误,请参阅本文档的 故障排除 部分。
1.4 (可选)高级配置
安装完成后,你可以根据需要调整 Runner 的配置。
- 修改并发作业数:编辑
C:\GitLab-Runner\config.toml文件,修改concurrent值以允许同时运行多个作业。详细配置请参考 高级配置详情。 - 更改 Shell 执行器:你同样可以通过高级配置,将默认的
shell执行器从Batch更改为Bash或PowerShell。
完成以上步骤后,Runner 即安装成功并开始运行,且会在每次系统重启后自动启动。相关日志存储在 Windows 事件查看器 中。
2. 升级指南
要升级 GitLab Runner,请按以下步骤操作:
- 停止服务(需要使用提升权限的命令提示符):
shell cd C:\GitLab-Runner .\gitlab-runner.exe stop - 下载并替换可执行文件:下载对应系统架构(64位或32位)的新版二进制文件,替换掉原有的 Runner 可执行文件。同样,可参考 “Bleeding Edge” 下载所需版本。
- 启动服务:
shell .\gitlab-runner.exe start
3. 卸载指南
若要完全卸载 GitLab Runner,请执行以下命令:
cd C:\GitLab-Runner
.\gitlab-runner.exe stop
.\gitlab-runner.exe uninstall
cd ..
rmdir /s GitLab-Runner
4. 查看运行日志
使用 .\gitlab-runner.exe install 命令安装后,gitlab-runner 会作为一个 Windows 服务运行。你可以通过以下方式查看日志:
- 图形界面:在 事件查看器 中查找提供程序名为
gitlab-runner的日志。 - PowerShell(若无图形界面访问权限):
powershell PS C:\> Get-WinEvent -ProviderName gitlab-runner
5. 故障排除
在开始前,建议先阅读 FAQ 部分,其中描述了 GitLab Runner 最常见的一些问题。
5.1 账户名无效
如果遇到类似 “The account name is invalid” 的错误,请尝试在用户名前添加 .\:
.\gitlab-runner.exe install --user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD"
5.2 服务因登录失败而无法启动
如果在启动服务时遇到 “The service did not start due to a logon failure” 错误,通常是因为执行服务的用户缺少 SeServiceLogonRight 权限。请按以下步骤添加权限:
- 进入 控制面板 > 系统和安全 > 管理工具。
- 打开 本地安全策略 工具。
- 在左侧列表中选择 安全设置 > 本地策略 > 用户权限分配。
- 在右侧列表中打开 作为服务登录。
- 点击 添加用户或组...。
- 添加相应用户(手动或使用 高级...),并应用设置。
根据微软文档,此方法适用于 Windows Vista、7、8/8.1、10 及其对应的 Server 版本。某些 Windows 版本(如“家庭版”)可能不提供“本地安全策略”工具。
添加权限后,再次运行 gitlab-runner start 命令应能成功启动服务。
5.3 Windows 构建时出现 PathTooLongException
此错误通常由 npm 等工具生成超过 260 个字符的路径结构引起。解决方案如下:
- 启用 Git 的
core.longpaths:- 在命令行中运行:
git config --system core.longpaths true - 在 GitLab CI 项目设置页面中,将项目设置为使用
git fetch。
- 在命令行中运行:
- 使用 PowerShell 的 NTFSSecurity 工具:安装 NTFSSecurity PowerShell 模块后,其提供的
Remove-Item2方法支持长路径。GitLab Runner 检测到该模块会自动使用它。 - 针对特定版本的变通方案(GitLab Runner 16.9.1 至 17.10.0 之前存在相关缺陷):
- 使用
pre_get_sources_script重新启用 Git 系统级设置(通过取消设置GIT_CONFIG_NOSYSTEM),这会默认在 Windows 上启用core.longpaths。 - 构建自定义的
gitlab-runner-helper镜像。
- 使用
5.4 Windows 批处理脚本错误
如果批处理脚本报错 “The system cannot find the batch label specified - buildscript”,你需要在 .gitlab-ci.yml 文件的批处理调用前加上 call 关键字。
例如:
before_script:
- call C:\path\to\test.bat
更多信息请参阅 issue 1025。
5.5 如何获取彩色输出?
- 简答:确保你的程序输出中包含 ANSI 颜色代码。出于文本格式化目的,请假设你运行在一个 UNIX ANSI 终端模拟器中(因为这是 Web 界面的输出环境)。
- 详解:GitLab CI 的 Web 界面模拟了一个 UNIX ANSI 终端。
gitlab-runner将构建输出直接传输到 Web 界面,因此任何存在的 ANSI 颜色代码都会生效。某些 Windows 程序(如使用 Colorama 库)会进行 ANSI 到 Win32 调用的转换,在 CI 构建中,你需要禁用此转换,以保留 ANSI 代码。
5.6 作业被错误地标记为成功或失败
许多 Windows 程序使用 exit code 0 表示成功,但有些程序(如 robocopy)并非如此。这可能导致 CI 作业判断错误。
示例问题:以下作业即使 robocopy 成功执行,也会被标记为失败:
test:
script:
- robocopy ./source ./dest
解决方案:创建一个 PowerShell 脚本手动检查退出码,并在 .gitlab-ci.yml 中调用该脚本。
示例 PowerShell 脚本 (robocopyCommand.ps1):
$exitCodes = 0,1 # robocopy 返回 0 或 1 表示成功
robocopy ./source ./dest
if ( $exitCodes.Contains($LastExitCode) ) {
exit 0
} else {
exit 1
}
注意:在 PowerShell 函数中,注意 exit 和 return 的区别。exit 1 会将作业标记为失败,而 return 1 不会。
5.7 其他常见问题速查
| 问题场景 | 可能原因/解决方案 |
|---|---|
| 没有 Windows 密码 | 无法启动使用用户账户的服务,请改用内置系统账户。 |
| 使用映射网络驱动器时提示“系统找不到指定的路径” | 服务登录会话在访问资源时存在安全限制。请使用驱动器的 UNC 路径 替代映射盘符。 |
| Docker 执行器报错 “unsupported Windows Version” | Docker 版本可能过旧。请升级到与 Windows Server 发行版时间相近或更新的 Docker 版本。 |
| Kubernetes 执行器报错 “unsupported Windows Version” | 在 GitLab Runner 配置文件的 [runners.kubernetes.node_selector] 部分,添加 "node.kubernetes.io/windows-build" = "10.0.17763" 等节点选择器。 |
| 使用 Windows 子系统 Linux (WSL) 时作业日志输出为空白行 | 默认情况下,WSL 的 STDOUT 输出未使用 UTF8 编码。在作业变量中设置 WSL_UTF8: "1" 可强制使用 UTF8 编码。 |
| Docker-Windows 执行器作业失败,提示“Permission denied” | 请确保运行 Docker 引擎的用户对 C:\ProgramData\Docker 目录拥有完全控制权限。 |
文档来源:GitLab 官方文档 - Install GitLab Runner on Windows
整理日期:2026年1月2日
归档说明:此中文 Markdown 文档为官方英文文档的忠实翻译与整理,用于技术存档与参考。