练习 - 从 GitHub 工作流部署 Bicep 文件

已完成

GitHub Actions 本质上类似于 Azure Pipelines。 它们提供了自动化软件开发和部署的方法。 在本练习中,你将了解如何使用 GitHub Actions 来部署 Bicep 文件。

先决条件

在 Azure 中创建服务主体

若要将资源部署到 Azure,需要创建 GitHub 可以使用的服务主体。 因此,请在 Azure 门户打开终端或使用 Cloud Shell,然后键入以下命令:

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

注意

不要忘记将订阅 ID 替换为你的订阅 ID。

操作成功后,它应输出包含 tenantIdsubscriptionIdclientId、和 clientSecret 等更多如下属性的 JSON 对象。

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

记下此对象,因为需要将其添加到 GitHub 机密。

创建 GitHub 机密

在 GitHub 存储库中,导航到“设置”>“机密”>“操作”。 创建一个名为 AZURE_CREDENTIALS 的新机密,并粘贴从上一步获取的整个 JSON 对象。

为具有名称(例如 AZURE_RG)的资源组名称创建另一个机密,再创建一个订阅机密。

GitHub 机密创建和管理页的屏幕截图。

创建 GitHub 操作

  1. 首先,导航到存储库并选择“操作”菜单。 然后,设置工作流以在存储库中创建空工作流。 如果需要,可以将文件重命名为其他名称。

    GitHub 新文件创建、编辑和预览的屏幕截图。

  2. 将文件的内容替换为以下代码片段:

    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 Bicep file
                - name: deploy
                  uses: azure/arm-deploy@v1
                  with:
                      subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
                      resourceGroupName: ${{ secrets.AZURE_RG }}
                      template: ./main.bicep
                      parameters: storagePrefix=stg
                      failOnStdErr: false
    

    可以随意将存储帐户前缀替换为自己的前缀。

    注意

    工作流的第一部分定义触发器及其名称。 其余部分定义作业,并使用一些任务签出代码、登录到 Azure 并部署 Bicep 文件。

  3. 选择“开始提交”,并在弹出对话框中输入标题和说明。 然后依次选择“直接提交到主分支”、“提交新文件”。

    GitHub 将一个新文件提交到主分支的屏幕截图。

  4. 导航到“操作”选项卡,并选择应运行的新建操作。

    GitHub 操作运行和部署的屏幕截图。

  5. 监视状态,并在作业完成时间检查 Azure 门户,以查看是否正在创建存储帐户。

    GitHub 操作成功执行作业的屏幕截图。