繁体   English   中英

调用 vcvarsall.bat 的 Python 脚本从 GitLab CI 失败

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM