我已使用以下引數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]
我嘗試了兩種 shell -cmd和pwsh.
我從以下CI配置運行任務:
stages:
- build
build-modules-job:
stage: build
variables:
ErrorActionPreference: stop
script:
- .\gradlew.bat compile
tags:
- cpp
當我gradlew.bat compile在這臺機器上單獨運行時,它需要一分鐘,但在跑步機內部超時,這是一小時前。
所以,我的問題是 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......
有人有想法嗎?
uj5u.com熱心網友回復:
好的,首先,我要感謝在我的帖子下發表評論的人。
我實際上嘗試了兩種建議的方法:
gitlab-runner.exe使用gitlab-runner install --user user --password password選項使用我自己的帳戶運行- 跑
gradle task --no-daemon
此外,非常重要的是,當您使用gradle或maven批處理腳本時,您需要使用call陳述句來執行它,例如:
- 使用呼叫:
call gradle compile --no-daemon
這樣,腳本將繼續。
但是系統還是掛了……
我嘗試使用編譯命令在單獨的批處理中運行所有這些,這些命令是相同的,gradle用于構建的插件Borland CPP:
- 使用腳本手動運行
bpr2mak.exe和make.exe
比我發現問題...當我從Gradle插件內部運行它時,它使用了這樣一段代碼:
Process process = Runtime.getRuntime().exec(command, envVars.toArray(new String[0]), cwd);
BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = out.readLine()) != null) {
logger.log(line);
System.out.println(line);
}
process.waitFor();
return process.exitValue();
所以有一些特殊性,Runtime.exec()并且有out.readLine()相互阻塞的讀入阻塞process.waitFor()。您可以在此處閱讀有關.
所以這里的程序掛了!它凍結了:
Loaded cached pre-compiled headers
DocAssImpl.cpp:
FmDocAss.cpp:
當我在stdout之前添加stderr 時,它會繼續,并給我一條預期的訊息。
全碼:
Process process = Runtime.getRuntime().exec(command, envVars.toArray(new String[0]), cwd);
BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line;
while ((line = err.readLine()) != null) {
logger.log(line);
System.out.println(line);
}
while ((line = out.readLine()) != null) {
logger.log(line);
System.out.println(line);
}
process.waitFor();
return process.exitValue();
結果訊息;
BUILD FAILED in 3s
2 actionable tasks: 2 executed
Cleaning up project directory and file based variables 00:00
ERROR: Job failed: exit status 1
所以畢竟問題出在include路徑上...我們的構建系統廣泛使用subst,所以為了成功編譯,需要在構建腳本中添加follow命令:
subst L: C:\Work\projects\Library\
subst P: C:\Work\projects\TradingSystem\
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/360972.html
