Share via


Uso de desencadenadores de Azure Image Builder para configurar una compilación automática de imágenes

Puede usar desencadenadores en Azure Image Builder (AIB) para configurar compilaciones automáticas de imágenes cuando se cumplen determinados criterios en la canalización de compilación.

Importante

Tenga en cuenta que existe una restricción en la cantidad de desencadenadores permitidos por región, específicamente 100 por región por suscripción.

Nota:

Actualmente, solo se admite la configuración de un desencadenador para una nueva imagen de origen, pero se prevé admitir distintos tipos de desencadenadores en el futuro.

Requisitos previos

Antes de configurar el primer desencadenador, asegúrese de que usa la versión 2022-07-01 de la API de Azure Image Builder.

Configuración de un desencadenador en Azure Image Builder

Registro de los proveedores

Para usar VM Image Builder con los desencadenadores, debe registrar los proveedores siguientes. Ejecute los siguientes comandos para comprobar el registro:

az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState

Si la salida no dice registrada, ejecute los siguientes comandos:

az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance

Registre la característica de desencadenadores de compilación automática de imágenes:

az feature register --namespace Microsoft.VirtualMachineImages --name Triggers

Configuración de variables

En primer lugar, debe establecer algunas variables que usará varias veces en los comandos.

# Resource group name - ibTriggersTestRG in this example
resourceGroupName=ibTriggersRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus2
# Name of the Azure Compute Gallery - ibTriggersGallery in this example
acgName=ibTriggersGallery
# Name of the image definition to be created - ibTriggersImageDef in this example
imageDefName=ibTriggersImageDef
# Name of the Trigger to be created - ibTrigger in this example
ibTriggerName=ibTrigger
# Name of the image template to be created - ibTriggersImageTemplate in this example
imageTemplateName=ibTriggersImageTemplate
# Reference name in the image distribution metadata
runOutputName=ibTriggersTestRun
# Create a variable for your subscription ID
subscriptionID=$(az account show --query id --output tsv)

Creación de un grupo de recursos

Ahora, debe crear un grupo de recursos donde pueda almacenar la plantilla de imagen. Use el siguiente comando para hacer el grupo de recursos:

az group create -n $resourceGroupName -l $location

Creación de una identidad administrada para el servicio

También deberá crear una identidad administrada que se usará para la plantilla de imagen (y, posiblemente, la VM de compilación de Azure Image Builder). En este ejemplo, se crea una identidad administrada con acceso de "Colaborador", pero puede refinar los permisos o el rol asignados a la identidad administrada como desee, siempre que incluya los permisos necesarios para que el servicio Azure Image Builder funcione correctamente.

Para más información sobre los permisos necesarios para el servicio Azure Image Builder, consulte la siguiente documentación: Configuración de permisos de Azure VM Image Builder mediante la CLI de Azure.

Para más información sobre cómo se pueden asignar y usar las identidades administradas en Azure Image Builder, consulte la siguiente documentación: Referencia de plantilla de VM Image Builder: Identidad.

Use el siguiente comando para crear la identidad administrada que se usará para la plantilla de imagen:

# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $resourceGroupName -n $identityName

# Get the identity client and principal ID
imgBuilderCliId=$(az identity show -g $resourceGroupName -n $identityName --query clientId -o tsv)

# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# Grant "Contributor" access to the user-assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "Contributor" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$resourceGroupName

Para usar VM Image Builder con una instancia de Azure Compute Gallery, debe tener una galería y una definición de imagen existentes. VM Image Builder no crea la galería ni la definición de imagen automáticamente.

Si aún no tiene una galería y una definición de imagen para usar, empiece por crearlas.

En primer lugar, cree una galería:

az sig create \
    -g $resourceGroupName \
    --gallery-name $acgName

Luego, cree una definición de imagen:

az sig image-definition create \
   -g $resourceGroupName \
   --gallery-name $acgName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 18.04-LTS \
   --os-type Linux

Creación de la plantilla de imagen

