若Cucumber UI自动化测试失败,能否通过Azure DevOps回滚QA环境Blob静态UI构建?
可以实现Azure Blob存储中静态UI的自动回滚
针对你遇到的QA环境UI回滚需求,结合Azure DevOps和Blob存储的特性,有几种可靠的实现方式:
方案一:利用Blob存储的版本控制功能
- 先开启QA环境Blob容器的版本控制和软删除:
- 登录Azure门户,找到目标Blob容器,在"数据保护"设置中开启版本保留(比如保留30天)和软删除。
- 在Azure DevOps发布流水线的QA部署阶段,添加步骤记录当前Blob的版本信息:
- 用Azure CLI脚本获取容器内所有Blob的当前版本ID,保存到流水线变量:
az storage blob list --container-name qa-ui-container --account-name your-storage-account --query "[].{name:name, versionId:versionId}" --output json > blob-versions.json
- 用Azure CLI脚本获取容器内所有Blob的当前版本ID,保存到流水线变量:
- 添加条件触发的回滚阶段:
- 在发布流水线中新增"QA UI回滚"阶段,设置触发条件为自动化测试任务失败。
- 在回滚阶段执行Azure CLI脚本,恢复Blob到之前记录的版本:
# 读取版本信息并逐个恢复Blob cat blob-versions.json | jq -r '.[]' | while read -r blob; do name=$(echo $blob | jq -r '.name') versionId=$(echo $blob | jq -r '.versionId') az storage blob restore --container-name qa-ui-container --account-name your-storage-account --name $name --version-id $versionId done
方案二:版本化存档构建产物
- 修改构建流水线,将React构建产物打包为带版本标识的压缩包(比如用Azure DevOps的
Build.BuildId作为版本号):- 用命令打包:
zip -r ui-build-$(Build.BuildId).zip ./build
- 用命令打包:
- 将压缩包上传到Blob存储的专用存档容器(比如
ui-build-archives):- 用Azure文件复制任务,把压缩包上传到存档容器,路径设为
$(Build.BuildId)/ui-build-$(Build.BuildId).zip
- 用Azure文件复制任务,把压缩包上传到存档容器,路径设为
- QA部署阶段,解压对应版本的压缩包到QA静态容器:
- 下载存档中的压缩包,解压后上传到QA容器覆盖现有文件
- 回滚时,指定之前成功的构建ID,重复部署步骤:
- 在回滚阶段,设置构建ID为上一次通过测试的版本(可通过Azure DevOps API查询历史成功构建),执行解压上传操作覆盖当前QA容器文件
方案三:利用Azure DevOps发布的回滚工件
- 在QA发布阶段的部署任务后,添加**"发布工件"**任务,将当前部署的UI构建产物保存为流水线的回滚工件
- 当自动化测试失败时,触发回滚阶段,使用**"Azure文件复制"**任务,将回滚工件重新上传到QA的Blob容器,覆盖现有文件
- 这种方式依赖Azure DevOps的工件存储,适合短期回滚,若需长期保留版本,建议结合方案二的存档方式
注意事项
- 若静态网站配置了CDN,回滚后需添加清除CDN缓存的步骤,确保用户能看到回滚后的内容
- 回滚脚本需配置足够的Azure存储账户权限,可通过Azure DevOps的服务连接实现
内容的提问来源于stack exchange,提问作者Indra Chatterjee
相关产品推荐
相关产品推荐

