Исключение, генерируемое CAKE во время сборки TeamCity, но не воспроизводимое локально

Я использую ТОРТ 0.22.0.

На одном из этапов сборки я добавил Finally пункт. внутри FinallyЯ называю RunPowershellScript метод, который в свою очередь выполняет скрипт Powershell, находящийся в системе управления версиями.

При тестировании в моем локальном клоне из основного исходного хранилища все работает успешно, без каких-либо исключений.

Тем не менее, на TeamCity, RunPowershellScript метод бросил System.NullReferenceException с сообщением об ошибке Object reference not set to an instance of an object.:

Я вошел в свой агент сборки и смог со 100% уверенностью убедиться, что скрипт PowerShell работал без проблем.

Вопросы: 1. Почему выдается исключение, даже если сценарий PowerShell был успешно выполнен на агенте сборки? 2. Почему я не могу воспроизвести ошибку локально?

Приложение 1:

В ответ на комментарий Мэтта я решил проверить, выбрасывает ли мой скрипт какую-либо непрекращающую ошибку, установив $ErrorActionPreference в Stop,

Мой сценарий завершился без каких-либо ошибок (прекращение или нет) на моей локальной машине. Когда я вошел в свой агент сборки, я также увидел, что скрипт успешно завершен. Так что сейчас я действительно не понимаю, почему сборка на TeamCity не удалась, хотя сценарий PowerShell работал на 100% нормально.

Приложение 2:

После очередного сбоя сборки на удаленном агенте сборки (за исключением того же исключения) я снова вошел в систему для расследования. В моем скрипте Powershell у меня есть словарь, в котором ключи stringс и значения string[]s. у меня тоже есть for цикл, который перечисляет все значения для предоставленного ключа.

На этот раз я смог проверить, что перечисление остановилось после первого элемента в массиве, и на этом этапе возникло исключение. Ранее исключение было выдано, хотя все элементы в массиве были перечислены. Есть ли ошибка в надстройке Powershell для CAKE?

Когда я тестировал скрипт Powershell, вызывая его напрямую (т. Е. Не используя надстройку CAKE для Powershell), перечисление по всем значениям завершалось без какого-либо сбоя. Когда я проверил это, запустив build.cake на моей локальной машине он также успешно завершился.

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

1 ответ

Я подозреваю, что TeamCity ищет код возврата из скрипта poweshell. Возможно, вам придется вернуть 0.

Вы можете сделать это, добавив:

EXIT 0;

до конца вашего сценария. Если 0 не работает, попробуйте 1.

Другие вопросы по тегам