You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过GitHub Actions将镜像部署至Azure App Service

解决Azure App Service部署时"Publish profile is invalid"错误及指定镜像版本的部署方案

一、排查"Publish profile is invalid"错误

  1. 确认发布配置文件匹配环境
    Linux容器型App Service的发布配置文件和Windows环境不通用,重新从Azure门户下载对应App Service的发布配置文件:进入App Service → 概述 → 获取发布配置文件,确保文件中scmUri包含linux字段。
  2. 修正App名称变量引用
    确保YML中app-name使用App Service的短名称(如my-prod-app,而非my-prod-app.azurewebsites.net),且变量引用正确——不要直接写$APP_SERVICE_NAME,改用${{ env.APP_SERVICE_NAME }}或${{ secrets.APP_SERVICE_NAME }}(根据变量存储位置调整)。
  3. 解除部署中心的静态绑定
    当前App Service部署中心绑定的静态镜像会和GitHub Actions部署冲突,进入Azure门户的App Service → 部署中心,切换到"外部容器"模式或直接断开现有绑定,允许Actions覆盖镜像配置。

二、修正后的GitHub Actions部署配置

以下是支持指定镜像版本的YML配置,用Commit SHA作为唯一标签,确保版本可追溯:

deploy:
    name: Update Azure App Service
    needs: [tests]
    runs-on: ubuntu-latest
    env:
      APP_SERVICE_NAME: "你的App Service短名称"
      ACR_NAME: "你的ACR名称"
      IMAGE_NAME: "你的镜像名称"
    steps:
        - name: Login to Azure ACR
          uses: azure/docker-login@v1
          with:
            login-server: ${{ env.ACR_NAME }}.azurecr.io
            username: ${{ secrets.ACR_USERNAME }}
            password: ${{ secrets.ACR_PASSWORD }}

        - name: Verify target image exists
          run: az acr repository show --name ${{ env.ACR_NAME }} --image ${{ env.IMAGE_NAME }}:${{ github.sha }}

        - name: Deploy to Azure
          uses: azure/webapps-deploy@v2
          with:
            app-name: ${{ env.APP_SERVICE_NAME }}
            images: "${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ github.sha }}"
            publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
            slot-name: Production

三、支持生产环境回滚的配置建议

  1. 使用唯一镜像标签
    避免使用latest标签,改用Commit SHA、语义化版本号(如v1.2.3)作为镜像标签,确保每次部署的版本唯一可追溯。
  2. 配置ACR镜像保留策略
    在Azure门户的ACR → 存储库 → 保留策略中,设置保留一定数量的历史镜像(如30个),避免旧版本被自动清理,方便回滚。
  3. 回滚操作方式
    • 手动触发GitHub Actions部署时,指定要回滚的镜像标签(替换${{ github.sha }}为目标版本标签);
    • 直接在Azure门户的App Service → 容器设置中,修改镜像标签为旧版本并保存。

四、额外权限检查

确保App Service的系统分配身份拥有ACR的"ACR拉取"角色:进入ACR → 访问控制(IAM) → 添加角色分配,选择"ACR拉取"角色,将App Service的系统身份添加为成员,避免镜像拉取失败导致的间接错误。

内容的提问来源于stack exchange,提问作者RPM1984

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:45:34