Конвейер DevOps Azure дает разные результаты для двух разных агентов, размещенных на собственном сервере, одной и той же версии.

У меня есть виртуальная машина в 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 фактически регистрирует это как ошибку.

Это затрудняет получение обзора предупреждений и фактических ошибок.


person user13668056    schedule 08.07.2020    source источник


Ответы (1)


Когда он запускается в конвейере с задачей Powershell @ 2, предупреждения отображаются как ошибки, приводящие к сбою задачи, даже если это не должно происходить.

1. Обычно задача PS не выдает предупреждения, попробуйте добавить скрипт ниже:

  ignoreLASTEXITCODE: true
  pwsh: true
  continueOnError: true

2. Если №1 не решает вашу проблему, вам следует проверить, правильно ли вы выбираете машину для запуска вашего конвейера. Предполагая, что в вашем пуле агентов более одного агента, вы можете добавить требует указать агента.

pool:
  name: Default
  demands:
  - Agent.Name -equals YourAgentName
person LoLance    schedule 09.07.2020
comment
Таким образом, проблема на самом деле заключалась в том, что некоторые инструменты были установлены в каталог, к которому агент, по-видимому, не имел прав. Когда я переустановил инструменты в другой каталог, все заработало, как ожидалось. Однако я все еще вижу странное поведение вроде этого: ## [error] handler / can_ha / Test_can_ha.c: 267: 65: warning: передача аргумента 1 'can_write_data' из несовместимого типа указателя [-Wincompatible-pointer-types]. Компилятор выдает предупреждение, но оно регистрируется как ошибка. - person user13668056; 09.07.2020
comment
В каком каталоге вы находились при запуске команд непосредственно в PowerShell? Убедитесь, что вы cd в тот же каталог, прежде чем запускать задачи ps в конвейере. Также убедитесь, что вы запускаете агент в учетной записи администратора. - person LoLance; 13.07.2020
comment
Команды запускаются в правильном каталоге, и теперь я настроил агент для работы под учетной записью администратора, однако проблема не была решена. - person user13668056; 14.07.2020
comment
Привет, извините за медленный ответ. Нет, я не использую командную строку Cmake. Я использую GNU make и GCC. Я обновил вопрос, добавив некоторые дополнительные сведения и некоторые новые данные. - person user13668056; 04.08.2020