Compartir a través de


Ejecuciones de la canalización

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

En este artículo se explica la secuencia de actividades en las ejecuciones de canalización de Azure Pipelines. Una ejecución representa una ejecución de una canalización. Las canalizaciones de integración continua (CI) y entrega continua (CD) constan de ejecuciones. Durante una ejecución, Azure Pipelines procesa la canalización y los agentes procesan uno o varios trabajos, pasos y tareas.

Diagrama que muestra una introducción a la canalización.

Para cada ejecución, Azure Pipelines:

  • Procesa la canalización.
  • Solicita a uno o varios agentes que ejecuten trabajos.
  • Entrega trabajos a agentes y recopila los resultados.

Para cada trabajo, un agente:

  • Se prepara para el trabajo.
  • Ejecuta cada paso del trabajo.
  • Informa de los resultados.

Es posible que los trabajos se realicen correctamente, produzcan errores, se cancelen o no se completen. Comprender estos resultados puede ayudarle a solucionar problemas.

En las secciones siguientes se describe el proceso de ejecución de canalización en detalle.

Procesamiento de canalización

Diagrama que muestra la expansión de plantillas YAML.

Para procesar una canalización para una ejecución, Azure Pipelines primero:

  1. Expande plantillas y evalúa expresiones de plantilla.
  2. Evalúa las dependencias en el nivel de fase para elegir la primera fase que se va a ejecutar.

Para cada fase, selecciona ejecutar, Azure Pipelines:

  1. Recopila y valida todos los recursos de trabajo para que se ejecute la autorización .
  2. Evalúa las dependencias en el nivel de trabajo para elegir el primer trabajo que se va a ejecutar.

Azure Pipelines realiza las siguientes actividades para cada trabajo que selecciona para ejecutar:

  1. Expande YAML strategy: matrix o strategy: parallel configuraciones múltiples en varios trabajos en tiempo de ejecución.
  2. Evalúa las condiciones para decidir si el trabajo es apto para ejecutarse.
  3. Solicita un agente para cada trabajo apto.

A medida que se completan los trabajos en tiempo de ejecución, Azure Pipelines comprueba si hay nuevos trabajos aptos para ejecutarse. De forma similar, a medida que se completen las fases, Azure Pipelines comprueba si hay más fases.

Variables

Comprender el orden de procesamiento aclara por qué no se pueden usar determinadas variables en los parámetros de plantilla. El primer paso de expansión de plantillas solo funciona en el texto del archivo YAML. Las variables en tiempo de ejecución aún no existen durante ese paso. Después de ese paso, los parámetros de plantilla ya se resuelven.

Tampoco puede usar variables para resolver nombres de entorno o conexión de servicio, ya que la canalización autoriza los recursos antes de que una fase pueda empezar a ejecutarse. Las variables de nivel de trabajo y de fase aún no están disponibles. Los grupos de variables son ellos mismos un recurso sujeto a la autorización, por lo que sus datos no están disponibles al comprobar la autorización de recursos.

Puede usar variables de nivel de canalización que se incluyen explícitamente en la definición de recursos de canalización. Para más información, consulte Metadatos de recursos de canalización como variables predefinidas.

Agentes

Cuando Azure Pipelines necesita ejecutar un trabajo, solicita un agente del grupo. El proceso funciona de forma diferente para los grupos de agentes autohospedados y hospedados por Microsoft.

Nota:

Los trabajos de servidor no usan un grupo porque se ejecutan en el propio servidor de Azure Pipelines.

Diagrama que muestra la selección del grupo.

Trabajos paralelos

En primer lugar, Azure Pipelines comprueba los trabajos paralelos de la organización. El servicio agrega todos los trabajos en ejecución en todos los agentes y lo compara con el número de trabajos paralelos concedidos o comprados.

Si no hay ranuras paralelas disponibles, el trabajo tiene que esperar a que una ranura se libere. Una vez disponible una ranura paralela, el trabajo se enruta al tipo de agente adecuado.

Agentes hospedado por Microsoft

Conceptualmente, el grupo hospedado por Microsoft es un grupo global de máquinas, aunque es físicamente muchos grupos diferentes divididos por geografía y tipo de sistema operativo. En función del nombre del grupo de editores yaml vmImage o clásico solicitado, Azure Pipelines selecciona un agente.

