[英]Python script that calls vcvarsall.bat fails from GitLab CI
I have a Python script that works from cmd.exe
and powershell.exe
but not from a GitLab runner job on Windows.
def build():
for c in ["Debug", "Release"]:
subprocess.check_call(
f'vcvarsall.bat x64 && \
cmake -G "NMake Makefiles" \
-B{os.path.dirname(os.path.realpath(__file__))}/src/x64/{c} \
-S{os.path.dirname(os.path.realpath(__file__))}/src \
-DCMAKE_BUILD_TYPE={c} & \
cmake --build {os.path.dirname(os.path.realpath(__file__))}/src/x64/{c}',
)
if __name__ == "__main__":
build()
If I run the script from cmd.exe
or powershell.exe
like so: python build.py
, everything works as expected - vcvarsall.bat
sets up the environment correctly so the subsequent cmake
call has all of the required environment variables.
使用下面的.gitlab-ci.yml
在 Windows 上從 GitLab 運行程序作業運行腳本失敗。
build:
stage: build
script:
- python build.py
tags:
- windows
在 GitLab UI 作業標准輸出中,我可以確認vcvarsall.bat
正在運行,然后是cmake
:
在CMakeError.log
中,報錯如下:
上面的鏈接錯誤讓我覺得從 GitLab runner 作業運行vcvarsall.bat
並沒有完全配置環境 - 它正在更改環境,但不足以使后續的cmake
成功完成。 當從 GitLab 運行器作業和cmd.exe
執行時,我可以看到vcvarsall.bat
配置的環境之間存在許多差異。
例如,左側是從 GitLab 運行器作業運行腳本時定義的環境,右側是從cmd.exe
運行腳本時定義的環境:
為什么會存在這些環境差異,我該如何解決?
GitLab 運行器作業不會繼承用戶環境變量或配置文件。 例如,Windows 跑步者上的 powershell 始終使用NoProfile
開關運行。
您必須在運行器配置中顯式添加變量(或任何其他可以定義環境變量的地方)或將它們添加到系統環境變量中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.