azure cli не останавливается при ошибке в скрипте PS - PullRequest
0 голосов
/ 31 марта 2020

Сведено до минимума. У меня есть скрипт Powershell, который выглядит следующим образом:

$ErrorActionPreference='Stop'
az group deployment create -g ....
# Error in az group
# More az cli commands

Даже при наличии ошибки в создании развертывания группы az он продолжает выполняться после ошибки. Как мне остановить выполнение скрипта при ошибке?

1 Ответ

0 голосов
/ 31 марта 2020

Обычно первое, что нужно попробовать - это обернуть все в try...catch блок.

try {
    $ErrorActionPreference='Stop'
    az group deployment create -g ....
    # Error in az group
    # More az cli commands
}
catch {
    Write-Host "ERROR: $Error"
}

Аааа, и это не сработает.

Это это когда вы почесываете голову и понимаете, что мы имеем дело с Azure CLI командами, а не Azure PowerShell . Они не являются родными командами PowerShell, которые соблюдают $ErrorActionPreference, вместо этого (как бы плохо это не звучало) мы должны обрабатывать каждую команду Azure CLI независимо, как если бы мы выполняли отдельные программы (в бэкэнде, * 1034). * CLI - это в основном псевдонимы, которые запускают команды python. По иронии судьбы большинство Azure команд PowerShell являются просто оболочками PowerShell вокруг Azure команд CLI; -)).

Зная, что CLI Azure не будет бросить завершающую ошибку, вместо этого мы должны рассматривать ее как программу и смотреть на код возврата (хранящийся в переменной $LASTEXITCODE), чтобы увидеть, была ли она успешной или нет. Как только мы оценим это, мы можем затем throw выдать ошибку:

az group deployment create -g ....
if(!$LASTEXITCODE){
    Write-Host "ERROR: in Az Group"
    Throw "ERROR: in Az Group"
}

. Затем она может быть реализована в блоке try...catch, чтобы остановить выполнение следующих команд:

try {
    az group deployment create -g ....
    if(!$LASTEXITCODE){
        Write-Host "ERROR: in Az Group"
        Throw "ERROR: in Az Group"
    }
    # Error in az group
    # More az cli commands
}
catch {
    Write-Host "ERROR: $Error"
}

К сожалению, это означает, что вы должны оценивать $LASTEXITCODE каждый раз, когда вы выполняете Azure команду CLI.

...