Todos los agentes del grupo de Microsoft son nuevas y nuevas máquinas virtuales (VM) que nunca han ejecutado ninguna canalización. Cuando se completa el trabajo, se descarta la máquina virtual del agente.

Agentes autohospedados

Una vez disponible una ranura paralela, Azure Pipelines examina el grupo autohospedado para un agente compatible. Los agentes autohospedados ofrecen funcionalidades que indican que el software concreto está instalado o configurado. La canalización tiene demandas, que son las funcionalidades necesarias para ejecutar el trabajo.

Si Azure Pipelines no puede encontrar un agente gratuito cuyas funcionalidades coincidan con las demandas de la canalización, el trabajo continúa esperando. Si no hay ningún agente en el grupo cuyas funcionalidades coincidan con las demandas, se produce un error en el trabajo.

Normalmente, los agentes autohospedados suelen reutilizarse de una ejecución a otra. En el caso de los agentes autohospedados, un trabajo de canalización puede tener efectos secundarios, como calentar cachés o tener la mayoría de confirmaciones ya disponibles en el repositorio local.

Preparación del trabajo

Una vez que un agente acepta un trabajo, realiza el siguiente trabajo de preparación:

  1. Descarga todas las tareas necesarias para ejecutar el trabajo y las almacena en caché para su uso futuro.
  2. Crea espacio de trabajo en el disco para contener el código fuente, los artefactos y las salidas usados en la ejecución.

Ejecución de pasos

El agente ejecuta los pasos secuencialmente en orden. Antes de que se pueda iniciar un paso, se deben finalizar o omitir todos los pasos anteriores.

Diagrama que muestra la ejecución de cada tarea.

Las tareas implementan los pasos, que se pueden Node.js, PowerShell u otros scripts. El sistema de tareas enruta las entradas y salidas a los scripts de respaldo. Las tareas también proporcionan servicios comunes, como modificar la ruta del sistema y crear nuevas variables de canalización.

Cada paso se ejecuta en su propio proceso, aislando su entorno de los pasos anteriores. Debido a este modelo de proceso por paso, las variables de entorno no se conservan entre los pasos. Sin embargo, las tareas y los scripts pueden usar un mecanismo denominado comandos de registro para comunicarse con el agente. Cuando una tarea o script escribe un comando de registro en la salida estándar, el agente realiza cualquier acción que solicite el comando.

Puede usar un comando de registro para crear nuevas variables de canalización. Las variables de canalización se convierten automáticamente en variables de entorno en el paso siguiente. Un script puede establecer una nueva variable myVar con un valor de myValue como se indica a continuación:

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

Generación de informes y recopilación de resultados

Cada paso puede notificar advertencias, errores y fallos. El paso notifica errores y advertencias en la página de resumen de la canalización marcando las tareas como realizadas correctamente con problemas o notifica errores marcando la tarea como errónea. Se produce un error en un paso si notifica explícitamente un error mediante un ##vso comando o finaliza el script con un código de salida distinto de cero.

A medida que se ejecutan los pasos, el agente envía constantemente líneas de salida a Azure Pipelines, por lo que puede ver una fuente en directo de la consola. Al final de cada paso, la salida completa del paso se carga como un archivo de registro. Puede descargar el registro una vez finalizada la canalización.

Diagrama que muestra cómo fluyen los registros y los resultados del agente al servicio.

El agente también puede cargar artefactos y resultados de pruebas, que también están disponibles una vez completada la canalización.

Estado y condiciones

El agente realiza un seguimiento del éxito o error de cada paso. A medida que los pasos se realizan correctamente con problemas o con errores, el estado del trabajo se actualiza. El trabajo siempre refleja el peor resultado de cada uno de sus pasos. Si se produce un error en un paso, también se produce un error en el trabajo.

Antes de que el agente ejecute un paso, comprueba la condición de ese paso para determinar si se debe ejecutar el paso. De forma predeterminada, un paso solo se ejecuta cuando el estado del trabajo se realiza correctamente o se realiza correctamente con problemas, pero puede establecer otras condiciones.

Muchos trabajos tienen pasos de limpieza que deben ejecutarse independientemente de lo que suceda, por lo que pueden especificar una condición de always(). La limpieza u otros pasos también se pueden establecer para ejecutarse solo en la cancelación.

