在ADO中部署后,检测Azure插槽交换是否失败?

2o7dmzc5  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(100)

目前,在部署Azure函数时,我们使用ADO管道任务来部署它们:

- task: AzureFunctionApp@1
            displayName: 'Deploy Function'
            inputs:
              azureSubscription: 'our sub'
              appType: 'functionApp'
              appName: 'our app'
              deployToSlotOrASE: true
              slotName: 'staging'
              resourceGroupName: 'our-rg'
              package: '$(System.DefaultWorkingDirectory)/Artifact/build$(Build.BuildId).zip'
              deploymentMethod: 'auto'

我们启用了自动插槽交换,这样当我们部署时,我们的代码就可以转到我们的暂存插槽。此插槽将预热,如果成功,则插槽将交换为活动。
不幸的是,这个ADO任务无法知道插槽交换是否成功。唯一可见的是Azure Portal活动日志,这些日志显示交换是否成功(以及代码是否实际上线)。
有没有一种简单的方法可以让我们从ADO管道中知道交换是否成功?

yzuktlbb

yzuktlbb1#

您可以使用Azure App Service Manage task来交换插槽,而不是启用自动插槽交换。通过这种方式,您可以获得插槽交换状态。

p5cysglq

p5cysglq2#

我发现的唯一可靠的方法是通过查询kudu日志来获取最近的生产插槽部署,以验证部署是否成功到预生产以及我的自动交换是否完成。所有其他涉及活动日志的方法都给出了错误的结果。由于我们正在检查实际的插槽特定文件,因此不必等待日志传播,并且我们知道它们是在部署时编写的,代表插槽上运行的当前代码。
我们使用一个类似于下面的Azure JavaScript脚本来执行此验证:

$localTimeZone = [System.TimeZoneInfo]::Local
az webapp log deployment list --name $appserviceName --resource-group $resourceGroup --subscription $subscription `
        | convertfrom-json `
        | Select-Object `
            @{Name="Active"; Expression={$_.active}}, `
            @{Name="Site"; Expression={$appserviceName}}, `
            @{Name="Time"; Expression={[System.TimeZoneInfo]::ConvertTimeFromUtc($_.start_time, $localTimeZone)}}, `
            @{Name="Status"; Expression={$_.status_text}}, `
            @{Name="Message"; Expression={$_.message}}, `
            @{Name="ProvisioningState"; Expression={$_.ProvisioningState}}

相关问题