У меня есть виртуальная машина в Azure, которую я использую для запуска собственного агента DevOps (версия 2.170.1). Конвейер состоит из некоторых задач PowerShell, которые запускают сборку и модульное тестирование. Я использую для этого ядро PowerShell (версия 7.0.2), а серверная ОС - Windows Server 2019 Datacenter 1809.
Я пробовал запускать задачи прямо на сервере из ядра Powershell (версия 7.0.2), и все работает, как ожидалось. Когда он запускается в конвейере с задачей Powershell @ 2, предупреждения отображаются как ошибки, вызывающие сбой задачи, даже если это не должно происходить. Кроме того, возникают и другие непредвиденные ошибки, которых не было при запуске непосредственно на сервере.
В качестве эксперимента я установил агент той же версии на ноутбук и вместо этого запустил на нем конвейер. Снова использовалось Powershell Core (версия 7.0.2), а ОС ноутбука - Windows 10 Enterprise 1909. Все компиляторы, инструменты тестирования и тому подобное также имеют одну и ту же версию.
На этот раз при запуске конвейера все работало, как ожидалось.
Похоже, это наводит на мысль, что проблема не в задаче Powershell или не в агенте. Однако теперь я дошел до того момента, когда действительно не знаю, где может быть проблема.
Вот пример двух задач, которые выполняет конвейер.
- task: PowerShell@2
displayName: Build source code
inputs:
targetType: inline
pwsh: true
script: 'cd build; make all --jobs 4 --output-sync'
- task: PowerShell@2
displayName: Unit test
inputs:
targetType: inline
pwsh: true
script: 'cd test/unit; ceedling gcov:i2c_ha utils:gcov'
Есть ли у кого-нибудь представление о том, в чем может быть проблема и какое возможное решение?
ОБНОВЛЕНИЕ:
Итак, я провел дополнительное расследование, и, похоже, проблема на самом деле возникает из-за того, как ошибки регистрируются на выходе.
Когда я запускаю Ceedling с отключенными предупреждениями, никаких ошибок или предупреждений не появляется. Когда предупреждения включены, все предупреждения отображаются как ошибки. Похоже, что вывод Ceedling анализируется некорректно.
Часть результатов работы Ceedling
По ссылке я прикрепил часть журнала вывода задачи, выполняющей Ceedling. Как видно, Ceedling сообщает только о предупреждениях, но средство ведения журнала в Azure DevOps фактически регистрирует это как ошибку.
Это затрудняет получение обзора предупреждений и фактических ошибок.