Встроенный скрипт Azure DevOps task с powershell не завершает задачу с ошибкой

#powershell #azure-devops #azure-pipelines

#powershell #azure-devops #azure-конвейеры

Вопрос:

В конвейере выпуска Azure DevOps я запускаю встроенный скрипт как часть действия после развертывания задачи развертывания службы приложений Azure (версия задачи 4. *).

Встроенный скрипт выглядит следующим образом:

 powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File UpdateCSP.ps1 -ApiUrl "$(API_URL) $(API_TESTING_URL)"
powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File GenerateVarsJs.ps1 -ApiUrl "$(API_URL)" -IdamAuthServerUrl "$(AUTH_SERVER)" -IdamClientId "$(CLIENT_ID)" -TestApiUrl "$(API_TESTING_URL)"
 

Один из сценариев был жестко завершен (путем вызова Throw "some error text" ) команды. Ошибка была записана в выходные данные задачи, но сама задача выполнена успешно.

Жестко завершенный сценарий powershell возвращает код ошибки 1. Поэтому я ожидал, что сбой скрипта также приведет к сбою задачи.

Мне нужно, чтобы задача завершилась с ошибкой в случае сбоя скрипта (никто не проверяет вывод успешной задачи). Как это можно сделать?

Комментарии:

1. @DanielMann Как упоминалось в вопросе, это задача развертывания службы приложений. У него есть действие после развертывания, в котором вы можете указать встроенный скрипт. Конвейеры выпуска не поддерживают YAML, поэтому он классический. Я полагаю, что информация содержится в вопросе

2. Привет, у вас была возможность ознакомиться с приведенными ниже обходными путями. Получилось ли это?

Ответ №1:

Я провел простой тест. И это сработало нормально.

У меня есть простая команда throw "This is an error. в файле .ps1. Я вызываю сценарий в действии после развертывания задачи развертывания службы приложений Azure:

введите описание изображения здесь

Ожидаемый сбой задачи:

введите описание изображения здесь

Однако вы можете попробовать использовать команды ведения #vso[task.complete result=Failed;]Failed журнала в файле .ps1, чтобы вручную выполнить задачу с ошибкой. См. Ниже:

 Throw "some error text"
Write-Host "##vso[task.complete result=Failed;]Failed"
 

Или вы можете попробовать использовать [Environment]::Exit($exitCode) после Throw команды в вашем файле .ps1.

  Throw "some error text"
 [Environment]::Exit(1)