练习 - 设置环境

已完成

重要

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

在开始处理玩具公司的网站工作流之前,需要配置环境。 在本部分中,确保已设置好 Azure 和 GitHub 环境,以完成本模块的剩余操作。

为了满足这些目标,你将执行以下任务:

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

获取 GitHub 存储库

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

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

提示

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

从模板存储库开始

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

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

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

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

  2. 从“所有者”下拉列表中选择 GitHub 用户名。

  3. 输入新项目的存储库名称,如“toy-website-test”。

  4. 选择“公共”选项。

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

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

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

重要

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

克隆存储库

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

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

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

  2. 打开 Visual Studio Code。

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

  4. 在终端中,导航到要在本地计算机上克隆 GitHub 存储库的目录。

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

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

    code -r toy-website-test
    

登录 Azure

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

  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 PowerShell

  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
    
  2. 在打开的浏览器中,登录到 Azure 帐户。

创建工作负载标识

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

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

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

    githubOrganizationName='<myGithubUser>'
    githubRepositoryName='toy-website-test'
    
  2. 为部署工作流创建工作负载标识。 你将创建两个联合凭据,为本模块后面的练习做准备。

    applicationRegistrationDetails=$(az ad app create --display-name 'toy-website-test')
    applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id')
    applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $applicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-test\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:environment:Website\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
    az ad app federated-credential create \
       --id $applicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-test-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-website-test'
    
  2. 为部署工作流创建工作负载标识。 你将创建两个联合凭据,为本模块后面的练习做准备。

    $applicationRegistration = New-AzADApplication -DisplayName 'toy-website-test'
    New-AzADAppFederatedCredential `
       -Name 'toy-website-test' `
       -ApplicationObjectId $applicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Website"
    
    New-AzADAppFederatedCredential `
       -Name 'toy-website-test-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 ToyWebsiteTest --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 ToyWebsiteTest -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)"

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