我已在 Azure DevOps 中设置了一个部署管道,它将 .NET 5 Web API 部署到 Azure Linux Web 应用部署槽。部署完成后,它将部署槽与生产槽交换。
交换按其应有的方式工作,但速度相当慢 - 交换大约需要 5 分钟。看起来预热很快,但占用时间的却是交换。
我的管道 yaml 任务如下所示:
- task: AzureWebApp@1
displayName: "Deploy My webapp"
inputs:
azureSubscription: <azureSubscriptionName>
appType: 'webAppLinux'
deployToSlotOrASE: true
appName: 'my-web-app'
slotName: 'my-web-app-slot'
package: '$(PIPELINE.WORKSPACE)/MyWebApp/MyWebApp.zip'
- task: AzureAppServiceManage@0
inputs:
azureSubscription: <AzureSubscriptionName>
Action: 'Swap Slots'
WebAppName: 'my-web-app'
ResourceGroupName: 'MyResourceGroup'
SourceSlot: 'my-web-app-slot'
在执行Swap Slots
任务时查看管道的日志,执行了以下“任务”:
热身时段
交换应用服务“my-web-app”插槽 -“my-web-app-slot”和“生产”
热身时段
几乎是即时的。它执行三次 GET
请求,其中第三次请求返回应用服务状态代码:“302”。状态消息:“找到”
表示插槽确实已启动/已预热。
交换应用程序服务“my-web-app”插槽 -“my-web-app-slot”和“生产”
是所有时间都被使用的地方。我首先向 URL 发送 POST
请求:https://management.azure.com/subscriptions/mysubscription/resouceGroups/myresourcegroup/providers/Microsoft.Web/sites/my-web -app/slots/my-web-app-slot/slotsswap?api-version=2016-08-01
在POST
之后,它开始对URL执行GET
请求:https://management.azure.com/subscriptions/mysubscription/resouceGroups/myresourcegroup/providers/Microsoft.Web/sites/my-web-app/slots/my-web-app-slot/operationresults/some-guid?api-version=2016-08-01 ==> undefined
返回状态代码202
从上述 GET 请求中获取 202
后 4 - 5 分钟,最终收到 200
http 响应,交换完成。
问题是:在交换期间,GET 请求不断返回 202 http 状态代码,到底发生了什么?还有:有什么方法可以加快这个过程吗?
提前非常感谢。
最佳答案
谢谢@dixitarora-msft ,您需要根据状态代码进行交换,方法是在应用设置中添加 WEBSITE_SWAP_WARMUP_PING_PATH
和 WEBSITE_SWAP_WARMUP_PING_STATUSES
在交换操作期间,暂存槽中的站点通过向以下位置发出 HTTP
请求来预热:它的根目录。引用这里How to warm up Azure Web App during deployment slots swap .
默认情况下,一旦网站响应任何状态代码
,交换就会继续。如果应用程序无法预热
,交换无法继续,那么您可以使用以下应用程序设置进行配置:
WEBSITE_SWAP_WARMUP_PING_PATH:发出预热请求的路径。将其设置为以斜线开头的 URL 路径作为值。例如,“/warmup.php”。默认值为/。
WEBSITE_SWAP_WARMUP_PING_STATUSES:预热操作的预期 HTTP 响应代码。将其设置为以逗号分隔的 HTTP 状态代码列表。例如:“200,202”。如果返回的状态码不在列表中,则交换操作将无法完成。默认情况下,所有响应代码均有效。
引用here
关于azure - Azure Linux Web 应用程序上交换插槽速度缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69802490/