使用 GitHub Actions 部署 ARM 模板

Github 操作是 GitHub 中的一个功能套件,可以在存储代码的同一位置自动执行软件开发工作流,并针对拉取请求和问题进行协作。

使用“部署 Azure 资源管理器模板”操作将 Azure 资源管理器模板(ARM 模板)自动部署到 Azure。

先决条件

  • 具有活动订阅的 Azure 帐户。 创建试用版订阅

  • 一个 GitHub 帐户。 如果没有该帐户,请注册免费版

    • GitHub 存储库,用于存储资源管理器模板和工作流文件。 若要创建一个存储库,请参阅创建新存储库

工作流文件概述

工作流通过存储库的 /.github/workflows/ 路径中的 YAML (.yml) 文件定义。 此定义包含组成工作流的各种步骤和参数。

此文件包含两个部分:

部分 任务
身份验证 1. 生成部署凭据。
部署 1.部署资源管理器模板。

生成部署凭据

可以使用 Azure CLI 中的 az ad sp create-for-rbac 命令创建服务主体

如果没有资源组,请创建一个。

    az group create -n {MyResourceGroup} -l {location}

请将 myApp 占位符替换为应用程序的名称。

   az ad sp create-for-rbac --name {myApp} --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/{MyResourceGroup} --sdk-auth

在上面的示例中,请将占位符替换为你的订阅 ID 和资源组名称。 输出是一个 JSON 对象,包含的角色分配凭据可提供对应用服务应用的访问权限,如下所示。 复制此 JSON 对象供以后使用。 你只需要具有 clientIdclientSecretsubscriptionIdtenantId 值的部分。

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

重要

始终应授予最小访问权限。 上一示例中的范围限制为资源组。

配置 GitHub 机密

需要为 Azure 凭据、资源组和订阅创建机密。

  1. GitHub 中,浏览你的存储库。

  2. 选择“设置”>“机密”>“新建机密”。

  3. 将 Azure CLI 命令的整个 JSON 输出粘贴到机密的值字段中。 为机密指定名称 AZURE_CREDENTIALS

  4. 创建另一个名为 AZURE_RG 的机密。 将资源组的名称添加到该机密的“值”字段(例如:myResourceGroup)。

  5. 再创建一个名为 AZURE_SUBSCRIPTION 的机密。 将订阅 ID 添加到该机密的“值”字段(例如:90fd3f9d-4c61-432d-99ba-1273f236afa2)。

添加资源管理器模板

将资源管理器模板添加到 GitHub 存储库。 此模板可用于创建存储帐户。

https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json

你可以将该文件放到存储库中的任何位置。 下一部分的工作流示例假定模板文件名为“azuredeploy.json”,它存储在存储库的根目录下。

创建工作流

工作流文件必须存储在存储库根目录的“.github/workflow”文件夹中。 工作流文件扩展名可以是“.yml”或“.yaml”。

  1. 在 GitHub 存储库的顶部菜单中,选择“操作”。
  2. 选择“新建工作流”。
  3. 选择“自己设置工作流”。
  4. 如果希望使用“main.yml”以外的其他名称,请重命名工作流文件。 例如:“deployStorageAccount.yml”。
  5. 将 yml 文件的内容替换为以下内容:
  on: [push]
  name: Azure ARM
  jobs:
    build-and-deploy:
      runs-on: ubuntu-latest
      steps:

        # Checkout code
      - uses: actions/checkout@main

        # Log into Azure
      - uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

        # Deploy ARM template
      - name: Run ARM deploy
        uses: azure/arm-deploy@v1
        with:
          subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
          resourceGroupName: ${{ secrets.AZURE_RG }}
          template: ./azuredeploy.json
          parameters: storageAccountType=Standard_LRS

        # output containerName variable from template
      - run: echo ${{ steps.deploy.outputs.containerName }}

注意

可以改为在 ARM 部署操作中指定一个 JSON 格式的参数文件(例如:.azuredeploy.parameters.json)。

工作流文件的第一部分包含:

  • name:工作流的名称。
  • 事件:触发工作流的 GitHub 事件的名称。 当主分支上有推送事件时,会触发工作流,修改所指定的两个文件中的至少一个。 这两个文件分别是工作流文件和模板文件。
  1. 选择“开始提交”。
  2. 选择“直接提交到主分支”。
  3. 选择“提交新文件”(或“提交更改”)。

由于工作流配置为由要更新的工作流文件或模板文件触发,因此在提交更改后,工作流将立即启动。

检查工作流状态

  1. 选择“操作”选项卡。此时会看到列出的“创建 deployStorageAccount.yml”工作流。 运行此工作流需要 1-2 分钟。
  2. 选择要打开的工作流。
  3. 从菜单中选择“运行 ARM 部署”以验证此部署。

清理资源

不再需要资源组和存储库时,请通过删除资源组和 GitHub 存储库来清理部署的资源。

后续步骤