练习 - 将预览作业添加到工作流

已完成

你想要向工作流添加一个额外作业,以便可以检查将对 Azure 环境进行的更改。

在此过程中,你将执行以下任务:

  • 更新工作流定义 YAML 文件以添加新的预览作业。
  • 将环境添加到 GitHub 存储库。
  • 将环境配置为需要评审。
  • 更新工作流 YAML 文件以使用部署作业的环境。
  • 查看 What-if 结果并批准工作流运行。

更新工作流定义以添加预览作业

在这里,可以向运行 What-if 操作的工作流添加一个新作业。

  1. 在 Visual Studio Code 中,打开“.github/workflows”文件夹中的“workflow.yml”文件。

  2. 在“验证”和“部署”作业之间,为“预览”作业添加以下定义:

    preview:
      runs-on: ubuntu-latest
      needs: [lint, validate]
      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/arm-deploy@v1
        name: Run what-if
        with:
          failOnStdErr: false
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: deploy/main.bicep
          parameters: >
            environmentType=${{ env.ENVIRONMENT_TYPE }}
          additionalArguments: --what-if
    

    请注意,“预览”作业取决于“Lint 分析”和“验证”作业的成功完成。

  3. 更新“部署”作业,使其依赖于“预览”作业:

    deploy:
      runs-on: ubuntu-latest
      needs: preview
      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/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  4. 保存对该文件所做的更改。

添加环境

  1. 在浏览器中,转到“设置”“环境”。

  2. 选择“新建环境”。

    GitHub 界面的屏幕截图,其中显示了“环境”页,其中突出显示了用于创建环境的按钮。

  3. 输入“Website”作为环境名称。

  4. 选择“配置环境”。

    新环境的 GitHub 页面的屏幕截图,其中突出显示了详细信息和“配置环境”按钮。

在本模块的设置步骤中,你已为工作流创建联合凭据,以便在部署到环境时使用。

将“必需审阅者”保护规则添加到环境

  1. 选中“必需审阅者”框。

  2. 将你自己的 GitHub 用户名添加到审阅者列表中。

    GitHub 界面的屏幕截图,其中显示了网站环境,其中突出显示了所需的审阅者复选框和文本框。

  3. 选择“保存保护规则”。

  4. 选择“环境”以退出配置。

将工作流定义更新为需要环境和审阅者

在此处将“部署”作业配置为针对你之前创建的“Website”环境运行。

  1. 在 Visual Studio Code 中打开“workflow.yml”文件。

  2. environment 参数添加到“部署”作业。 将值设置为 Website,以匹配所创建的环境的名称:

    deploy:
      runs-on: ubuntu-latest
      environment: Website
      needs: preview
      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/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  3. 保存文件。

验证并提交工作流定义

  1. 验证“workflow.yml”文件是否如以下代码所示:

    name: deploy-toy-website-test
    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest
      ENVIRONMENT_TYPE: Test
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file deploy/main.bicep
    
      validate:
        runs-on: ubuntu-latest
        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/arm-deploy@v1
          name: Run preflight validation
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
            deploymentMode: Validate
    
      preview:
        runs-on: ubuntu-latest
        needs: [lint, validate]
        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/arm-deploy@v1
          name: Run what-if
          with:
            failOnStdErr: false
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: deploy/main.bicep
            parameters: >
              environmentType=${{ env.ENVIRONMENT_TYPE }}
            additionalArguments: --what-if
    
      deploy:
        runs-on: ubuntu-latest
        environment: Website
        needs: preview
        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/arm-deploy@v1
          name: Deploy website
          with:
            failOnStdErr: false
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    

    如果你的文件看起来不一样,请更新它,使其与此示例一致,然后保存。

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

    git add .
    git commit -m "Add preview job"
    git push
    

运行工作流并评审 What-if 输出

  1. 在浏览器中,转到你的工作流运行。

  2. 选择工作流的最新运行。

    等待工作流完成“Lint 分析”、“验证”和“预览”作业。 虽然 GitHub 会使用最新状态自动更新页面,但仍建议偶尔刷新页面。

  3. 请注意,工作流会提示你进行评审。 根据设置 GitHub 帐户的方式,你将收到一封电子邮件或 Web 通知,其中包含查看工作流的请求。

    GitHub 界面的屏幕截图,其中显示了工作流运行,其中突出显示了审阅要求。

    在批准继续执行工作流之前,需要评审 What-if 结果,以确保它们符合预期。

  4. 选择“预览”作业。

  5. 选择“运行 What-if”步骤以检查 What-if 命令报告的更改。

  6. 请注意,工作流日志提供类似于以下代码的 What-if 结果:

    Resource and property changes are indicated with these symbols:
      - Delete
      + Create
      ~ Modify
      = Nochange
      * Ignore
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/***/resourceGroups/ToyWebsiteTest
    
      ~ Microsoft.OperationalInsights/workspaces/workspace-abcdefghijklm [2022-10-01]
        - properties.retentionInDays: 30
        - properties.sku:
    
            name: "pergb2018"
    
        - properties.workspaceCapping:
    
            dailyQuotaGb: -1.0
    
      ~ Microsoft.Web/sites/toy-website-abcdefghijklm [2022-03-01]
        + properties.siteConfig.localMySqlEnabled:   false
        + properties.siteConfig.netFrameworkVersion: "v4.6"
    
      = Microsoft.Insights/components/toywebsite [2020-02-02]
      = Microsoft.Storage/storageAccounts/mystorageabcdefghijklm [2022-09-01]
      = Microsoft.Web/serverfarms/toy-website [2022-03-01]
      * microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite
    
    Resource changes: 2 to modify, 3 no change, 1 to ignore.
    

    what-if 操作检测到对日志分析工作区和网站资源的更改。 但是,它检测到的更改是干扰项。 它们并不代表对资源的实际更改。 随着时间的推移,Azure 团队会努力减少干扰。 同时,可以忽略检测到的更改。

    你还可能会在资源类型 microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite 的 What-if 输出中看到一个项。 这是 Application Insights 自动创建的资源。 What-if 命令检测到不会对资源进行任何更改。

批准工作流运行

  1. 选择“摘要”,返回到工作流运行的概述。

    GitHub 界面的屏幕截图,其中显示了“摘要”菜单,其中突出显示了后退箭头。

  2. 选择“评审”面板上的“评审部署”按钮。

  3. 在“评审挂起的部署”弹出框中,选择“Website”环境。 在“留言”框中,输入“What-if 结果已评审”。

  4. 选择“批准并部署”。

    GitHub 界面的屏幕截图,其中显示了工作流审批页,其中突出显示了“批准”按钮。

观察部署是否成功

  1. 在批准工作流运行后,请注意“部署”作业将开始运行。

    请等待作业完成。

  2. 请注意,工作流运行成功完成。