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

通过GitHub Action与ARM模板创建并销毁Azure资源组

实现GitHub Workflow中Azure资源组的创建、资源部署与销毁流程

以下是完整的GitHub Workflow实现方案,包含资源组创建、资源部署以及最终的资源组销毁全流程:

完整Workflow脚本

name: Azure RG Deploy & Cleanup

on:
  workflow_dispatch: # 支持手动触发,可按需改为push/pull_request等触发条件
    inputs:
      rgName:
        description: '资源组名称'
        required: true
        type: string
      rgLocation:
        description: '资源组区域'
        required: true
        type: string
        default: 'eastus'

env:
  AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} # 建议存储到GitHub Secrets中

jobs:
  deploy-and-cleanup:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 登录Azure
        uses: azure/login@v2
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }} # 提前在GitHub Secrets配置Azure服务主体凭据

      - name: 通过ARM模板创建资源组(订阅级部署)
        uses: azure/arm-deploy@v1
        with:
          scope: subscription
          subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }}
          location: ${{ inputs.rgLocation }} # 订阅级部署必须指定location参数
          template: ./rg-create.json # 替换为你提供的资源组ARM模板路径
          parameters: rgName=${{ inputs.rgName }} rgLocation=${{ inputs.rgLocation }}

      - name: 部署Function App资源到目标资源组
        uses: azure/arm-deploy@v1
        with:
          scope: resourcegroup
          subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }}
          resourceGroupName: ${{ inputs.rgName }}
          parameters: ./parameters.json
          template: ./azure-deploy-function-api.json

      - name: 销毁资源组及所有下属资源
        if: always() # 无论前面步骤成功/失败,都执行清理
        run: |
          az group delete --name ${{ inputs.rgName }} --yes --no-wait

关键步骤说明

  • Azure身份验证:使用azure/login action完成登录,需提前在GitHub仓库的Secrets中配置AZURE_CREDENTIALS,该服务主体需要拥有订阅级的资源组创建、删除权限。
  • 资源组创建:由于是订阅级部署,需将scope设为subscription,同时指定部署区域,通过参数传递资源组名称和位置到你提供的ARM模板。
  • 资源部署:沿用你原有的资源组内部署步骤,确保资源组名称与创建步骤一致。
  • 强制清理资源:使用Azure CLI的az group delete命令,--yes自动确认删除操作,--no-wait开启异步删除加快Workflow结束速度;if: always()确保无论部署成功或失败,都会销毁资源组,避免产生无用资源成本。

补充建议

  • 触发方式:示例采用手动触发(workflow_dispatch),若需自动化触发,可改为push或pull_request,此时资源组名称可结合分支名、Commit Hash动态生成(如rg-${{ github.head_ref }}-${{ github.sha }})。
  • 敏感信息管理:建议将Azure订阅ID、服务主体凭据等敏感信息存储到GitHub Secrets中,避免明文暴露。
  • 权限控制:可给Azure服务主体配置最小化权限,如仅授予Microsoft.Resources/resourceGroups/write和Microsoft.Resources/resourceGroups/delete权限,提升安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:03:10