练习 - 设置环境

已完成

重要

需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户

在设置玩具公司的拉取请求工作流之前,你需要配置环境。

在本单元中,确保已设置好 Azure 和 GitHub 环境,以便完成本模块的剩余操作。

为了达成这些目标,你需要:

  • 设置此模块的 GitHub 存储库。
  • 将存储库克隆到你的计算机。
  • 在 Microsoft Entra ID 中创建工作负载标识。
  • 在 GitHub 中创建机密。

获取 GitHub 存储库

在本部分中,你通过在模板存储库的基础上创建一个新存储库,设置了 GitHub 存储库以完成本模块的其余部分。 模板存储库包含开始学习此模块所需的文件。

本学习路径中的模块是循序渐进的。 出于学习目的,每个模块都有一个关联的 GitHub 模板存储库。

提示

即使你已完成学习路径中的上一个模块,也请按照这些说明创建新存储库,并为其提供一个新名称。

从模板存储库开始

运行用于设置 GitHub 存储库的模板。

在 GitHub 站点上,通过执行以下操作从模板创建存储库:

  1. 选择“使用此模板”>“创建新存储库”。

    GitHub 界面的屏幕截图,其中显示了模板存储库,突出显示了“使用此模板”按钮。

  2. 记下 GitHub 用户名或组织的名称。 在该示例中,GitHub 用户名为 mygithubuser。 很快会用到此名称。

  3. 输入新项目的名称,如“toy-website-auto-review”。

  4. 选择“公共”选项。

    创建自己的存储库时,可以将其设为专用。 在本模块中,你将使用 GitHub 的一些功能,这些功能仅适用于公用存储库和 GitHub Enterprise 帐户。

  5. 选择“创建存储库”。

    GitHub 界面的屏幕截图,其中显示了存储库创建页面。

克隆存储库

现在,你在自己的帐户中有一个模板存储库的副本。 在本地克隆此存储库,以便可在其中开始操作。

  1. 选择“代码”,然后选择复制图标。

    GitHub 界面的屏幕截图,其中显示了新的存储库,并突出显示了存储库 URL 的复制按钮。

  2. 打开 Visual Studio Code。

  3. 选择“终端”>“新建终端”,打开 Visual Studio Code 终端窗口。 此窗口通常会在屏幕底部打开。

  4. 在终端中,转到要在本地计算机上克隆 GitHub 存储库的目录。 例如,若要将存储库克隆到“toy-website-auto-review”文件夹,请运行以下命令:

    cd toy-website-auto-review
    
  5. 键入 git clone 并粘贴之前复制的 URL,如下所示:

    git clone https://github.com/mygithubuser/toy-website-auto-review.git
    
  6. 通过在 Visual Studio Code 终端运行以下命令,在存储库文件夹中重新打开 Visual Studio Code:

    code -r toy-website-auto-review
    

登录 Azure

将存储库本地克隆到计算机之后,接下来即可登录到 Azure 环境。 使用 Azure 帐户创建工作负载标识以供 GitHub Actions 工作流使用。

  1. 在 Visual Studio Code 终端中,运行以下命令以登录到 Azure:

    az login
    
  2. 在打开的浏览器中,登录到 Azure 帐户。

  1. 在 Visual Studio Code 终端中,运行以下命令登录到 Azure:

    Connect-AzAccount
    
  2. 在打开的浏览器中,登录到 Azure 帐户。

创建工作负载标识

在稍后的 Microsoft Learn 模块中,拉取请求工作流将在订阅中创建资源组和资源。 若要部署资源,你需要创建工作负载标识,并授予它在订阅上的“参与者”角色。

警告

在此处创建的工作负载标识具有对 Azure 订阅的高级别访问权限。 若要避免任何意外问题,请使用非生产订阅。 请勿在包含任何生产工作负载的环境中执行这些步骤。

在你自己的拉取请求验证工作流中,建议你使用专用 Azure 订阅。

要创建工作负载标识,Azure CLI 命令使用 jq 从 JSON 输出分析数据。 如果还没有安装 jq,可以使用 Azure Cloud Shell 中的 Bash 创建工作负载标识、资源组和角色分配,并准备 GitHub 机密。

  1. 运行以下代码,为 GitHub 用户名和存储库名称定义变量。 确保将 mygithubuser 替换为你的 GitHub 用户名,在本练习前面指出了这一点。 另外,请确保指定正确的 GitHub 存储库名称。

    githubOrganizationName='mygithubuser'
    githubRepositoryName='toy-website-auto-review'
    
  2. 为部署工作流创建工作负载标识。

    applicationRegistrationDetails=$(az ad app create --display-name 'toy-website-auto-review')
    applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id')
    applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $applicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-auto-review\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:pull_request\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
  1. 运行以下代码,为 GitHub 用户名和存储库名称定义变量。 确保将 mygithubuser 替换为你的 GitHub 用户名,在本练习前面指出了这一点。 另外,请确保指定正确的 GitHub 存储库名称。

    $githubOrganizationName = 'mygithubuser'
    $githubRepositoryName = 'toy-website-auto-review'
    
  2. 为部署工作流创建工作负载标识。

    $applicationRegistration = New-AzADApplication -DisplayName 'toy-website-auto-review'
    New-AzADAppFederatedCredential `
       -Name 'toy-website-auto-review' `
       -ApplicationObjectId $applicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):pull_request"
    

授予工作负载标识来访问订阅

接下来,为网站创建一个资源组。 此过程还会向工作负载标识授予资源组的“参与者”角色,从而使工作流可部署到该资源组。

  1. 在 Visual Studio Code 终端中,运行以下 Azure CLI 命令:

    az ad sp create --id $applicationRegistrationObjectId
    az role assignment create \
       --assignee $applicationRegistrationAppId \
       --role Contributor
    
  1. 在 Visual Studio Code 终端中,运行以下 Azure PowerShell 命令:

    New-AzADServicePrincipal -AppId $applicationRegistration.AppId
    New-AzRoleAssignment `
       -ApplicationId $applicationRegistration.AppId `
       -RoleDefinitionName Contributor
    

准备 GitHub 机密

运行以下代码以显示创建为 GitHub 机密所需的值:

echo "AZURE_CLIENT_ID: $applicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID: $($applicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"

请记下 AZURE_CLIENT_ID 的应用程序 ID 值。 完成本模块后,清理资源时可以使用该值。

创建 GitHub 机密

你已创建工作负载标识,并向其授予部署到订阅的权限。 接下来,在 GitHub Actions 中创建机密。

  1. 在浏览器中,导航到 GitHub 存储库。

  2. 选择“设置”>“机密和变量”>“操作”。

  3. 选择“新建存储库机密”。

    GitHub 界面的屏幕截图,其中显示了“机密”页,并突出显示了“创建存储库机密”按钮。

  4. 将机密命名为 AZURE_CLIENT_ID。

  5. 在“值”字段中,粘贴终端输出第一行中的 GUID。 不要在值中包含 AZURE_CLIENT_ID、冒号或任何空格。

  6. 选择“添加机密”。

    GitHub 界面的屏幕截图,其中显示了“新建机密”页,填写了名称和值,并突出显示了“添加机密”按钮。

  7. 重复此过程,为 AZURE_TENANT_ID 和 AZURE_SUBSCRIPTION_ID 创建机密,从终端输出中的相应字段复制值。

  8. 验证机密列表现在是否显示所有三个机密。

    GitHub 界面的屏幕截图,其中显示了机密列表。