如何通过Github Action将多容器应用部署到Azure App Service?
多容器应用自动部署到Azure App Service实现方案
前置准备
- 先在本地生成Azure服务主体,用于GitHub Actions访问Azure资源,执行以下Azure CLI命令:
az ad sp create-for-rbac --name "github-actions-deploy-sp" --role contributor --scopes /subscriptions/替换为你的订阅ID/resourceGroups/替换为你的资源组名称 --sdk-auth
命令执行后会输出一段JSON格式的凭证,复制备用。
2. 打开GitHub对应仓库的「Settings」→「Secrets and variables」→「Actions」,添加以下密钥:
AZURE_CREDENTIALS:上一步生成的JSON凭证内容AZURE_APP_SERVICE_NAME:你的Azure App Service实例名称AZURE_RESOURCE_GROUP:App Service所在的资源组名称
- 提前为App Service配置Azure容器注册表(ACR)的拉取权限,确保App Service可以正常拉取ACR中的私有镜像。
编写GitHub Actions工作流
在仓库中创建.github/workflows/deploy-master.yml文件,内容如下:
name: 自动部署多容器应用到Azure App Service # 触发条件:PR合并到master分支时触发 on: pull_request: branches: [ master ] types: [ closed ] jobs: deploy: if: github.event.pull_request.merged == true runs-on: ubuntu-latest steps: # 检出仓库代码,获取docker-compose.yml文件 - name: 检出代码 uses: actions/checkout@v4 # 登录Azure - name: 登录Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # 可选步骤:如果你每次构建会生成新的镜像标签,可在此处替换docker-compose.yml中的镜像标签 # 例如你构建的django镜像新标签为${{ steps.build.outputs.new_tag }},执行以下命令替换 # - name: 更新镜像标签 # run: sed -i "s/mycr.azurecr.io\/django:dev-latest/mycr.azurecr.io\/django:${{ steps.build.outputs.new_tag }}/g" docker-compose.yml # 部署多容器配置到App Service - name: 部署多容器应用 run: | az webapp config container set \ --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \ --name ${{ secrets.AZURE_APP_SERVICE_NAME }} \ --multicontainer-config-type compose \ --multicontainer-config-file docker-compose.yml # 可选步骤:执行健康检查验证部署结果 - name: 验证部署状态 run: | az webapp show \ --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \ --name ${{ secrets.AZURE_APP_SERVICE_NAME }} \ --query state
注意事项
- 你当前使用的docker-compose 3.x版本符合Azure App Service的多容器配置要求,且所有服务都使用
image指令而非build指令,无需额外调整即可直接部署。 - 如果你需要持久化存储卷的数据,需要提前在App Service的「配置」→「路径映射」中添加持久化存储挂载,否则compose中定义的volumes为容器临时存储,实例重启后数据会丢失。
- 如果部署后服务启动失败,可在Azure门户中查看App Service的容器日志排查问题。
内容的提问来源于stack exchange,提问作者Yury Kirienko
相关产品推荐
相关产品推荐

