Tutorial: Automatización de compilaciones de imágenes de contenedor en la nube al confirmar el código fuente
Además de tareas rápidas, ACR Tasks admite compilaciones de imágenes de contenedor Docker automatizadas en la nube al confirmar el código fuente en un repositorio de Git. Los contextos de Git admitidos para ACR Tasks incluyen GitHub público o privado y Azure Repos.
Nota
Actualmente, ACR Tasks no admite desencadenadores de solicitud de confirmación o de extracción en repositorios de GitHub Enterprise.
En este tutorial, la tarea ACR compila e inserta una única imagen de contenedor especificada en un archivo Dockerfile cuando confirma el código fuente en un repositorio de Git. Para crear una tarea de varios pasos que use un archivo YAML para definir los pasos para compilar, insertar y, opcionalmente, probar varios contenedores durante la confirmación del código, consulte el Tutorial: Ejecución de un flujo de trabajo de contenedor de varios pasos en la nube al confirmar el código fuente. Para información general sobre ACR Tasks, consulte Automatización de la aplicación de revisiones de sistema operativo y plataforma con ACR Tasks.
En este tutorial, aprenderá a:
- Crea una tarea.
- Prueba de la tarea
- Visualización del estado de la tarea
- Desencadenamiento de la tarea con una confirmación de código
En este tutorial se da por hecho que ya ha realizado los pasos de los tutoriales anteriores. Si aún no lo ha hecho, complete los pasos de la sección Requisitos previos del tutorial anterior antes de continuar.
Requisitos previos
Obtención de código de ejemplo
En este tutorial se da por hecho que ya ha realizado los pasos de los tutoriales anteriores y que ha bifurcado y clonado el repositorio de ejemplo. Si aún no lo ha hecho, complete los pasos de la sección Requisitos previos del tutorial anterior antes de continuar.
Registro de contenedor
Debe tener un registro de contenedor de Azure en la suscripción de Azure para completar este tutorial. Si necesita un registro, consulte el tutorial anterior o esta guía de inicio rápido: Creación de un registro de contenedor con la CLI de Azure.
Creación de un token de acceso personal de GitHub
Para desencadenar una tarea en una confirmación en un repositorio GIT, ACR Tasks necesita un token de acceso personal (PAT) para acceder al repositorio. Si aún no dispone de un PAT, siga estos pasos para generar uno en GitHub:
Vaya a la página de creación del token de acceso personal en GitHub en https://github.com/settings/tokens/new
Escriba una breve descripción para el token, por ejemplo, "ACR Tasks Demo"
Seleccione los ámbitos de ACR para acceder al repositorio. Para acceder a un repositorio público como en este tutorial, en repo, habilite repo:status y public_repo
Nota
Para generar un PAT y acceder a un repositorio privado, seleccione el ámbito para el control total del repositorio.
Seleccione el botón Generar token (puede que se le pida que confirme la contraseña)
Copie y guarde el token generado en una ubicación segura (usará este token cuando defina una tarea en la siguiente sección)
Preparación del entorno para la CLI de Azure
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Creación de la tarea de compilación
Ahora que ha completado los pasos necesarios para habilitar ACR Tasks para que lea el estado de confirmación y cree webhooks en un repositorio, puede crear una tarea que desencadene una compilación de imagen de contenedor después de las confirmaciones en el repositorio.
Primero, rellene estas variables de entorno de shell con valores adecuados para el entorno. Este paso no es estrictamente necesario, pero hace que la ejecución de los comandos de varias líneas de la CLI de Azure en este tutorial sea un poco más fácil. Si no rellena estas variables de entorno, debe reemplazar manualmente cada valor siempre que aparezca en los comandos de ejemplo.
ACR_NAME=<registry-name> # The name of your Azure container registry
GIT_USER=<github-username> # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section
Ahora, cree la tarea mediante la ejecución del siguiente comando az acr task create.
Nota
El Dockerfile usado en el ejemplo siguiente depende de una imagen de contenedor de base pública de Docker Hub. Para mejorar la confiabilidad al usar contenido público, importe y administre la imagen en un registro de contenedor privado de Azure y actualice el Dockerfile para usar la imagen base administrada de forma privada. Más información sobre cómo trabajar con imágenes públicas.
az acr task create \
--registry $ACR_NAME \
--name taskhelloworld \
--image helloworld:{{.Run.ID}} \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile \
--git-access-token $GIT_PAT
Esta tarea determina que siempre que se confirme código en la rama maestra del repositorio especificado por --context
, ACR Tasks compilará la imagen de contenedor desde el código de esa rama. La instancia de Dockerfile que especifica --file
en la raíz del repositorio se usa para compilar la imagen. El argumento --image
especifica un valor parametrizado de {{.Run.ID}}
para la porción de la versión de la etiqueta de la imagen, lo que garantiza que la imagen compilada es correlativa a una compilación específica y que está etiquetada de forma exclusiva.
La salida de un comando az acr task create que se ha ejecutado correctamente debe ser parecida a la siguiente:
{
"agentConfiguration": {
"cpu": 2
},
"creationDate": "2010-11-19T22:42:32.972298+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
"location": "westcentralus",
"name": "taskhelloworld",
"platform": {
"architecture": "amd64",
"os": "Linux",
"variant": null
},
"provisioningState": "Succeeded",
"resourceGroup": "myregistry",
"status": "Enabled",
"step": {
"arguments": [],
"baseImageDependencies": null,
"contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
"dockerFilePath": "Dockerfile",
"imageNames": [
"helloworld:{{.Run.ID}}"
],
"isPushEnabled": true,
"noCache": false,
"type": "Docker"
},
"tags": null,
"timeout": 3600,
"trigger": {
"baseImageTrigger": {
"baseImageTriggerType": "Runtime",
"name": "defaultBaseimageTriggerName",
"status": "Enabled"
},
"sourceTriggers": [
{
"name": "defaultSourceTriggerName",
"sourceRepository": {
"branch": "main",
"repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node#main",
"sourceControlAuthProperties": null,
"sourceControlType": "GitHub"
},
"sourceTriggerEvents": [
"commit"
],
"status": "Enabled"
}
]
},
"type": "Microsoft.ContainerRegistry/registries/tasks"
}
Comprobación de la tarea de compilación
Ahora tiene una tarea que define la compilación. Para probar la canalización de compilación, desencadene una compilación manualmente mediante la ejecución del comando az acr task run:
az acr task run --registry $ACR_NAME --name taskhelloworld
De forma predeterminada, el comando az acr task run
hace streaming de la salida del registro a la consola cuando se ejecuta el comando. La salida está condensada para mostrar los pasos principales.
2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon 23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:11 Executing step: push
2020/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
registry: myregistry.azurecr.io
repository: helloworld
tag: da2
digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
runtime-dependency:
registry: registry.hub.docker.com
repository: library/node
tag: 9-alpine
digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
git:
git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf
Run ID: ca6 was successful after 27s
Desencadenamiento de una compilación con una confirmación
Ahora que ha probado la tarea ejecutándola manualmente, desencadénela automáticamente con un cambio en el código fuente.
En primer lugar, asegúrese de que se encuentra en el directorio que contiene el clon local del repositorio:
cd acr-build-helloworld-node
A continuación, ejecute los siguientes comandos para crear, confirmar e insertar un nuevo archivo en la bifurcación del repositorio en GitHub:
echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main
Se le pedirá que proporcione sus credenciales de GitHub cuando ejecute el comando git push
. Proporcione el nombre de usuario de GitHub y escriba el token de acceso personal (PAT) que creó anteriormente para la contraseña.
Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>
Una vez que ha insertado una confirmación en el repositorio, el webhook que creó ACR Tasks activa e inicia una compilación en Azure Container Registry. Muestre los registros de la tarea que se está ejecutando actualmente para comprobar y supervisar el progreso de la compilación:
az acr task logs --registry $ACR_NAME
La salida es parecida a la siguiente, que muestra la tarea que se está ejecutando actualmente (o la última que se ejecutó):
Showing logs of the last created run.
Run ID: ca7
[...]
Run ID: ca7 was successful after 38s
Lista de compilaciones
Para ver una lista de las tareas que ACR Tasks ha completado para el registro, ejecute el comando az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
La salida del comando debe ser parecida a la siguiente. Se muestran las ejecuciones que ha ejecutado ACR Tasks y aparece "Confirmación de Git" en la columna DESENCADENADOR de la tarea más reciente:
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
ca7 taskhelloworld linux Succeeded Commit 2020-11-19T22:54:34Z 00:00:29
ca6 taskhelloworld linux Succeeded Manual 2020-11-19T22:51:47Z 00:00:24
ca5 linux Succeeded Manual 2020-11-19T22:23:42Z 00:00:23
Pasos siguientes
En este tutorial ha aprendido a usar una tarea que desencadena automáticamente compilaciones de imágenes de contenedor en Azure cuando confirma código fuente en un repositorio Git. Pase al siguiente tutorial para aprender a crear tareas que desencadenan compilaciones cuando se actualiza la imagen base de la imagen de contenedor.