练习 - 发布模板规格

已完成

你的团队已经构建了一些符合贵公司新治理模型的安全强化 Bicep 文件。 其中一个强化的 Bicep 文件部署了一个基于 Linux 的 Azure 应用服务应用。 在本练习中,你将使用部署工作流将 Bicep 文件发布为模板规格。

在此过程中,你将:

  • 向工作流添加 Lint 作业。
  • 添加工作流作业以发布模板规格。
  • 手动运行工作流并验证它是否成功完成。
  • 在 Azure 中检查已发布的模板规格。

向工作流添加 Lint 作业

存储库包含工作流的草稿,你可以从该草稿入手。

  1. 在 Visual Studio Code 中,展开存储库根目录中的 .github/workflows 文件夹。

  2. 打开 template-spec-linux-app-service.yml 文件。

    Visual Studio Code 屏幕截图,其中显示了工作流定义文件的位置。

    工作流定义包括两个触发器。 本练习不会修改模板规格的 Bicep 文件,因此 push 触发器永不会触发。 若要试用工作流,可以使用 workflow_dispatch 触发器手动调用它。

  3. 在文件底部,你会看到一条内容为“# To be added”的注释,请添加以下 Lint 作业定义:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    

    存储库中有一个“bicepconfig.json”文件,该文件将 Linter 配置为发出错误而不是警告。 Lint 作业发生的任何失败都将导致工作流失败。

    提示

    YAML 文件对缩进敏感。 无论是键入还是粘贴此代码,都请确保缩进正确。 在此练习的后续部分,你将看到完整的 YAML 工作流定义,使你可验证文件是否匹配。

向工作流添加发布作业

现在,可以添加第二个作业,以将模板规格发布到 Azure。

  1. 将下面的代码添加到 template-spec-linux-app-service.yml 文件末尾:

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/cli@v1
        name: Publish template spec
        with:
          inlineScript: |
            az ts create \
              --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
              --name ${{ env.TEMPLATE_SPEC_NAME }} \
              --version ${{ github.run_number }} \
              --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
              --location ${{ env.AZURE_REGION }} \
              --yes
    

    此作业从存储库中签出代码并使用你创建的 GitHub 机密登录到 Azure。 然后它会运行 az ts create 命令将模板规格发布到 Azure。

    提示

    为了简单起见,工作流将使用工作流的运行编号作为模板规格的版本号。 下一单元将介绍更复杂的版本控制方案。

  2. 保存对该文件所做的更改。

验证并提交工作流定义

  1. 验证 template-spec-linux-app-service.yml 文件是否类似于以下示例:

    name: template-spec-linux-app-service
    concurrency: template-spec-linux-app-service
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'template-specs/linux-app-service/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyReusable
      AZURE_REGION: westus3
      TEMPLATE_SPEC_NAME: linux-app-service
      TEMPLATE_SPEC_FILE_PATH: template-specs/linux-app-service/main.bicep
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/cli@v1
          name: Publish template spec
          with:
            inlineScript: |
              az ts create \
                --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
                --name ${{ env.TEMPLATE_SPEC_NAME }} \
                --version ${{ github.run_number }} \
                --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
                --location ${{ env.AZURE_REGION }} \
                --yes
    

    如果不是,请更新它以匹配此示例,然后保存。

  2. 通过在 Visual Studio Code 终端中运行以下命令来提交更改并将其推送到 Git 存储库:

    git add .
    git commit -m "Add lint and publish jobs to Linux App Service template spec workflow"
    git push
    
  3. 这是你首次推送到此存储库,因此系统可能会提示你登录。

    在 Windows 上,键入 1 以使用 Web 浏览器进行身份验证,然后选择 Enter

    在 macOS 上,选择“授权”。

  4. 将会出现一个浏览器窗口。 你可能需要再次登录到 GitHub。 选择“授权”。

触发工作流

  1. 在浏览器中,选择“操作”选项卡。

    GitHub 的屏幕截图,其中显示了“操作”选项卡。

    失败的工作流运行已列出,但你无需担心它们。 它们运行失败是因为在创建存储库时工作流定义尚未完成。

  2. 选择 template-spec-linux-app-service 工作流,选择“运行工作流”按钮,然后选择“运行工作流”。

    GitHub 的屏幕截图,其中显示了用于运行模板规格的工作流的选择。

    GitHub 启动新的工作流运行。 可能需要刷新浏览器窗口才能看到运行出现。

  3. 选择列表中的最新运行。

    GitHub 的屏幕截图,其中突出显示了模板规格的工作流的最近一次运行。

    等待工作流运行完成。 完成后,模板规格将发布到 Azure。

  4. 请记下工作流的运行编号,该编号可能为 2。

    GitHub 的屏幕截图,其中显示了一次成功的工作流运行并突出显示了运行编号。

查看 Azure 中的模板规格

还可以在 Azure 门户中查看已发布的模板规格。

  1. 在浏览器中转到 Azure 门户

  2. 转到 ToyReusable 资源组,然后选择 linux-app-service 模板规格。

    Azure 门户的屏幕截图,其中显示了资源组并突出显示了模板规格。

  3. 检查模板规格的详细信息。

    Azure 门户的屏幕截图,其中显示了模板规格详细信息。

    请注意,最新版本和版本号与工作流的运行编号相同。 管道使用运行编号作为模板规格的版本号。