Сбой предварительной сборки проекта Visual Studio в GitLab Runner - PullRequest
0 голосов
/ 24 февраля 2020

Я написал сценарий Python3, который создает некоторый ресурс Qt (.rcc) и файлы заголовков (.h).

Поскольку этот сценарий будет выполняться как на Windows, так и на macOS, я основал Путь инструмента Qt к переменной среды, называемой QTBIN , которая указывает на двоичную папку в папке установки Qt.

Пока все хорошо при вызове сценария вручную в терминале (оба Windows и Ма c).

Затем я добавил сценарий в качестве события перед сборкой в ​​Visual Studio 2019:

python $(ProjectDir)Scripts\generateQtUI.py

Пока все хорошо. Он выполняется Visual Studio и XCode при локальном запуске.

Теперь, когда мы используем сервер сборки GitLab для сборки обоих проектов, это должно быть просто замечательно. Это команда msbuild, выполняемая Windows GitLab Runner:

- msbuild -m project.sln /t:project /p:Configuration=Debug /p:Platform=x64 /p:PreferredToolArchitecture=x64 -noWarn:C4244 -noWarn:C4267 -noWarn:C4099 -noWarn:C4305 -noWarn:C4018

Однако сервер сборки macOS и Windows жалуется. Конечно, я добавил новую переменную среды на оба сервера сборки.

Сервер сборки windows возвращает этот фрагмент журнала ошибок:

        C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(139,5): error MSB3073: The command "python C:\GitLab-Runner\builds\Uthz1X_B\0\company\product\Scripts\generateQtUI.py [C:\GitLab-Runner\builds\Uthz1X_B\0\company\product\project.vcxproj]
        C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(139,5): error MSB3073:  [C:\GitLab-Runner\builds\Uthz1X_B\0\company\product\project.vcxproj]
        C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(139,5): error MSB3073: :VCEnd" exited with code 9020. [C:\GitLab-Runner\builds\Uthz1X_B\0\company\product\project.vcxproj]
     200 Warning(s)
     1 Error(s)
 Time Elapsed 00:01:10.92
 ERROR: Job failed: exit status 1

Похоже, что сценарии этого не делают даже запускается, поскольку у него есть собственный вывод, который обычно записывается на консоль.

Экземпляр бегуна GitLab на Windows настроен с исполнителем оболочки, а оболочкой является Powershell.

Любые идеи о том, почему серверу сборки не удается создать решение?

ПРИМЕЧАНИЕ : Windows сервер сборки и компьютер разработчика в этом случае - это одни и те же машины.


Дополнительные тесты

Я попытался вызвать сценарий Hello Python .py непосредственно из конфигурации задания сборки. Это возвращает ошибку разрешения, сообщающую, что задание не имеет доступа к папке TEMP, хотя GitLab Runner установлен как служба с конфигурацией по умолчанию (root user).

$ whoami
 nt authority\system
$ python Scripts/HelloPython.py
 Program 'python.exe' failed to run: Systemet kan ikke f� adgang til filenAt C:\WINDOWS\TEMP\build_script885294397\scrip
 t.ps1:183 char:1
 + python Scripts/HelloPython.py
 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.
 At C:\WINDOWS\TEMP\build_script885294397\script.ps1:183 char:1
 + python Scripts/HelloPython.py
 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
     + FullyQualifiedErrorId : NativeCommandFailed

 ERROR: Job failed: exit status 1

1 Ответ

0 голосов
/ 25 февраля 2020

Хорошо, я не видел этого: проблема с разрешением оказалась установкой Python. Он был установлен только для текущего пользователя - не для всех пользователей. Во время установки я выбрал: Установить Python Launcher для всех пользователей. Это не позволило всем пользователям использовать Python, хотя

. Чтобы исправить это, я переустановил Python, выбрал выборочную установку и выбрал параметр: Все пользователи.

Это оказалось решение для работы по сборке GitLab.

Извлеченный урок

  1. Всегда проверяйте, что «установка для всех пользователей» действительно соответствует ожидаемому программному обеспечению.
  2. Не копайте слишком глубоко сообщение об ошибке - оно может быть неправильным или вводящим в заблуждение.
...