[英]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.