練習 - 將 Bicep 部署工作新增至管線
您已建立基本管線,並將 Azure 和 Azure Pipelines 環境設為彼此連線。 現在您已準備好將網站的 Bicep 檔案從管線部署到 Azure。
在本練習中,您將會:
- 將 Bicep 檔案新增至您的存放庫。
- 新增管線步驟以部署 Bicep 檔案。
- 再次執行您的管線,並確認管線已成功部署您的網站。
將網站的 Bicep 檔案新增至 Git 存放庫
您已備妥網站的 Bicep 檔案。 其可用來根據環境和設定部署不同的網站資源設定。 在這裡,您會將 Bicep 檔案新增至存放庫。
開啟 Visual Studio Code 檔案總管。
在 deploy 資料夾中,建立名為 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)
來命名部署。 此變數可協助您輕鬆地查看部署對應的管線執行狀況。AzureResourceManagerTemplateDeployment
工作需要location
工作屬性。 其會指定要在其中建立資源群組的 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
新增管線變數
在您的瀏覽器中,選取 [管線]。
選取您的管線。
選取編輯。
選取變數。
選取 [新增變數]。
在 [名稱] 中,輸入 ServiceConnectionName。 在 [值] 中,輸入 ToyWebsite。
將核取方塊保留為清除狀態,然後選取 [確定]。
若要建立更多變數,請選取 [+]。
利用您之前建立 ServiceConnectionName 變數的相同方式來建立下列變數:
變數名稱 值 ResourceGroupName ToyWebsite EnvironmentType nonprod 再次完成相關步驟,建立名為 DeployToyManualsStorageAccount 的變數,並將值設為 true。 針對此變數,請選取 [讓使用者在執行此管線時覆寫此值] 核取方塊。
建立好這四個變數之後,請選取 [儲存]。
執行您的管線
您現在可以隨時執行管線!
您的範本包含一個儲存體帳戶,您的網站團隊會使用此帳戶儲存玩具說明書。 由於您仍在測試環境,因此並不需要在每次部署網站時部署儲存體帳戶。 為此,您建立 Bicep 參數來控制是否要部署儲存體帳戶。 在這裡,您會執行管線並覆寫部署,確保部署不在這時候部署儲存體帳戶。
選取執行。
執行管線窗格隨即出現。 您可以在此窗格中設定此特定管線執行的設定。
選取變數。
選取 DeployToyManualsStorageAccount 變數,並將其值變更為 false。 然後選取 [更新]。
選取上一頁箭號。
選取 [執行] 啟動新的管線執行。 啟動這個管線可能需要幾分鐘。 管線啟動之後,部署可能需要幾分鐘才能完成。
若要開啟作業,請在 [作業] 區段中選取 [作業]。 您可以監視正在執行的作業,或等到作業完成後再檢閱其歷程記錄。
請等候作業完成。
選取 [工作]。
選取 [1 queue time variable used] (已使用 1 個佇列時間變數)。
隨即顯示此管線執行的覆寫值。 因為您覆寫了原始值,所以
DeployToyManualsStorageAccount
變數的值為 false。檢查管線輸出的其餘部分。
管線顯示部署成功。
檢查部署
前往 Azure 入口網站。
在左側功能表中,選取 [資源群組]。
選取 [ToyWebsite]。
在 [概觀] 中檢視部署狀態。 您會看到一個部署成功。
選取 [1 成功] 以查看部署的詳細資料。
部署名稱與管線執行名稱相同。
若要查看所部署的資源,請選取部署。 若要展開部署以查看更多詳細資料,請選取 [部署詳細資料]。 本例中會看到 Azure App Service 方案與應用程式。