练习 - 将 Bicep 部署任务添加到管道
你已创建一个基本管道,并且已将 Azure 和 Azure Pipelines 环境配置为连接。 现在,已可以将网站的 Bicep 文件从管道部署到 Azure。
通过学习本练习,你将能够:
- 将 Bicep 文件添加到存储库。
- 添加管道步骤以部署 Bicep 文件。
- 再次运行管道并验证其是否成功部署了网站。
将网站的 Bicep 文件添加到 Git 存储库
你已准备好网站的 Bicep 文件。 现在可以使用 Bicep 文件根据环境和配置来部署不同的网站资源配置。 此处将 Bicep 文件添加到存储库。
打开 Visual Studio Code 资源管理器。
在部署文件夹中,创建一个名为 main.bicep 的新文件。 确保在 deploy 文件夹中而不是在存储库的根目录下创建文件:
将以下代码复制到 main.bicep 文件中:
@description('The Azure region into which the resources should be deployed.') param location string = resourceGroup().location @description('The type of environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string @description('Indicates whether to deploy the storage account for toy manuals.') param deployToyManualsStorageAccount bool @description('A unique suffix to add to resource names that need to be globally unique.') @maxLength(13) param resourceNameSuffix string = uniqueString(resourceGroup().id) var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website-plan' var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}' // Define the SKUs for each component based on the environment type. var environmentConfigurationMap = { nonprod: { appServicePlan: { sku: { name: 'F1' capacity: 1 } } toyManualsStorageAccount: { sku: { name: 'Standard_LRS' } } } prod: { appServicePlan: { sku: { name: 'S1' capacity: 2 } } toyManualsStorageAccount: { sku: { name: 'Standard_ZRS' } } } } var toyManualsStorageAccountConnectionString = deployToyManualsStorageAccount ? 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' : '' resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = { name: appServicePlanName location: location sku: environmentConfigurationMap[environmentType].appServicePlan.sku } resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'ToyManualsStorageAccountConnectionString' value: toyManualsStorageAccountConnectionString } ] } } } resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (deployToyManualsStorageAccount) { name: toyManualsStorageAccountName location: location kind: 'StorageV2' sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku }
保存对该文件所做的更改。
在 Visual Studio Code 终端中,运行以下代码以暂存更改、提交更改并将更改推送到存储库:
git add deploy/main.bicep git commit -m 'Add Bicep file' git push
替换管道步骤
接下来,将管道定义更新为使用服务连接将 Bicep 文件部署到 Azure。
在 Visual Studio Code 中,打开 deploy/azure-pipelines.yml 文件。
在
jobs:
行前面,添加variables:
以定义名为deploymentDefaultLocation
的变量:trigger: none pool: vmImage: ubuntu-latest variables: - name: deploymentDefaultLocation value: westus3 jobs:
通过删除文件的最后两行,从管道定义中删除
script
步骤。提示
在 Visual Studio Code 中工作时,如果已安装 Azure Pipelines 扩展,请尝试使用 Ctrl+Space 组合键。 它显示了一个上下文菜单,其中包含建议添加到当前光标位置的元素。
在文件底部,添加一个使用
AzureResourceManagerTemplateDeployment
任务来部署 Bicep 文件的任务:jobs: - job: steps: - task: AzureResourceManagerTemplateDeployment@3 inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(deploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
备注
最好是自行键入此代码,而不是从本模块中复制粘贴。 请注意文件缩进。 如果缩进不正确,YAML 文件将无效。 Visual Studio Code 通过显示波浪线来指示错误。
此步骤使用系统变量
$(Build.BuildNumber)
来命名部署。 变量可以帮助你轻松查看与部署相对应的管道运行。location
任务属性对于AzureResourceManagerTemplateDeployment
任务是必需的。 该属性指定了应在其中创建资源组的 Azure 区域。 在本练习中,你已创建一个资源组,因此在此处指定的位置并不重要。 但无论如何,你需要提供该值。 在这里,将其设置为在上一步中设置的deploymentDefaultLocation
变量的值。保存对该文件所做的更改。 文件应如下例所示:
trigger: none pool: vmImage: ubuntu-latest variables: - name: deploymentDefaultLocation value: westus3 jobs: - job: steps: - task: AzureResourceManagerTemplateDeployment@3 inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(deploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
在 Visual Studio Code 终端中,暂存更改,将更改提交到存储库,然后推送到 Azure Repos:
git add deploy/azure-pipelines.yml git commit -m 'Add deployment task to pipeline' git push
添加管道变量
在浏览器中,选择“管道”。
选择管道。
选择“编辑”。
选择“变量”。
选择“New variable”。
在“名称”中,输入“ServiceConnectionName”。 在“值”中,输入“ToyWebsite”。
清除复选框,然后选择“确定”。
若要创建更多变量,请选择 +。
按照创建 ServiceConnectionName 变量的方式创建以下变量:
变量名称 值 ResourceGroupName ToyWebsite EnvironmentType nonprod 再次完成这些步骤,创建一个名为 DeployToyManualsStorageAccount 的变量,其值为 true。 对于此变量,选择“用户可在运行此管道时替换此值”复选框。
创建所有四个变量后,选择“保存”。
运行管道
现在可以运行管道了!
模板包含一个存储帐户,网站团队使用该帐户来存储玩具说明手册。 由于你仍在测试环境,所以无需在每次部署网站时都部署存储帐户。 因此,你创建了一个 Bicep 参数来控制是否部署存储帐户。 此处将运行管道并覆盖部署,以便这次不部署存储帐户。
选择“运行”。
此时将显示“运行管道”窗格。 在此窗格中,可以为管道的此特定运行配置设置。
选择“变量”。
选择“DeployToyManualsStorageAccount”变量并将其值更改为“false”。 然后选择“更新”。
选择后退箭头。
若要启动新的管道运行,请选择“运行”。 管道可能需要几分钟时间才能启动。 管道启动后,部署可能需要几分钟才能完成。
要打开作业,请在“作业”部分选择“作业”。 可以在作业运行时监视作业,也可以等到作业完成后再查看其历史记录。
请等待作业完成。
选择“作业”。
选择“使用了 1 个队列时间变量”。
将显示此管道运行的重写值。
DeployToyManualsStorageAccount
变量的值为 false,因为会重写原始值。检查管道输出的其余部分。
管道显示成功的部署。
验证部署
转到 Azure 门户。
在左侧菜单中,选择“资源组”。
选择“ToyWebsite”。
在“概述”中,查看部署状态。 你会看到一个成功的部署。
选择“1 个已成功”以查看部署的详细信息。
部署名称与管道运行名称相同。
若要查看已部署的资源,请选择部署。 若要展开部署以查看更多详细信息,请选择“部署详细信息”。 在这种情况下,有一个应用服务计划和一个应用。