我有一个正在部署 Web API 应用程序的 yaml 管道。部署后,我需要立即运行另一个作业/任务,使用新的端点 swagger 文件更新 APIM。
我遇到的问题是,在执行 apim@5
任务时,端点在“某些”时间不可用。这会导致失败。
有什么办法可以强制管道在继续之前等待端点返回 200 OK
?也许超时?
这是管道:
- stage: DeployApp
variables:
jobs:
- deployment: DeployApiApp
strategy:
runOnce:
deploy:
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'MySub'
appType: 'webAppLinux'
WebAppName: $(appName)
packageForLinux: '$(Pipeline.Workspace)/drop/myapp.zip'
RuntimeStack: 'DOTNETCORE|5.0'
- job:
dependsOn:
- DeployApiApp
pool:
vmImage: 'windows-latest'
displayName: Update APIM APIs
steps:
- task: apim@5
inputs:
ConnectedServiceNameARM: 'MyServiceConnection'
ResourceGroupName: 'rg-$(resourceSuffix)'
ApiPortalName: 'apim-$(resourceSuffix)'
OpenAPISpec: 'v3'
Format: 'json'
Authorization: 'None'
SwaggerPicker: 'Url'
swaggerlocation: 'https://$(appName).azurewebsites.net/swagger/v1/swagger.json'
targetapi: 'myApi'
DisplayName: 'MyApi'
pathapi: 'api'
subscriptionRequired: false
TemplateSelector: 'CORS'
答案 0 :(得分:1)
我通常会在部署后立即执行冒烟测试步骤,以确保应用正在运行和预热。
类似于:
- script: curl https://$(appName).azurewebsites.net
displayName: 'smoke test'
如果您希望它花费更多时间并且可能在它准备好之前抛出一些错误,您可以添加重试:
- pwsh: |
$url = "https://$(appName).azurewebsites.net"
write-host "testing '$url'"
$retries = 5
do {
$retries -= 1
curl --show-error --fail $url
if ($lastExitCode -ne 0 -and $retries -ge 0) {
start-sleep -seconds 5
}
} while($retries -ge 0)
displayName: 'smoke test'
答案 1 :(得分:1)
我想出了一个解决方案,通过使用 Delay Task 和 Invoke REST API 来处理这种类型的场景。这些在 agentless Job
上运行我会给你一个可视化的管道编辑器只是为了你的理解,从下面的可视化编辑器图像你可以看到我设置了 10 分钟的延迟之后我调用了一个调用休息 API,它可以帮助调用你的 API并获得您需要的回复