你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:使用 GitHub Actions 部署 Bicep 文件
GitHub Actions 是 GitHub 中用于自动执行软件开发工作流的一套功能。 在本快速入门中,你将使用 GitHub Actions 部署 Azure 资源管理器,以自动将 Bicep 文件部署到 Azure。
本快速入门简要介绍了 GitHub Actions 和 Bicep 文件。 若要了解设置 GitHub Actions 和项目的更详细步骤,请参阅使用 Bicep 和 GitHub Actions 部署 Azure 资源。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 一个 GitHub 帐户。 如果没有该帐户,请注册免费版。
- 一个 GitHub 存储库,用于存储 Bicep 文件和工作流文件。 若要创建一个存储库,请参阅创建新存储库。
创建资源组
创建资源组。 稍后在本快速入门中,你要将 Bicep 文件部署到此资源组。
az group create -n exampleRG -l westus
生成部署凭据
若要凭借 OIDC 使用 Azure 登录操作,需要在 Microsoft Entra 应用程序或用户分配的托管标识上配置联合标识凭据。
选项 1:Microsoft Entra 应用程序
- 通过 Azure 门户、Azure CLI 或 Azure PowerShell 创建具有服务主体的 Microsoft Entra 应用程序。
- 复制客户端 ID、订阅 ID 和目录(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
- 由 Azure 门户、Azure CLI 或 azure PowerShell 为服务主体分配适当的角色。
- 在 Microsoft Entra 应用程序上配置联合标识凭据,以信任 GitHub Actions 颁发的令牌到 GitHub 存储库。
选项 2:用户分配的托管标识
- 创建用户分配的托管标识。
- 复制客户端 ID、订阅 ID 和目录(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
- 为用户分配的托管标识分配适当的角色。
- 在用户分配的托管标识上配置联合标识凭据,以信任 GitHub Actions 颁发给 GitHub 存储库的令牌。
配置 GitHub 机密
需要向登录操作提供应用程序的“客户端 ID”、“目录(租户) ID”和“订阅 ID”。 这些值可直接在工作流中提供,或可存储在 GitHub 机密中并在工作流中引用。 将这些值保存为 GitHub 机密是更安全的选择。
在 GitHub 中,转到存储库。
选择“安全性”>“机密和变量”>“操作”。
选择“新建存储库机密”。
注意
若要增强公共存储库中的工作流安全性,请使用环境机密而不是存储库机密。 如果环境需要批准,作业在所需的审查者批准之前不能访问环境机密。
为
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
创建机密。 从 GitHub 机密的 Microsoft Entra 应用程序或用户分配的托管标识复制这些值:GitHub 机密 Microsoft Entra 应用程序或用户分配的托管标识 AZURE_CLIENT_ID 客户端 ID AZURE_SUBSCRIPTION_ID 订阅 ID AZURE_TENANT_ID 目录(租户)ID 注意
出于安全原因,我们建议使用 GitHub 机密,而不是将值直接传递到工作流。
添加 Bicep 文件
将 Bicep 文件添加到 GitHub 存储库。 以下 Bicep 文件创建存储帐户:
@minLength(3)
@maxLength(11)
param storagePrefix string
@allowed([
'Standard_LRS'
'Standard_GRS'
'Standard_RAGRS'
'Standard_ZRS'
'Premium_LRS'
'Premium_ZRS'
'Standard_GZRS'
'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Bicep 文件采用一个名为 storagePrefix 的参数,其中包含 3 到 11 个字符。
你可以将该文件放到存储库中的任何位置。 下一部分中的工作流示例假设 Bicep 文件名为 main.bicep,并存储在存储库的根目录中。
创建工作流
工作流定义了在触发时要执行的步骤。 它是存储库的 .github/workflows/ 路径中的一个 YAML (.yml) 文件。 工作流文件扩展名可以是“.yml”或“.yaml”。
若要创建工作流,请执行以下步骤:
在 GitHub 存储库的顶部菜单中,选择“操作”。
选择“新建工作流”。
选择“自己设置工作流”。
如果希望使用“main.yml”以外的其他名称,请重命名工作流文件。 例如:deployBicepFile.yml。
将 yml 文件的内容替换为以下代码:
on: [push] name: Azure ARM permissions: id-token: write contents: read jobs: build-and-deploy: runs-on: ubuntu-latest steps: # Checkout code - uses: actions/checkout@main # Log into Azure - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} # Deploy Bicep file - name: deploy uses: azure/arm-deploy@v1 with: subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} resourceGroupName: ${{ secrets.AZURE_RG }} template: ./main.bicep parameters: 'storagePrefix=mystore storageSKU=Standard_LRS' failOnStdErr: false
选择“提交更改”。
选择“直接提交到主分支”。
选择“提交新文件”(或“提交更改”)。
更新工作流文件或 Bicep 文件会触发工作流。 提交更改后,工作流将立即启动。
检查工作流状态
- 选择“操作”选项卡。你将看到列出的“创建 deployBicepFile.yml”工作流。 运行此工作流需要 1-2 分钟。
- 选择要打开的工作流,并验证
Status
是否为Success
。
清理资源
不再需要资源组和存储库时,请通过删除资源组和 GitHub 存储库来清理部署的资源。
az group delete --name exampleRG