练习 - 设置环境
重要
需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户。
在开始发布玩具公司的可重用 Bicep 代码之前,需要配置环境。 在本部分中,确保已设置好 Azure 和 GitHub 环境,以完成本模块的剩余操作。
为了达成这些目标,你需要:
- 设置此模块的 GitHub 存储库。
- 将存储库克隆到你的计算机。
- 在 Azure 中创建资源组。
- 在 GitHub 中创建机密。
获取 GitHub 存储库
此处你将根据模板存储库创建一个新的 GitHub 存储库。 模板存储库包含开始学习本模块所需的文件。
本学习路径中的模块是循序渐进的。 出于学习目的,每个模块都有一个关联的 GitHub 模板存储库。
提示
即使你已完成学习路径中的上一个模块,也请按照这些说明创建新存储库,并确保为其提供一个新名称。
从模板存储库开始
运行用于设置 GitHub 存储库的模板。
在 GitHub 站点上,按照以下步骤从模板创建存储库:
登录 GitHub。
选择“使用此模板”>“创建新存储库”。
对于“所有者”,请选择你的 GitHub 帐户。
输入新项目的存储库名称,如“toy-reusable”。
选择“公共”选项。
创建自己的存储库时,可以将其设为专用。 在本模块中,你将使用 GitHub 的一些功能,这些功能只能结合公共存储库和 GitHub Enterprise 帐户使用。
选择“创建存储库”。
重要
本模块的最后一个练习包含重要的清理步骤。 即使未完成此模块,也务必要按照清理步骤操作。
克隆存储库
现在你在自己的帐户中拥有了模板存储库的副本,你将在本地克隆此存储库,以便开始在其中工作。
选择“代码”,然后选择“将 URL 复制到剪贴板”图标。
打开 Visual Studio Code。
选择“终端”>“新建终端”,打开 Visual Studio Code 终端窗口。 此窗口通常会在屏幕底部打开。
在终端中,转到本地计算机上要在其中克隆 GitHub 存储库的目录。 例如,若要克隆 repositories 文件夹中的存储库,请运行以下命令:
cd repositories
键入
git clone
并粘贴之前复制的 URL,如下所示:git clone https://github.com/mygithubuser/toy-reusable.git
通过在 Visual Studio Code 终端运行以下命令,在存储库文件夹中重新打开 Visual Studio Code:
code --reuse-window toy-reusable
登录 Azure
若要使用 Azure 中的资源组,请从 Visual Studio Code 终端登录到 Azure 帐户。 确保已安装 Azure CLI 工具和 Visual Studio Code 的 Azure 帐户扩展。
在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。
默认 shell 通常是 pwsh,如终端窗口右侧所示。
选择“启动配置文件”下拉列表,然后选择“Azure Cloud Shell (Bash)”。
此时会打开新的 shell。
使用 Azure CLI 登录到 Azure
在 Visual Studio Code 终端中,运行以下命令以登录到 Azure:
az login
在打开的浏览器中,登录到 Azure 帐户。
若要使用 Azure 中的资源组,请从 Visual Studio Code 终端登录到 Azure 帐户。 确保已安装 Azure PowerShell 和 Visual Studio Code 的 Azure 帐户扩展。
在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。
默认 shell 通常是 pwsh,如终端窗口右侧所示。
选择“启动配置文件”下拉列表,然后选择“Azure Cloud Shell (PowerShell)”。
此时会打开新的 shell。
使用 Azure PowerShell 登录到 Azure
在 Visual Studio Code 终端中,运行以下命令以登录到 Azure:
Connect-AzAccount -UseDeviceAuthentication
按照命令的说明登录到你的 Azure 帐户。
创建工作负载标识
接下来,在 Microsoft Entra ID 中为部署工作流创建工作负载标识。
要创建工作负载标识,Azure CLI 命令使用 jq
从 JSON 输出分析数据。 如果还没有安装 jq
,可以使用 Azure Cloud Shell 中的 Bash 创建工作负载标识、资源组和角色分配,并准备 GitHub 机密。
运行以下代码,为 GitHub 用户名和存储库名称定义变量。 请务必将
mygithubuser
替换为之前在本练习中记下的 GitHub 用户名。 另外,请务必指定正确的 GitHub 存储库名称。githubOrganizationName='mygithubuser' githubRepositoryName='toy-reusable'
为部署工作流创建工作负载标识。
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\"]}"
运行以下代码,为 GitHub 用户名和存储库名称定义变量。 请务必将
mygithubuser
替换为之前在本练习中记下的 GitHub 用户名。 另外,请务必指定正确的 GitHub 存储库名称。$githubOrganizationName = 'mygithubuser' $githubRepositoryName = 'toy-reusable'
为部署工作流创建工作负载标识。
$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 中创建机密。
在浏览器中,转到 GitHub 存储库。
选择“设置”>“机密和变量”>“操作”。
选择“新建存储库机密”。
将机密命名为 AZURE_CLIENT_ID。
在“值”字段中,粘贴终端输出第一行中的 GUID。 不要在值中包含
AZURE_CLIENT_ID
、冒号或任何空格。选择“添加机密”。
重复此过程,为 AZURE_TENANT_ID 和 AZURE_SUBSCRIPTION_ID 创建机密,从终端输出中的相应字段复制值。
验证机密列表现在是否显示所有三个机密。