如何确保在使用 DevOps YAML 管道进入下一阶段之前部署应用程序?

时间:2021-06-22 10:50:02

标签: azure azure-devops yaml azure-api-management

我有一个正在部署 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'

2 个答案:

答案 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 TaskInvoke REST API 来处理这种类型的场景。这些在 agentless Job

上运行

我会给你一个可视化的管道编辑器只是为了你的理解,从下面的可视化编辑器图像你可以看到我设置了 10 分钟的延迟之后我调用了一个调用休息 API,它可以帮助调用你的 API并获得您需要的回复

enter image description here

相关问题