簡體   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