Desencadenamiento de una canalización después de otra

Los productos grandes tienen varios componentes que dependen entre sí. Estos componentes a menudo se construyen de forma independiente. Cuando cambia un componente ascendente (una biblioteca, por ejemplo), las dependencias de nivel inferior deben volver a compilarse y validarse.

En situaciones como estas, agregue un desencadenador de canalización para ejecutar la canalización tras la finalización correcta de la canalización de desencadenamiento.

Nota

Anteriormente, es posible que haya navegado al editor clásico de la canalización de YAML y haya configurado desencadenadores de finalización de compilación en la interfaz de usuario. Aunque ese modelo sigue funcionando, ya no se recomienda. El enfoque recomendado es especificar los desencadenadores de canalización directamente dentro del archivo YAML. Los desencadenadores de finalización de compilación tal como se definen en el editor clásico tienen varias desventajas, que ahora se han solucionado en los desencadenadores de canalización. Por ejemplo, no hay ninguna manera de desencadenar una canalización en la misma rama que la canalización de desencadenamiento mediante desencadenadores de finalización de compilación.

Configuración de desencadenadores de recursos de canalización

Para desencadenar una canalización tras la finalización de otra canalización, especifique la canalización de desencadenamiento como un recurso de canalización.

El ejemplo siguiente tiene dos canalizaciones: (la canalización definida por el fragmento de código YAML) y (la canalización de desencadenamiento a la que hace referencia app-cisecurity-lib-ci el recurso de canalización). Queremos que la app-ci canalización se ejecute automáticamente cada vez que se compila una nueva versión de security-lib-ci .

# this is being defined in app-ci pipeline
resources:
  pipelines:
  - pipeline: securitylib   # Internal name of the source pipeline, used elsewhere within app-ci YAML 
                            # e.g. to reference published artifacts
    source: security-lib-ci # Azure Pipelines name of the source pipeline referenced
    project: FabrikamProject # Required only if the source pipeline is in another project
    trigger: true # Run app-ci pipeline when any run of security-lib-ci completes
  • pipeline: securitylib especifica el nombre del recurso de canalización y se usa al hacer referencia al recurso de canalización desde otras partes de la canalización, como las variables de recursos de canalización.

  • source: security-lib-ci especifica el nombre de la canalización a la que hace referencia este recurso de canalización. Puede recuperar el nombre de una canalización desde Azure DevOps portal en varios lugares, como la página de Pipelines de aterrizaje. De forma predeterminada, las canalizaciones tienen el nombre del repositorio que contiene la canalización. Para actualizar el nombre de una canalización, consulte Configuración de canalización.

  • project: FabrikamProject- Si la canalización de desencadenamiento está en Azure DevOps proyecto, debe especificar el nombre del proyecto. Esta propiedad es opcional si tanto la canalización de origen como la canalización desencadenada están en el mismo proyecto.

  • trigger: true - Use esta sintaxis para desencadenar la canalización cuando se complete cualquier versión de la canalización de origen. Consulte las secciones siguientes de este artículo para obtener información sobre cómo filtrar qué versiones de la canalización de origen completa desencadenarán una ejecución. Cuando se especifican filtros, la ejecución de la canalización de origen debe coincidir con todos los filtros para desencadenar una ejecución.

Si la canalización de desencadenamiento y la canalización desencadenada usan el mismo repositorio, ambas canalizaciones se ejecutarán con la misma confirmación cuando una desencadene la otra. Esto resulta útil si la primera canalización compila el código y la segunda canalización lo prueba. Sin embargo, si las dos canalizaciones usan repositorios diferentes, la canalización desencadenada usará la versión del código de la rama especificada por la opción Rama predeterminada para compilaciones manuales y programadas, como se describe en la sección Consideraciones de rama para desencadenadores de finalización de canalización.

Filtros de rama

