【问题标题】:How to ensure app is deployed before moving to next stage using DevOps YAML pipeline?如何确保在使用 DevOps YAML 管道进入下一阶段之前部署应用程序?
【发布时间】:2021-09-05 23:13:48
【问题描述】:

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

【问题讨论】:

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


    【解决方案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'
    

    【讨论】:

      【解决方案2】:

      我想出一个解决方案,使用Delay TaskInvoke REST API 处理这种情况。这些运行在agentless Job

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-29
        • 2020-05-24
        • 1970-01-01
        • 2020-09-30
        • 2020-11-23
        • 1970-01-01
        相关资源
        最近更新 更多