Azure DevOps用AzureSpringCloud@0任务做蓝绿部署后无生产部署问题
这是配置使用逻辑问题,非产品已知缺陷,具体原因和修复方案如下:
根因说明
- 你当前的配置要求流水线自动识别staging部署进行发布和切换,但首次执行流水线时没有初始化生产部署基准,导致
Set Production动作执行时找不到可切换的原生产部署,最终两个部署的active标记都被置为false。 - 应用可正常访问是因为Azure Spring Cloud在无明确生产部署时,会默认将流量路由到所有健康运行的部署实例,所以你可以正常打开页面,但没有固定的流量分发规则。
- 流水线识别green为当前生产的信息来自任务本地缓存的历史切换记录,并非从Azure侧拉取的真实active属性,所以会出现和门户、CLI查询结果不一致的情况。
修复步骤
第一步:恢复生产部署状态
先执行CLI命令手动将其中一个部署设置为活跃生产环境,替换命令中占位符为你自己的资源组名称即可:
az spring-cloud app deployment set-active --name blue --app my-project --service my-spring-cloud --resource-group <你的资源组名称>
执行后再次运行az spring-cloud app deployment list即可看到blue的active属性变为true,门户的警告也会消失。
第二步:调整流水线执行规则
你的现有yaml配置本身没有语法错误,后续运行流水线前只要保证当前有至少一个活跃的生产部署,即可正常完成蓝绿切换:
- 每次运行流水线时,任务会自动将新版本部署到当前非活跃的staging部署槽
Set Production动作会自动将staging槽切换为生产,原生产槽自动转为staging,完成蓝绿切换
可选:固定部署名称的配置方案
如果你想要明确指定blue、green两个固定部署槽,避免自动创建部署的状态异常,可以将配置修改为显式指定部署名称:
# 部署到staging槽(假设green为固定staging槽) - task: AzureSpringCloud@0 inputs: azureSubscription: 'My-Subscription' Action: 'Deploy' AzureSpringCloud: my-spring-cloud AppName: my-project DeploymentName: 'green' Package: $(Pipeline.Workspace)/my-java-app.jar RuntimeVersion: Java_8 # 切换green为生产部署 - task: AzureSpringCloud@0 inputs: azureSubscription: 'My-Subscription' Action: 'Set Production' AzureSpringCloud: my-spring-cloud AppName: my-project DeploymentName: 'green'
注意事项
请先确认你的Azure Spring Cloud实例服务层级为标准层或企业层,基础层不支持多部署槽蓝绿部署,也会出现active标记失效的问题。
内容的提问来源于stack exchange,提问作者Shamshiel
相关产品推荐
相关产品推荐

