Tutorial: Ejecución de una tarea de ACR según una programación definida
En este tutorial se muestra cómo ejecutar una Tarea de ACR según una programación. Para programar una tarea, configure uno o varios desencadenadores de temporizador. Los desencadenadores de temporizador se pueden usar solos o en combinación con otros desencadenadores de tareas.
En este tutorial, obtendrá información sobre la programación de tareas y:
- Creación de una tarea con un desencadenador de temporizador
- Administración de desencadenadores de temporizador
La programación de tareas es útil para escenarios como los siguientes:
- Ejecutar una carga de trabajo de contenedor para operaciones de mantenimiento programadas. Por ejemplo, ejecute una aplicación en contenedores para que elimine las imágenes innecesarias del registro.
- Ejecutar un conjunto de pruebas en una imagen de producción durante el día de trabajo como parte de la supervisión del sitio activo.
Requisitos previos
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.
Acerca de la programación de tareas
Desencadenador con una expresión cron: el desencadenador de temporizador de una tarea utiliza una expresión cron. La expresión es una cadena con cinco campos que especifican el minuto, la hora, el día, el mes y el día de la semana en que se va a desencadenar la tarea. Se admiten frecuencias de hasta una vez por minuto.
Por ejemplo, la expresión
"0 12 * * Mon-Fri"
desencadena una tarea al mediodía hora UTC todos los días de la semana. Consulte los detalles más adelante en este artículo.Varios desencadenadores de temporizador: se permite la adición de varios temporizadores a una tarea, siempre que las programaciones sean distintas.
- Puede especificar varios desencadenadores de temporizador al crear la tarea o agregarlos más tarde.
- Opcionalmente, dé un nombre a los desencadenadores para facilitar la administración; de lo contrario, ACR Tasks proporcionará nombres de desencadenador predeterminados.
- Si las programaciones del temporizador se superponen en algún momento, ACR Tasks desencadena la tarea a la hora programada para cada temporizador.
Otros desencadenadores de tarea: en una tarea desencadenada por temporizadores, también puede habilitar desencadenadores en función de la confirmación del código fuente o las actualizaciones de la imagen de base. Al igual que otras tareas de ACR, también puede ejecutar manualmente una tarea programada.
Creación de una tarea con un desencadenador de temporizador
Comando de tarea
Primero, rellene la variables de entorno de shell siguiente con un valor adecuado 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 esta variable, debe reemplazar manualmente cada valor siempre que aparezca en los comandos de ejemplo.
ACR_NAME=<registry-name> # The name of your Azure container registry
Cuando crea una tarea con el comando az acr task create, opcionalmente puede agregar un desencadenador de temporizador. Agregue el parámetro --schedule
y pase una expresión cron para el temporizador.
A modo de ejemplo sencillo, la siguiente tarea desencadena la ejecución de la imagen hello-world
de Microsoft Container Registry todos los días a las 21:00 UTC. La tarea se ejecuta sin un contexto de código fuente.
az acr task create \
--name timertask \
--registry $ACR_NAME \
--cmd mcr.microsoft.com/hello-world \
--schedule "0 21 * * *" \
--context /dev/null
Ejecute el comando az acr task show para ver que el desencadenador de temporizador está configurado. De forma predeterminada, el desencadenador de actualización de la imagen de base también está habilitado.
az acr task show --name timertask --registry $ACR_NAME --output table
NAME PLATFORM STATUS SOURCE REPOSITORY TRIGGERS
-------- ---------- -------- ------------------- -----------------
timertask linux Enabled BASE_IMAGE, TIMER
Además, un ejemplo sencillo de la tarea que se ejecuta con el contexto de código fuente. La siguiente tarea desencadena la ejecución de la imagen hello-world
de Microsoft Container Registry todos los días a las 21:00 UTC.
Siga los requisitos previos para compilar el contexto de código fuente y, a continuación, cree una tarea programada con contexto.
az acr task create \
--name timertask \
--registry $ACR_NAME \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile \
--image timertask:{{.Run.ID}} \
--git-access-token $GIT_PAT \
--schedule "0 21 * * *"
Ejecute el comando az acr task show para ver que el desencadenador de temporizador está configurado. De forma predeterminada, el desencadenador de actualización de la imagen de base también está habilitado.
az acr task show --name timertask --registry $ACR_NAME --output table
Ejecute el comando az acr task run para desencadenar la tarea manualmente.
az acr task run --name timertask --registry $ACR_NAME
Desencadenar la tarea
Desencadene la tarea manualmente con az acr task run para asegurarse de que está configurado correctamente:
az acr task run --name timertask --registry $ACR_NAME
Si el contenedor se ejecuta correctamente, el resultado es similar al siguiente. La salida está condensada para mostrar los pasos principales.
Queued a run with ID: cf2a
Waiting for an agent...
2020/11/20 21:03:36 Using acb_vol_2ca23c46-a9ac-4224-b0c6-9fde44eb42d2 as the home volume
2020/11/20 21:03:36 Creating Docker network: acb_default_network, driver: 'bridge'
[...]
2020/11/20 21:03:38 Launching container with name: acb_step_0
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
Después de la hora programada, ejecute el comando az acr task list-runs para comprobar que el temporizador desencadenó la tarea según lo esperado:
az acr task list-runs --name timertask --registry $ACR_NAME --output table
Cuando el temporizador desencadena la tarea correctamente, el resultado es similar al siguiente:
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- --------- ---------- --------- --------- -------------------- ----------
ca15 timertask linux Succeeded Timer 2020-11-20T21:00:23Z 00:00:06
ca14 timertask linux Succeeded Manual 2020-11-20T20:53:35Z 00:00:06
Administración de desencadenadores de temporizador
Use los comandos az acr task timer para administrar los desencadenadores de temporizador de una tarea de ACR.
Adición o actualización de un desencadenador de temporizador
Una vez que se ha creado una tarea, tiene la opción de agregar un desencadenador de temporizador mediante el comando az acr task timer add. En el ejemplo siguiente se agrega un desencadenador de temporizador denominado timer2 a la tarea timertask creada anteriormente. Este temporizador desencadena la tarea todos los días a las 10:30 UTC.
az acr task timer add \
--name timertask \
--registry $ACR_NAME \
--timer-name timer2 \
--schedule "30 10 * * *"
Actualice la programación de un desencadenador existente o cambie su estado mediante el comando az acr task timer update. Por ejemplo, actualice el desencadenador denominado timer2 para que desencadene la tarea a las 11:30 UTC:
az acr task timer update \
--name timertask \
--registry $ACR_NAME \
--timer-name timer2 \
--schedule "30 11 * * *"
Enumeración de los desencadenadores de temporizador
El comando az acr task timer list muestra los desencadenadores de temporizador configurados para una tarea:
az acr task timer list --name timertask --registry $ACR_NAME
Salida de ejemplo:
[
{
"name": "timer2",
"schedule": "30 11 * * *",
"status": "Enabled"
},
{
"name": "t1",
"schedule": "0 21 * * *",
"status": "Enabled"
}
]
Eliminación de un desencadenador de temporizador
Use el comando az acr task timer remove para eliminar un desencadenador de temporizador de una tarea. En el ejemplo siguiente, se elimina el desencadenador timer2 de timertask:
az acr task timer remove \
--name timertask \
--registry $ACR_NAME \
--timer-name timer2
Expresiones Cron
ACR Tasks usa la biblioteca NCronTab para interpretar expresiones cron. Las expresiones admitidas en ACR Tasks tienen cinco campos obligatorios, separados por espacios en blanco:
{minute} {hour} {day} {month} {day-of-week}
La zona horaria que se usa con las expresiones cron es la Hora universal coordinada (UTC). Las horas están en formato de 24 horas.
Nota
ACR Tasks no admite el campo {second}
o {year}
en las expresiones cron. Si copia una expresión cron que se utiliza en otro sistema, asegúrese de quitar esos campos, si se usan.
Cada campo puede tener uno de los siguientes tipos de valores:
Tipo | Ejemplo | Cuándo se desencadena |
---|---|---|
Un valor específico | "5 * * * *" |
cada hora a "y cinco" |
Todos los valores (* ) |
"* 5 * * *" |
cada minuto de la hora empezando a las 5:00 UTC (60 veces al día) |
Un intervalo (operador - ) |
"0 1-3 * * *" |
3 veces al día, a la 1:00, a las 2:00 y a las 3:00 UTC |
Un conjunto de valores (operador , ) |
"20,30,40 * * * *" |
3 veces por hora, a "y veinte", a la media y a "menos veinte" |
Un valor de intervalo (operador / ) |
"*/10 * * * *" |
6 veces por hora, a "y diez", a "y veinte", etc. |
Para especificar meses o días puede usar valores numéricos, nombres o abreviaturas de nombres:
- En el caso de los días, los valores numéricos van de 0 a 6, donde 0 empieza por el domingo.
- Los nombres están en inglés. Por ejemplo:
Monday
,January
. - Los nombres no distinguen mayúsculas de minúsculas.
- Los nombres se pueden abreviar. Se recomienda usar tres letras para las abreviaturas. Por ejemplo:
Mon
,Jan
.
Ejemplos Cron
Ejemplo | Cuándo se desencadena |
---|---|
"*/5 * * * *" |
Una vez cada cinco minutos |
"0 * * * *" |
Una vez al principio de cada hora |
"0 */2 * * *" |
Una vez cada dos horas |
"0 9-17 * * *" |
una vez cada hora de las 9:00 a las 17:00 UTC |
"30 9 * * *" |
a las 9:30 UTC todos los días |
"30 9 * * 1-5" |
a las 9:30 UTC todos los días laborables |
"30 9 * Jan Mon" |
a las 9:30 UTC todos los lunes de enero |
Limpieza de recursos
Para quitar todos los recursos que ha creado en esta serie de tutoriales, incluido el registro o los registros de contenedor, la instancia de contenedor, el almacén de claves y la entidad de servicio, ejecute los comandos siguientes:
az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull
Pasos siguientes
En este tutorial, ha aprendido a crear tareas de Azure Container Registry que se desencadenan automáticamente con un temporizador.
Para ver un ejemplo del uso de una tarea programada para limpiar los repositorios de un registro, consultePurga automática de imágenes a partir de una instancia de Azure Container Registry.
Para ver ejemplos de tareas desencadenadas por confirmaciones de código fuente o actualizaciones de imágenes base, consulte otros artículos de la serie de tutoriales de ACR Tasks.