Try-Catch Powershell中的重试问题



我正试图通过http触发器使用Azure Function和powershell脚本执行ACR到ACR的同步。我添加了一个重试逻辑,在函数失败并出错之前重试3次。然而,重试逻辑似乎没有按预期工作。下面是代码,请帮助

using namespace System.Net
param($Request, $TriggerMetadata)
$global:erroractionpreference = 1
$counter = 0
$error.Clear()
do {
Write-Host "ACR to ACR sync triggered"
az login --service-principal --username $env:APP_ID --password $env:PASSWORD --tenant $env:TENANT_ID
Write-Host $Request.Body.action
$repo = $Request.Body.target.repository | Out-String
$repo= $repo -replace "n",""
$aztag  = $Request.Body.target.tag | Out-String
$aztag= $aztag -replace "n",""
$imageString = "${repo}:${aztag}"
Write-Host $imageString
try {
az acr import --name $env:acr_name --source "$env:promoted_acr_name.azurecr.io/${imageString}" --image "${imageString}" --username $env:PromotedAPPID --password $env:PromotedPassword --force
}
catch {
$ErrorMessage = $_.Exception.Message
Write-Output "Sync failed with error: $ErrorMessage"
Write-Host "Retrying ACR to ACR sync"
$counter += 1
Write-Host "Attempt number: $counter"
Start-Sleep -Seconds 120
Continue
}
if(!$error){
Exit
}
} while ($counter -lt 4)
if($counter -gt 3){
Write-Host "Sync Failed"
$StatusCode = [HttpStatusCode]::BadRequest
}
else {
Write-Host "imported image from ACR to ACR"
$StatusCode = [HttpStatusCode]::OK
}

谢谢Hazrelle。发布您的答案以帮助其他社区成员。

以下是删除ContinueExit语句后的代码。

using namespace System.Net
param($Request, $TriggerMetadata)
$global:erroractionpreference = 1
$counter = 0
$error.Clear()
do {
Write-Host "ACR to ACR sync triggered"
az login --service-principal --username $env:APP_ID --password $env:PASSWORD --tenant $env:TENANT_ID
Write-Host $Request.Body.action
$repo = $Request.Body.target.repository | Out-String
$repo= $repo -replace "n",""
$aztag  = $Request.Body.target.tag | Out-String
$aztag= $aztag -replace "n",""
$imageString = "${repo}:${aztag}"
Write-Host $imageString
try {
az acr import --name $env:acr_name --source "$env:promoted_acr_name.azurecr.io/${imageString}" --image "${imageString}" --username $env:PromotedAPPID --password $env:PromotedPassword --force
}
catch {
$ErrorMessage = $_.Exception.Message
Write-Output "Sync failed with error: $ErrorMessage"
Write-Host "Retrying ACR to ACR sync"
$counter += 1
Write-Host "Attempt number: $counter"
Start-Sleep -Seconds 120

}

} while ($counter -lt 4)
if($counter -gt 3){
Write-Host "Sync Failed"
$StatusCode = [HttpStatusCode]::BadRequest
}
else {
Write-Host "imported image from ACR to ACR"
$StatusCode = [HttpStatusCode]::OK
}

最新更新