如何在Azure DevOps脚本中部署Nx单仓下的静态Web应用?
在Azure DevOps流水线中动态部署Nx单仓库的多个Azure静态Web应用
因为你的应用列表仅在运行时可用,无法使用编译期的循环任务,所以可以通过Azure CLI内置的静态Web应用部署命令或swa CLI在脚本内完成动态部署,两种方案都能在流水线环境中正常运行:
方案一:使用Azure CLI原生命令(无需额外安装工具)
Azure CLI的az staticwebapp deploy命令可直接完成部署,适配你已有的脚本逻辑,只需在获取部署令牌后添加部署步骤:
修改后的完整脚本:
- task: AzureCLI@2 displayName: '动态部署Nx应用到静态Web应用' inputs: azureSubscription: ${{ parameters.ArmConnection }} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | # Ubuntu代理默认自带jq,若缺失可添加apt install jq -y for app in $apps; do configPath="apps/$app/deployment-configs.json" if [ -f "$configPath" ]; then appName=$(jq -r '.appName' "$configPath") # 获取部署令牌并去除返回的双引号 deploymentToken=$(az staticwebapp secrets list --name "$appName" --query "properties.apiKey" | sed 's/"//g') # 执行部署,指定应用构建产物路径 az staticwebapp deploy \ --name "$appName" \ --api-key "$deploymentToken" \ --app-location "dist/apps/$app" fi done
关键说明:
--app-location:指定Nx构建后的产物目录,对应你的dist/apps/$app路径sed 's/"//g':去除Azure CLI返回令牌时附带的双引号,避免部署时令牌无效
方案二:使用swa CLI(更灵活的部署选项)
swa CLI并非仅适用于本地环境,可在流水线中临时安装后使用,适合需要更复杂部署配置的场景:
修改后的完整脚本:
- task: AzureCLI@2 displayName: '用swa CLI动态部署Nx应用' inputs: azureSubscription: ${{ parameters.ArmConnection }} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | # 全局安装swa CLI npm install -g @azure/static-web-apps-cli # 确保jq已安装 for app in $apps; do configPath="apps/$app/deployment-configs.json" if [ -f "$configPath" ]; then appName=$(jq -r '.appName' "$configPath") deploymentToken=$(az staticwebapp secrets list --name "$appName" --query "properties.apiKey" | sed 's/"//g') # 使用swa CLI部署 swa deploy "dist/apps/$app" \ --app-name "$appName" \ --api-key "$deploymentToken" fi done
关键说明:
- 若流水线代理未预装Node.js,需先添加
NodeTool@0任务安装合适的Node版本 - swa CLI支持更多参数(如
--env指定环境、--config指定自定义配置文件),可根据需求扩展
内容的提问来源于stack exchange,提问作者Andrea Costanzo
相关产品推荐
相关产品推荐