Opcionalmente, puede especificar las ramas que se incluirán o excluirán al configurar el desencadenador. Si especifica filtros de rama, se desencadena una nueva canalización cada vez que se completa correctamente una ejecución de canalización de origen que coincide con los filtros de rama. En el ejemplo siguiente, la app-ci canalización se ejecuta si se completa en cualquier security-lib-cireleases/* rama, excepto para releases/old* .

# this is being defined in app-ci pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
        include: 
        - releases/*
        exclude:
        - releases/old*

Nota

Si los filtros de rama no funcionan, pruebe a usar el prefijo refs/heads/ . Por ejemplo, use refs/heads/releases/old* en lugar de releases/old* .

Filtros de etiquetas

Nota

La compatibilidad con el filtro de etiquetas para los recursos de canalización Azure DevOps Server 2020 Update 1 o superior.

Propiedad tags de los filtros que los eventos de finalización de canalización pueden desencadenar la trigger canalización. Si la canalización de desencadenamiento coincide con todas las etiquetas de la tags lista, se ejecuta la canalización.

resources:
  pipelines:
  - pipeline: MyCIAlias
    source: Farbrikam-CI
    trigger:
      tags:        # This filter is used for triggering the pipeline run
      - Production # Tags are AND'ed
      - Signed

Nota

El recurso de canalización también tiene una tags propiedad . La propiedad del recurso de canalización se usa para determinar de qué canalización se ejecuta para recuperar artefactos, cuándo se desencadena la canalización manualmente o mediante tags un desencadenador programado. Para obtener más información, vea Recursos: canalizaciones y Evaluación de la versión del artefacto.

Filtros de fase

Puede desencadenar la canalización cuando se completen una o varias fases de la canalización de desencadenamiento mediante el stages filtro . Si proporciona varias fases, la canalización desencadenada se ejecuta cuando se completan todas las fases enumeradas.

resources:
  pipelines:
  - pipeline: MyCIAlias  
    source: Farbrikam-CI  
    trigger:    
      stages:         # This stage filter is used when evaluating conditions for 
      - PreProduction # triggering your pipeline. On successful completion of all the stages
      - Production    # provided, your pipeline will be triggered. 

Consideraciones de rama

Los desencadenadores de finalización de canalización usan la opción Rama predeterminada para compilaciones manuales y programadas para determinar qué versión de rama de los filtros de rama de una canalización de YAML se va a evaluar al determinar si se debe ejecutar una canalización como resultado de la finalización de otra canalización. De forma predeterminada, esta configuración apunta a la rama predeterminada del repositorio.

Cuando se completa una canalización, Azure DevOps runtime evalúa los filtros de rama del desencadenador de recursos de canalización de cualquier canalización con desencadenadores de finalización de canalización que hacen referencia a la canalización completada. Una canalización puede tener varias versiones en distintas ramas, por lo que el tiempo de ejecución evalúa los filtros de rama en la versión de la canalización en la rama especificada por la rama Predeterminada para la configuración de compilaciones manuales y programadas. Si hay una coincidencia, la canalización se ejecuta, pero la versión de la canalización que se ejecuta puede estar en una rama diferente en función de si la canalización desencadenada está en el mismo repositorio que la canalización completada.

  • Si las dos canalizaciones están en repositorios diferentes, se ejecuta la versión de canalización desencadenada en la rama especificada por rama predeterminada para compilaciones manuales y programadas.
  • Si las dos canalizaciones están en el mismo repositorio, se ejecuta la versión de canalización desencadenada en la misma rama que la canalización de desencadenamiento, incluso si esa rama es diferente de la rama predeterminada para las compilaciones manuales y programadas,e incluso si esa versión no tiene filtros de rama que coincidan con la rama de la canalización completada. Esto se debe a que los filtros de rama de la rama Predeterminada para las compilaciones manuales y programadas se usan para determinar si se debe ejecutar la canalización y no los filtros de rama de la versión que se encuentra en la rama de canalización completada.

Si los desencadenadores de finalización de canalización no parecen activarse, compruebe el valor de la rama Predeterminada para la configuración de compilaciones manuales y programadas para la canalización desencadenada. Los filtros de rama de la versión de esa rama de la canalización se usan para determinar si el desencadenador de finalización de canalización inicia una ejecución de la canalización. De forma predeterminada, la rama predeterminada para compilaciones manuales y programadas se establece en la rama predeterminada del repositorio, pero puede cambiarla después de crear la canalización.

Un escenario típico en el que el desencadenador de finalización de canalización no se activa es cuando se crea una nueva rama, los filtros de rama del desencadenador de finalización de canalización se modifican para incluir esta nueva rama, pero cuando la primera canalización se completa en una rama que coincide con los filtros de rama nueva, la segunda canalización no se desencadena. Esto sucede si los filtros de rama en la versión de canalización de la rama Predeterminada para la rama de compilaciones manuales y programadas no coinciden con la nueva rama. Para resolver este problema de desencadenador, tiene las dos opciones siguientes.

  • Actualice los filtros de rama de la canalización en la rama Predeterminada para la rama de compilaciones manuales y programadas para que coincidan con la nueva rama.
  • Actualice la opción Rama predeterminada para compilaciones manuales y programadas a una rama que tenga una versión de la canalización con los filtros de rama que coincidan con la nueva rama.

Rama predeterminada para la configuración de compilaciones manuales y programadas

Para ver y actualizar la opción Rama predeterminada para compilaciones manuales y programadas:

  1. Vaya a los detalles de la canalización y elija Editar.

    Editar canalización.

  2. Elija ... y seleccione Desencadenadores.

    Editar desencadenadores.

  3. Seleccione YAML,Obtener orígenesy vea la opción Rama predeterminada para compilaciones manuales y programadas. Si lo cambia, elija Guardar o Guardar cola para guardar el cambio.

    Rama predeterminada para la configuración de compilaciones manuales y programadas.

Combinación de tipos de desencadenador

Al especificar los desencadenadores de CI y los desencadenadores de canalización en la canalización, puede esperar que se inician nuevas ejecuciones cada vez que se realiza una inserción que coincide con los filtros del desencadenador de CI y se completa una ejecución de la canalización de origen que coincide con los filtros del desencadenador de finalización de canalización.

Por ejemplo, considere dos canalizaciones denominadas y que se encuentran en el mismo repositorio, ambas tienen desencadenadores de CI y tienen un desencadenador de finalización de canalización configurado para la finalización AB de la canalización BA . Si realiza una inserción en el repositorio:

  • Se inicia una nueva ejecución A de , en función de su desencadenador de CI.
  • Al mismo tiempo, se inicia una nueva ejecución de B , en función de su desencadenador de CI. Esta ejecución consume los artefactos de una ejecución anterior de la canalización A .
  • Cuando se completa, desencadena otra ejecución de , en A función del desencadenador de finalización de canalización en BB .

Para evitar que se desencadene dos ejecuciones de en B este ejemplo, debe quitar su desencadenador de CI o desencadenador de canalización.