quickstarts/microsoft.devcenter/devbox-ready-to-code-image/azuredevops/build_images.ps1 (40 lines of code) (raw):
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
$ProgressPreference = 'SilentlyContinue'
# Fail the image build a bit earlier to capture error details from the log.
$imageBuildTimeoutInMinutes = ([int]$Env:PIPELINE_TIMEOUT_IN_MINUTES) - 5
$imageBicepPath = Join-Path (Split-Path $PSScriptRoot -Parent) 'main.bicep'
$imageBuildProfileParam = 'imageBuildProfile={}'
if ($Env:VM_SKU) {
$imageBuildProfileParam = "imageBuildProfile={""sku"": ""$Env:VM_SKU""}"
}
$artifactSourceParam = '{}'
if ($Env:ARTIFACTS_SOURCE_OBJ) {
$artifactSourceParam = "artifactSource=$Env:ARTIFACTS_SOURCE_OBJ"
}
Write-Host "=== Building images with deployment $Env:DEPLOYMENT_NAME"
$deploymentOutput = az deployment group create --template-file $imageBicepPath --name $Env:DEPLOYMENT_NAME --subscription $Env:SUBSCRIPTION_ID --resource-group $Env:RESOURCE_GROUP `
--parameters location=$Env:RESOURCES_LOCATION builderIdentity=$Env:BUILDER_IDENTITY imageIdentity=$Env:IMAGE_IDENTITY galleryName=$Env:GALLERY_NAME `
ignoreBuildFailure=true imageBuildTimeoutInMinutes=$imageBuildTimeoutInMinutes $imageBuildProfileParam $artifactSourceParam
# Print the deployment output after fixing end-of-line characters in image build logs
$deploymentOutput -Replace '\\n', [Environment]::NewLine
Write-Host "=== Getting deployment result"
$deploymentResult = (az deployment group show --subscription $Env:SUBSCRIPTION_ID --resource-group $Env:RESOURCE_GROUP --name $Env:DEPLOYMENT_NAME) | ConvertFrom-Json
$deploymentResultProps = $deploymentResult.PSobject.Properties | Where-Object { $_.Name -eq 'properties' } | Select-Object -ExpandProperty Value
$outputResources = $deploymentResultProps | Select-Object -ExpandProperty outputResources
$imageTemplates = @($outputResources | Where-Object { $_ -match 'Microsoft.VirtualMachineImages' })
$failuresCount = 0
foreach ($imageTemplate in $imageTemplates) {
Write-Host "=== Validating build result for image $($imageTemplate.id)"
$templateInfo = (az image builder show --ids $imageTemplate.Id) | ConvertFrom-Json
if ($templateInfo.lastRunStatus.runState -ne "Succeeded") {
$failuresCount++
Write-Warning "!!! [ERROR] Image build failed with status '$($templateInfo.lastRunStatus.runState)', message '$($templateInfo.lastRunStatus.message)'"
}
}
if (($failuresCount -gt 0) -or ($imageTemplates.Count -eq 0)) {
Write-Error "!!! [ERROR] $failuresCount image build(s) failed"
}
else {
Write-Host "=== Success: $($imageTemplates.Count) image build(s) succeeded"
}