powershell - Try Catch Powershell 中的重试问题
问题描述
我正在尝试通过 http 触发器使用 Azure 函数和 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
}
解决方案
谢谢哈兹瑞尔。_ 发布您的答案以帮助其他社区成员。
以下是删除 Continue
和Exit
语句后的代码。
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
}
推荐阅读
- python - 匿名函数的pandas .apply意外返回一系列函数对象
- python - 选择一个列表中的项目并将其链接到另一个列表中的项目
- vue.js - 使用 vanilla JS 生成 Vue 组件
- python - 替换 DataFrame 中的值的问题
- neo4j - Neo4j - 检查具有给定标签的节点是否存在的最有效方法
- c++ - 该代码中的错误是什么问题说要找到否。的元素少于当前元素?
- javascript - 如何将鼠标悬停在容器上以显示带有 Javascript 的阅读更多按钮?
- javascript - 从 spotify 请求访问代码时收到“格式错误或非法请求”
- java - 一旦用户按 2 次 y 和下一次 n,当输入 n 时如何添加 item1 和 item2 并显示总价
- wpf - 将数据库中的文本数据显示到 WPF RichTextBox 中