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

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:

  • Para los días, los valores numéricos van de 0 a 6, donde 0 comienza con 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. La longitud recomendada para la abreviatura es de tres letras. 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.