Un paso de limpieza correcto no puede guardar el trabajo en caso de error. Los trabajos nunca pueden volver a ser correctos después de entrar en error.

Tiempos de espera y desconexiones

Cada trabajo tiene un tiempo de espera. Si el trabajo no se completa en la hora especificada, el servidor cancela el trabajo. El servidor intenta indicar al agente que se va a detener y marca el trabajo como cancelado. En el lado del agente, la cancelación significa cancelar todos los pasos restantes y cargar los resultados restantes.

Los trabajos tienen un período de gracia denominado tiempo de espera de cancelación en el que completar cualquier trabajo de cancelación. También puede marcar los pasos para ejecutarse incluso en la cancelación. Después de un tiempo de espera de trabajo más un tiempo de espera de cancelación, si el agente no informa de que se detiene el trabajo, el servidor marca el trabajo como un error.

Las máquinas del agente pueden dejar de responder al servidor si la máquina host del agente pierde energía o está desactivada, o si se produce un error de red. Para ayudar a detectar estas condiciones, el agente envía un mensaje de latido una vez por minuto para que el servidor sepa que sigue funcionando.

Si el servidor no recibe un latido durante cinco minutos consecutivos, supone que el agente no vuelve. El trabajo se marca como un error, lo que permite al usuario saber que debe reintentar la canalización.

Administración de ejecuciones a través de la CLI de Azure DevOps

Puede administrar las ejecuciones de canalización mediante az pipelines runs en la CLI de Azure DevOps. Para empezar, consulte Introducción a la CLI de Azure DevOps. Para obtener una referencia de comandos completa, consulte Referencia de comandos de la CLI de Azure DevOps.

En los ejemplos siguientes se muestra cómo usar la CLI de Azure DevOps para enumerar las ejecuciones de canalización en el proyecto, ver detalles sobre una ejecución específica y administrar etiquetas para ejecuciones de canalización.

Requisitos previos

  • CLI de Azure con la extensión de la CLI de Azure DevOps instalada como se describe en Introducción a la CLI de Azure DevOps. Inicie sesión en Azure mediante az login.
  • La organización predeterminada establecida mediante az devops configure --defaults organization=<YourOrganizationURL>.

Enumerar ejecuciones de canalización

Enumere las ejecuciones de canalización en el proyecto con el comando az pipelines runs list.

El siguiente comando enumera las tres primeras ejecuciones de canalización que tienen un estado completado y un resultado de correcto y devuelve el resultado en formato de tabla.

az pipelines runs list --status completed --result succeeded --top 3 --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  ------
125       20200124.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 18:56:10.067588  manual
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual
122       20200123.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:48:05.574742  manual

Mostrar detalles de ejecución de canalización

Muestre los detalles de una ejecución de canalización en el proyecto con el comando az pipelines runs show.

El comando siguiente muestra los detalles de la ejecución de canalización con el identificador 123, devuelve los resultados en formato de tabla y abre el explorador web en la página de resultados de compilación de Azure Pipelines.

az pipelines runs show --id 122 --open --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  --------
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual

Adición de una etiqueta a una ejecución de canalización

Agregue una etiqueta a una ejecución de canalización en el proyecto con el comando az pipelines runs tag add .

El siguiente comando agrega la etiqueta YAML a la ejecución de canalización con el identificador 123 y devuelve el resultado en formato JSON.

az pipelines runs tag add --run-id 123 --tags YAML --output json

[
  "YAML"
]

Enumerar etiquetas de ejecución de canalización

Enumere las etiquetas de una ejecución de canalización en el proyecto con el comando az pipelines runs tag list. El siguiente comando muestra las etiquetas para la ejecución de canalización con el identificador 123 y devuelve el resultado en formato de tabla.

az pipelines runs tag list --run-id 123 --output table

Tags
------
YAML

Eliminación de etiquetas de la ejecución de canalización

Elimine una etiqueta de una ejecución de canalización en el proyecto con el comando az pipelines runs tag delete. El siguiente comando elimina la etiqueta YAML de la ejecución de canalización con el identificador 123.

az pipelines runs tag delete --run-id 123 --tag YAML