Windows Server下GitLab Runner 14.4.0执行CI任务缓慢超时问题求助
问题描述
我将GitLabRunner 14.4.0 (4b9e985a)作为服务安装在Windows Server上,安装参数如下:
抱歉界面不是英文,但配置内容可清晰识别。该服务器除GitLab-Runner外无其他程序运行,所有资源均空闲。
以下是我的config.toml配置:
concurrent = 5 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "TorgovayaSystema" url = "https://srvgitlab.maxi-net.ru/" token = "xxxxxx_xxxxxxxxxxxxx" executor = "shell" shell = "cmd" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure]
我尝试过cmd和pwsh两种shell执行器。
我使用如下CI配置运行任务:
stages: - build build-modules-job: stage: build variables: ErrorActionPreference: stop script: - .\gradlew.bat compile tags: - cpp
当我在该服务器上单独执行gradlew.bat compile时仅耗时1分钟,但在Runner中执行该任务会触发超时,此前最长执行到1小时。
我的核心问题是CI任务执行触发1小时超时
我添加-d参数运行后,得到大量如下日志:
2021-11-12T18:21:33.777+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry. 2021-11-12T18:21:33.777+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry. 2021-11-12T18:21:33.777+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry. 2021-11-12T18:21:33.778+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry. 2021-11-12T18:21:33.778+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry. 2021-11-12T18:21:33.778+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry. 2021-11-12T18:21:43.777+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry. 2021-11-12T18:21:43.777+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry. 2021-11-12T18:21:43.778+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry. 2021-11-12T18:21:43.779+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry. 2021-11-12T18:21:43.779+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry. 2021-11-12T18:21:43.780+0300 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
我判断问题并不在Gradle或者CI配置上,因为Git初始化步骤同样耗时极长,推测是gitlab-runner.exe本身存在问题,有没有相关解决思路?
解决方案
按优先级依次尝试以下操作:
- 调整Runner服务运行身份:打开Windows服务管理器,找到GitLab Runner对应的服务,进入属性→登录选项卡,将默认的Local System账户替换为你手动执行gradlew命令时登录的用户账户,输入对应密码后重启Runner服务。Local System账户的网络权限、目录权限、环境变量和普通登录用户差异极大,是Windows平台Runner执行异常的最常见诱因。
- 禁用Gradle守护进程:CI场景不需要长期驻留的Gradle守护进程,锁日志就是守护进程争抢文件锁导致的,在CI配置的variables中添加
GRADLE_OPTS: "-Dorg.gradle.daemon=false",或者将执行命令修改为.\gradlew.bat --no-daemon compile。 - 优化目录权限和安全扫描:检查Runner工作目录(默认是C:\GitLab-Runner\builds)的权限,确保Runner运行账户对该目录有完全控制权限;将该目录加入Windows Defender的排除列表,关闭对该目录的实时扫描,避免IO操作被安全软件拦截拖慢速度。
- 优化Git拉取速度:给Runner运行的用户账户全局配置Git参数:
同时在CI的variables中添加git config --global core.fscache true git config --global gc.auto 256GIT_DEPTH: 10开启浅层克隆,减少Git拉取的文件体积。 - 升级Runner版本:GitLab Runner 14.4.0存在Windows shell执行器的IO性能已知bug,可以升级到14.10.x的最新稳定版本(同大版本兼容性更好),或者直接升级到当前最新的稳定版修复问题。
内容的提问来源于stack exchange,提问作者Olga Pshenichnikova
相关产品推荐
相关产品推荐

