练习 - 设置环境

已完成

重要

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

在开始发布玩具公司的可重用 Bicep 代码之前,需要配置环境。 在本部分中,确保已设置好 Azure 和 GitHub 环境,以完成本模块的剩余操作。

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

  • 设置此模块的 GitHub 存储库。
  • 将存储库克隆到你的计算机。
  • 在 Azure 中创建资源组。
  • 在 GitHub 中创建机密。

获取 GitHub 存储库

此处你将根据模板存储库创建一个新的 GitHub 存储库。 模板存储库包含开始学习本模块所需的文件。

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

提示

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

从模板存储库开始

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

在 GitHub 站点上,按照以下步骤从模板创建存储库:

  1. 登录 GitHub。

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

    GitHub 界面的屏幕截图,其中显示了模板存储库。突出显示了可以通过哪个按钮使用该模板。

  3. 对于“所有者”,请选择你的 GitHub 帐户。

  4. 输入新项目的存储库名称,如“toy-reusable”

  5. 选择“公共”选项。

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

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

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

重要

本模块的最后一个练习包含重要的清理步骤。 即使未完成此模块,也务必要按照清理步骤操作。

克隆存储库

现在你在自己的帐户中拥有了模板存储库的副本,你将在本地克隆此存储库,以便开始在其中工作。

  1. 选择“代码”,然后选择“将 URL 复制到剪贴板”图标

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

  2. 打开 Visual Studio Code。

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

  4. 在终端中,转到本地计算机上要在其中克隆 GitHub 存储库的目录。 例如,若要克隆 repositories 文件夹中的存储库,请运行以下命令

    cd repositories
    
  5. 键入 git clone 并粘贴之前复制的 URL,如下所示:

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

    code --reuse-window toy-reusable
    

登录 Azure

若要使用 Azure 中的资源组,请从 Visual Studio Code 终端登录到 Azure 帐户。 确保已安装 Azure CLI 工具和 Visual Studio Code 的 Azure 帐户扩展

  1. 在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。

    默认 shell 通常是 pwsh,如终端窗口右侧所示。

    Visual Studio Code 终端窗口的屏幕截图,其中 pwsh 显示为 shell 选项。

  2. 选择“启动配置文件”下拉列表,然后选择“Azure Cloud Shell (Bash)”。

    Visual Studio Code 终端窗口的屏幕截图。显示终端 shell 下拉列表和 Azure Cloud Shell (Bash) 菜单项。

    此时会打开新的 shell。

使用 Azure CLI 登录到 Azure

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

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

若要使用 Azure 中的资源组,请从 Visual Studio Code 终端登录到 Azure 帐户。 确保已安装 Azure PowerShellVisual Studio Code 的 Azure 帐户扩展

  1. 在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。

    默认 shell 通常是 pwsh,如终端窗口右侧所示。

    Visual Studio Code 终端窗口的屏幕截图,其中 pwsh 显示为 shell 选项。

  2. 选择“启动配置文件”下拉列表,然后选择“Azure Cloud Shell (PowerShell)”。

    Visual Studio Code 终端窗口的屏幕截图。显示终端 shell 下拉列表和 Azure Cloud Shell (PowerShell) 菜单项。

    此时会打开新的 shell。

使用 Azure PowerShell 登录到 Azure

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

    Connect-AzAccount -UseDeviceAuthentication
    
  2. 按照命令的说明登录到你的 Azure 帐户。

创建工作负载标识

接下来,在 Microsoft Entra ID 中为部署工作流创建工作负载标识。

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

  1. 运行以下代码,为 GitHub 用户名和存储库名称定义变量。 请务必将 mygithubuser 替换为之前在本练习中记下的 GitHub 用户名。 另外,请务必指定正确的 GitHub 存储库名称。

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

    applicationRegistrationDetails=$(az ad app create --display-name 'toy-reusable')
    applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id')
    applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $applicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-reusable-branch\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
  1. 运行以下代码,为 GitHub 用户名和存储库名称定义变量。 请务必将 mygithubuser 替换为之前在本练习中记下的 GitHub 用户名。 另外,请务必指定正确的 GitHub 存储库名称。

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

    $applicationRegistration = New-AzADApplication -DisplayName 'toy-reusable'
    New-AzADAppFederatedCredential `
       -Name 'toy-reusable-branch' `
       -ApplicationObjectId $applicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
    

在 Azure 中创建资源组并授予工作负载标识访问权限

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

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

resourceGroupResourceId=$(az group create --name ToyReusable --location westus3 --query id --output tsv)

az ad sp create --id $applicationRegistrationObjectId
az role assignment create \
  --assignee $applicationRegistrationAppId \
  --role Contributor \
  --scope $resourceGroupResourceId

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

$resourceGroup = New-AzResourceGroup -Name ToyReusable -Location westus3

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

准备 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 界面的屏幕截图,其中显示了机密列表。