练习 - 设置环境
重要
需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户。
在设置玩具公司的拉取请求工作流之前,你需要配置环境。
在本单元中,确保已设置好 Azure 和 GitHub 环境,以便完成本模块的剩余操作。
为了达成这些目标,你需要:
- 设置此模块的 GitHub 存储库。
- 将存储库克隆到你的计算机。
- 在 Microsoft Entra ID 中创建工作负载标识。
- 在 GitHub 中创建机密。
获取 GitHub 存储库
在本部分中,你通过在模板存储库的基础上创建一个新存储库,设置了 GitHub 存储库以完成本模块的其余部分。 模板存储库包含开始学习此模块所需的文件。
本学习路径中的模块是循序渐进的。 出于学习目的,每个模块都有一个关联的 GitHub 模板存储库。
提示
即使你已完成学习路径中的上一个模块,也请按照这些说明创建新存储库,并为其提供一个新名称。
从模板存储库开始
运行用于设置 GitHub 存储库的模板。
在 GitHub 站点上,通过执行以下操作从模板创建存储库:
选择“使用此模板”>“创建新存储库”。
记下 GitHub 用户名或组织的名称。 在该示例中,GitHub 用户名为 mygithubuser。 很快会用到此名称。
输入新项目的名称,如“toy-website-auto-review”。
选择“公共”选项。
创建自己的存储库时,可以将其设为专用。 在本模块中,你将使用 GitHub 的一些功能,这些功能仅适用于公用存储库和 GitHub Enterprise 帐户。
选择“创建存储库”。
克隆存储库
现在,你在自己的帐户中有一个模板存储库的副本。 在本地克隆此存储库,以便可在其中开始操作。
选择“代码”,然后选择复制图标。
打开 Visual Studio Code。
选择“终端”>“新建终端”,打开 Visual Studio Code 终端窗口。 此窗口通常会在屏幕底部打开。
在终端中,转到要在本地计算机上克隆 GitHub 存储库的目录。 例如,若要将存储库克隆到“toy-website-auto-review”文件夹,请运行以下命令:
cd toy-website-auto-review
键入
git clone
并粘贴之前复制的 URL,如下所示:git clone https://github.com/mygithubuser/toy-website-auto-review.git
通过在 Visual Studio Code 终端运行以下命令,在存储库文件夹中重新打开 Visual Studio Code:
code -r toy-website-auto-review
登录 Azure
将存储库本地克隆到计算机之后,接下来即可登录到 Azure 环境。 使用 Azure 帐户创建工作负载标识以供 GitHub Actions 工作流使用。
在 Visual Studio Code 终端中,运行以下命令以登录到 Azure:
az login
在打开的浏览器中,登录到 Azure 帐户。
在 Visual Studio Code 终端中,运行以下命令登录到 Azure:
Connect-AzAccount
在打开的浏览器中,登录到 Azure 帐户。
创建工作负载标识
在稍后的 Microsoft Learn 模块中,拉取请求工作流将在订阅中创建资源组和资源。 若要部署资源,你需要创建工作负载标识,并授予它在订阅上的“参与者”角色。
警告
在此处创建的工作负载标识具有对 Azure 订阅的高级别访问权限。 若要避免任何意外问题,请使用非生产订阅。 请勿在包含任何生产工作负载的环境中执行这些步骤。
在你自己的拉取请求验证工作流中,建议你使用专用 Azure 订阅。
要创建工作负载标识,Azure CLI 命令使用 jq
从 JSON 输出分析数据。 如果还没有安装 jq
,可以使用 Azure Cloud Shell 中的 Bash 创建工作负载标识、资源组和角色分配,并准备 GitHub 机密。
运行以下代码,为 GitHub 用户名和存储库名称定义变量。 确保将
mygithubuser
替换为你的 GitHub 用户名,在本练习前面指出了这一点。 另外,请确保指定正确的 GitHub 存储库名称。githubOrganizationName='mygithubuser' githubRepositoryName='toy-website-auto-review'
为部署工作流创建工作负载标识。
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\"]}"
运行以下代码,为 GitHub 用户名和存储库名称定义变量。 确保将
mygithubuser
替换为你的 GitHub 用户名,在本练习前面指出了这一点。 另外,请确保指定正确的 GitHub 存储库名称。$githubOrganizationName = 'mygithubuser' $githubRepositoryName = 'toy-website-auto-review'
为部署工作流创建工作负载标识。
$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"
授予工作负载标识来访问订阅
接下来,为网站创建一个资源组。 此过程还会向工作负载标识授予资源组的“参与者”角色,从而使工作流可部署到该资源组。
在 Visual Studio Code 终端中,运行以下 Azure CLI 命令:
az ad sp create --id $applicationRegistrationObjectId az role assignment create \ --assignee $applicationRegistrationAppId \ --role Contributor
在 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 中创建机密。
在浏览器中,导航到 GitHub 存储库。
选择“设置”>“机密和变量”>“操作”。
选择“新建存储库机密”。
将机密命名为 AZURE_CLIENT_ID。
在“值”字段中,粘贴终端输出第一行中的 GUID。 不要在值中包含
AZURE_CLIENT_ID
、冒号或任何空格。选择“添加机密”。
重复此过程,为 AZURE_TENANT_ID 和 AZURE_SUBSCRIPTION_ID 创建机密,从终端输出中的相应字段复制值。
验证机密列表现在是否显示所有三个机密。