Descargue la plantilla JSON de ejemplo y configúrela con las variables. La plantilla de imagen siguiente usa una imagen de plataforma como origen, pero puede cambiar el origen a una imagen de Azure Compute Gallery si desea configurar compilaciones automáticas de imágenes en cualquier momento en que haya una nueva versión de la imagen en Azure Compute Gallery.

curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/helloImageTemplate.json -o helloImageTemplateforTriggers.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforTriggers.json
sed -i -e "s/<rgName>/$resourceGroupName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<acgName>/$acgName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforTriggers.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforTriggers.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforTriggers.json

Requisitos de plantilla de imagen:

  • source debe ser una imagen de plataforma o una imagen de Azure Compute Gallery (actualmente solo se permiten estos dos orígenes).
  • Si usa una imagen de plataforma, la versión del origen debe ser Latest. En el caso de una imagen de Azure Compute Gallery, la última parte del id. de recurso que tiene el nombre de la versión debe establecerse en Latest.
  • No se puede especificar una versión si se va a distribuir la imagen a una instancia de Azure Compute Gallery. La versión se incrementa automáticamente.
  • Cuando el origen se establece en una imagen de Azure Compute Gallery y la distribución se establece en una instancia de Azure Compute Gallery, la imagen de la galería de origen y la imagen de la galería de distribución no pueden ser iguales. El id. de definición de la imagen de Azure Compute Gallery no puede ser el mismo para la imagen de la galería de origen y para la imagen de la galería de distribución.
  • La plantilla de imagen debe decir "Succeeded" (Correcto) en provisioningState, lo que significa que la plantilla se creó sin problemas. Si la plantilla no se aprovisiona correctamente, no podrá crear un desencadenador.

Después de configurar la plantilla, use el siguiente comando para enviar la configuración de imagen al servicio Azure Image Builder:

az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json

Puede usar el siguiente comando para comprobar que la plantilla de imagen se creó correctamente:

az image builder show --name $imageTemplateName --resource-group $resourceGroupName

Nota:

Al ejecutar el comando anterior, provisioningState debe decir "Succeeded" (Correcto), lo que significa que la plantilla se creó sin problemas. Si provisioningState no dice que se ha completado correctamente, no podrá hacer que un desencadenador use la plantilla de imagen.

Creación de un desencadenador de origen

Descargue la plantilla del desencadenador de ejemplo y configúrela con las variables. El siguiente desencadenador inicia una nueva compilación de imagen cada vez que se actualiza la imagen de origen.

curl https://raw.githubusercontent.com/kof-f/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/trigger.json -o trigger.json
sed -i -e "s/<region1>/$location/g" trigger.json

Requisitos del desencadenador:

  • La ubicación del desencadenador debe ser la misma que la ubicación de la plantilla de imagen. Este es un requisito del cmdlet az resource create.
  • Actualmente, se admite un kind de desencadenador, que es "SourceImage"
  • Solo se admite un desencadenador "SourceImage" por imagen. Si ya hay un desencadenador "SourceImage" en la imagen, no podrá crear uno nuevo.
  • No se puede actualizar el campo kind a otro tipo de desencadenador. Tiene que eliminar el desencadenador y volver a crearlo o crear otro desencadenador con la configuración adecuada.

Use el siguiente comando para agregar el desencadenador al grupo de recursos.

az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage

También puede usar el siguiente comando para comprobar que el desencadenador se creó correctamente:

az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

Nota:

Al ejecutar el comando anterior, provisioningState debe decir Succeeded, lo que significa que el desencadenador se creó sin problemas. En status, el código debe decir Healthy y el mensaje debe decir Trigger is active.

Limpieza de los recursos

Eliminación del desencadenador

Utilice el comando siguiente para eliminar el desencadenador:

az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

Eliminación de la plantilla de imagen

Use el siguiente comando para eliminar la plantilla de imagen:

az image builder delete --name $imageTemplateName --resource-group $resourceGroupName

Pasos siguientes

Consulte la referencia de plantilla de Image Builder para más información.