Automatización del inicio de las canalizaciones mediante desencadenadores y filtrado - AWS CodePipeline

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Automatización del inicio de las canalizaciones mediante desencadenadores y filtrado

Los desencadenadores permiten configurar la canalización para que se inicie con un tipo de evento concreto o filtrado, por ejemplo, cuando se detecta un cambio en una ramificación específica o en una solicitud de extracción. Los activadores se pueden configurar para las acciones de origen con conexiones que utilizan la CodeStarSourceConnection acción en CodePipeline, por ejemplo GitHub, Bitbucket y GitLab. Para obtener más información acerca de las acciones de origen que utilizan conexiones, consulte Agregación de proveedores de origen de terceros a las canalizaciones mediante CodeConnections.

Las acciones de origen, como CodeCommit S3, utilizan la detección automática de cambios para iniciar los procesos cuando se realiza un cambio. Para obtener más información, consulte CodeCommit acciones de origen y EventBridge.

Puede especificar desencadenadores mediante la consola o la CLI.

Los tipos de filtros se especifican de la siguiente manera:

  • Sin filtro

    Esta configuración de desencadenador inicia la canalización con cualquier inserción a la ramificación predeterminada especificada como parte de la configuración de la acción.

  • Especificar filtro

    Añada un filtro que inicie la canalización con un filtro específico, por ejemplo, en los nombres de las ramificaciones de una inserción de código, y obtenga la confirmación exacta. Esto también configura la canalización para que no se inicie automáticamente cuando se produzcan cambios.

    • Inserción

      • Las combinaciones de filtros válidas son las siguientes:

        • Etiquetas de Git

          Include o exclude

        • sucursales

          Include o exclude

        • ramas + rutas de archivos

          Include o exclude

    • Solicitud de extracción

      • Las combinaciones de filtros válidas son las siguientes:

        • ramas

          Include o exclude

        • ramas + rutas de archivos

          Include o exclude

  • No detectar cambios

    Este tipo de filtro no añade ningún desencadenador y la canalización no se inicia automáticamente aunque se produzcan cambios.

La siguiente tabla proporciona opciones de filtro válidas para cada tipo de evento. En la tabla también se muestran qué configuraciones de desencadenador son verdaderas o falsas de forma predeterminada para la detección automática de cambios en la configuración de la acción.

Configuración de desencadenadores Tipo de evento Opciones de filtro Detección de cambios
Agregar un desencadenador, sin filtro none none true
Agregar un desencadenador: filtrar en la inserción de código evento de inserción Etiquetas de Git, ramificaciones, rutas de archivo false
Agregar un desencadenador: filtrar las solicitudes de inserción solicitudes de extracción ramificaciones, rutas de archivo false
Sin desencadenador: no detectar none none false
nota

Este tipo de desencadenador utiliza la detección automática de cambios (como el tipo de desencadenador Webhook). Los proveedores de acciones fuente que utilizan este tipo de activador son conexiones configuradas para la inserción de código (Bitbucket Cloud GitHub, GitHub Enterprise Server, GitLab .com y GitLab autogestionadas).

Para ver las definiciones de los campos y más referencias sobre los desencadenadores, consulte

Para obtener una lista de las definiciones de campos de la estructura JSON, consulte triggers.

Para el filtrado, se admiten patrones de expresiones regulares en formato glob, tal y como se detalla en Trabajar con patrones glob en la sintaxis.

nota

En algunos casos, en el caso de las canalizaciones con desencadenadores que se filtran en rutas de archivo, es posible que una canalización no se inicie al crear por primera vez una ramificación con un filtro de ruta de archivo. Para obtener más información, consulte Es posible que las canalizaciones con conexiones que utilicen el filtrado de desencadenadores por rutas de archivo no se inicien al crear la ramificación.

Consideraciones sobre los filtros de desencadenadores

Las siguientes consideraciones se aplican cuando se utilizan desencadenadores.

  • No puede agregar más de un desencadenador por acción de origen.

  • Puede agregar varios tipos de filtros a un desencadenador. Para ver un ejemplo, consulta 4: un desencadenador con dos tipos de filtros de inserción con conflictos de inclusiones y exclusiones.

  • En el caso de un desencadenador con filtros de ramificaciones y rutas de archivo, al insertar la ramificación por primera vez, la canalización no se ejecutará debido a que no se podrá acceder a la lista de archivos modificados para la ramificación recién creada.

  • La fusión de una solicitud de extracción podría desencadenar dos ejecuciones de canalización en los casos en los que las configuraciones de los desencadenadores de solicitudes de inserción (filtro de ramificaciones) y de extracción (filtro de ramificaciones) se cruzasen entre sí.

  • Si un filtro desencadena la canalización con eventos de solicitud de extracción, para un tipo de evento de solicitud de extracción cerrada, es posible que el proveedor de repositorios externo de su conexión tenga un estado diferente para un evento de fusión. Por ejemplo, en Bitbucket, el evento de Git de una fusión no es un evento de cierre de solicitud de extracción. Sin embargo GitHub, si se fusiona una solicitud de extracción, se cierra el proceso. Para obtener más información, consulte Eventos de solicitud de extracción para desencadenadores, por proveedor.

Eventos de solicitud de extracción para desencadenadores, por proveedor

La siguiente tabla proporciona un resumen de los eventos de Git (por ejemplo, para el cierre de solicitudes de extracción) que dan como resultado tipos de eventos de solicitud de extracción, por proveedor.

Proveedor de repositorios de la conexión
Evento PR para el desencadenador Bitbucket GitHub GHES GitLab
Abrir: esta opción desencadena la canalización cuando se crea una solicitud de extracción para la ruta de la ramificación o el archivo. La creación de una solicitud de extracción da como resultado un evento de Git abierto. La creación de una solicitud de extracción da como resultado un evento de Git abierto. La creación de una solicitud de extracción da como resultado un evento de Git abierto. La creación de una solicitud de extracción da como resultado un evento de Git abierto.
Actualizar: esta opción desencadena la canalización cuando se publica una revisión de una solicitud de extracción para la ruta de la ramificación o el archivo. La publicación de una actualización da como resultado un evento de Git actualizado. La publicación de una actualización da como resultado un evento de Git actualizado. La publicación de una actualización da como resultado un evento de Git actualizado. La publicación de una actualización da como resultado un evento de Git actualizado.
Cerrada: esta opción activa la canalización cuando se cierra una solicitud de extracción para la branch/file ruta. La fusión de una solicitud de extracción en Bitbucket produce un evento de Git cerrado. Importante: Si se cierra manualmente una solicitud de extracción en Bitbucket sin fusión, no se produce un evento de Git cerrado. Al fusionar o cerrar manualmente una solicitud de extracción, se produce un evento de Git cerrado. Al fusionar o cerrar manualmente una solicitud de extracción, se produce un evento de Git cerrado. Al fusionar o cerrar manualmente una solicitud de extracción, se produce un evento de Git cerrado.

Ejemplos de filtros de desencadenador

En el caso de una configuración de Git con filtros para los tipos de eventos de solicitudes de inserción y extracción, los filtros especificados pueden entrar en conflicto entre sí. A continuación, se muestran ejemplos de combinaciones de filtros válidas para eventos de solicitudes de inserción y extracción. Un desencadenador puede contener varios tipos de filtros, como dos tipos de filtros de inserción en la configuración del desencadenador, y los tipos de filtro de solicitud de inserción y extracción utilizarán una operación OR entre ellos, lo que significa que cualquier coincidencia iniciará la canalización. Del mismo modo, cada tipo de filtro puede incluir varios filtros, como filePaths y ramificaciones; dichos filtros utilizarán una operación AND, lo que significa que solo una coincidencia completa iniciará la canalización. Cada tipo de filtro incluye inclusiones y exclusiones, y dichos filtros utilizarán una operación AND entre ellas, lo que significa que solo una coincidencia completa iniciará la canalización. Los nombres incluidos en la opción de inclusión/exclusión, como los nombres de las ramificaciones, utilizan una operación OR. Si hay un conflicto, por ejemplo, entre dos filtros de inserción, como si uno incluye la ramificación main y el otro la excluye, el comportamiento predeterminado es la exclusión. La siguiente lista resume las operaciones de cada parte del objeto de configuración de Git.

Para obtener una lista de las definiciones de campos de la estructura JSON y una referencia detallada de las inclusiones y exclusiones, consulte triggers.

ejemplo 1: un tipo de filtro con filtros para las ramificaciones y las rutas de archivo (operación AND)

En el caso de tipos de filtro únicos, como el de solicitud de extracción, se pueden combinar los filtros; dichos filtros utilizarán una operación AND, lo que significa que solo una coincidencia completa iniciará la canalización. En el siguiente ejemplo se muestra una configuración de Git para un tipo de evento de inserción con dos filtros diferentes (filePaths y branches). En el siguiente ejemplo, filePaths utilizará la operación AND con branches:

{ "filePaths": { "includes": ["common/**/*.js"] }, "branches": { "includes": ["feature/**"] } }

Con la configuración de Git anterior, este ejemplo muestra un evento que iniciará la ejecución de la canalización, ya que la operación AND se realiza correctamente. En otras palabras, se incluye la ruta del archivo common/app.js para el filtro, que inicia la canalización como AND aunque la ramificación refs/heads/feature/triggers especificada no haya tenido ningún impacto.

{ "ref": "refs/heads/feature/triggers", ... "commits": [ { ... "modified": [ "common/app.js" ] ... } ] }

En este ejemplo, se muestra un evento para un desencadenador con la configuración anterior que no iniciará la ejecución de la canalización debido a que se puede filtrar por ramificación pero no por ruta.

{ "ref": "refs/heads/feature/triggers", ... "commits": [ { ... "modified": [ "src/Main.java" ] ... } ] }
ejemplo 2: las inclusiones y exclusiones utilizan una operación AND entre ellas

Los filtros de desencadenador, como los de ramificación en un solo tipo de evento de solicitud de extracción, utilizan una operación AND entre las inclusiones y exclusiones. Esto permite configurar varios desencadenadores para iniciar la ejecución en la misma canalización. En el siguiente ejemplo se muestra una configuración de desencadenador con un único tipo de filtro (branches) en el objeto de configuración para un evento de inserción. Las operaciones Includes y Excludes utilizarán AND, lo que significa que, si una ramificación coincide con un patrón de exclusión (como feature-branch en el ejemplo), la canalización no se desencadenará a menos que también coincida una inclusión. Si el patrón de inclusión coincide, como en el caso de la ramificación main, se desencadenará la canalización.

En el siguiente ejemplo de JSON:

  • La inserción de una confirmación para la ramificación main desencadenará la canalización.

  • La inserción de una confirmación para la ramificación feature-branch no desencadenará la canalización.

{ "branches": { "Includes": [ "main" ], "Excludes": [ "feature-branch" ] }
ejemplo 3: Un disparador con tipos de filtros de solicitud de inserción y extracción (operación OR), filtros para rutas y ramas de archivos (operación AND) y includes/excludes (operación AND)

Los objetos de configuración de los desencadenadores, como un desencadenador que contenga un tipo de evento de inserción y un tipo de evento de solicitud de extracción, utilizan una operación OR entre los dos tipos de eventos. En el siguiente ejemplo, se muestra una configuración de desencadenador con un tipo de evento de inserción con la ramificación main incluida y un tipo de evento de solicitud de extracción con la misma ramificación main excluida. Además, el tipo de evento de inserción tiene una ruta de archivo LICENSE.txt excluida y una ruta de archivo README.MD incluida. Para el segundo tipo de evento, una solicitud de extracción Closed o Created en la ramificación feature-branch (incluida) inicia la canalización, y la canalización no se inicia al crear o cerrar una solicitud de extracción en las ramificaciones feature-branch-2 o main (excluidas). En las operaciones Includes y Excludes se aplicará AND, con un conflicto que resulta de manera predeterminada en la exclusión. Por ejemplo, para un evento de solicitud de extracción en la ramificación feature-branch (incluida para la solicitud de extracción), si la ramificación feature-branch está excluida para el tipo de evento de inserción, el comportamiento predeterminado será la exclusión.

En el ejemplo siguiente:

  • La inserción de una confirmación en la ramificación main (incluida) para la ruta del archivo README.MD (incluida), se desencadenará la canalización.

  • En la ramificación feature-branch (excluida), la inserción de una confirmación no desencadenará la canalización.

  • En la ramificación incluida, la edición de la ruta del archivo README.MD (incluida) desencadena la canalización.

  • En la ramificación incluida, la edición de la ruta del archivo LICENSE.TXT (excluida) no desencadena la canalización.

  • En la ramificación feature-branch, el cierre de una solicitud de extracción para la ruta del archivo README.MD (incluida para el evento de inserción) no desencadenará la canalización, ya que el tipo de evento de inserción especifica la ramificación feature-branch como excluida y, por lo tanto, el conflicto se resuelve de forma predeterminada con la exclusión.

En la siguiente imagen se muestra la configuración.

Ejemplo de configuración de desencadenador con un tipo de filtro de inserción y un tipo de filtro de solicitud de extracción

A continuación, se muestra el código JSON de ejemplo de la configuración.

"triggers": [ { "providerType": "CodeStarSourceConnection", "gitConfiguration": { "sourceActionName": "Source", "push": [ { "branches": { "includes": [ "main" ], "excludes": [ "feature-branch", "feature-branch-2" ] }, "filePaths": { "includes": [ "README.md" ], "excludes": [ "LICENSE.txt" ] } } ], "pullRequest": [ { "events": [ "CLOSED", "OPEN" ], "branches": { "includes": [ "feature-branch" ], "excludes": [ "feature-branch-2", "main" ] } } ] } } ] },
ejemplo 4: un desencadenador con dos tipos de filtros de inserción con conflictos de inclusiones y exclusiones

En la siguiente imagen, se muestra un tipo de filtro de inserción que especifica el filtro en la etiqueta release-1 (incluida). Se ha añadido un segundo tipo de filtro de inserción que especifica que se debe filtrar por la ramificación main (incluida) y no iniciarse si se produce una inserción para las ramificaciones feature* (excluidas).

Para el ejemplo siguiente:

  • Si se inserta una versión desde la etiqueta release-1 (incluida para el primer filtro de inserción) para la ramificación feature-branch (excluida como feature* para el segundo filtro de inserción), no se desencadenará la canalización, ya que se aplicará AND a los dos tipos de eventos.

  • Si se inserta una versión desde la ramificación main (incluida para el segundo filtro de inserción), se iniciará la canalización.

En el siguiente ejemplo de la página de edición, se muestran los dos tipos de filtros de inserción y su configuración para inclusiones y exclusiones.

Ejemplo de configuración de desencadenador con un tipo de filtro de inserción que incluye la etiqueta release-1 y un tipo de filtro de inserción que incluye la ramificación main* y excluye las ramificaciones feature*

A continuación, se muestra el código JSON de ejemplo de la configuración.

"triggers": [ { "providerType": "CodeStarSourceConnection", "gitConfiguration": { "sourceActionName": "Source", "push": [ { "tags": { "includes": [ "release-1" ] } }, { "branches": { "includes": [ "main*" ], "excludes": [ "feature*" ] } } ] } } ] },
ejemplo 5: El disparador está configurado mientras que la configuración de acción predeterminada BranchName se utiliza para un inicio manual

El campo predeterminado de configuración de acciones BranchName define la ramificación que se usará cuando la canalización se inicie manualmente, mientras que se pueden usar desencadenadores con filtros para cualquier ramificación o ramificaciones que especifique.

A continuación, se muestra el código JSON de ejemplo para la configuración de acciones con el campo BranchName.

{ "name": "Source", "actions": [ { "name": "Source", "actionTypeId": { "category": "Source", "owner": "AWS", "provider": "CodeStarSourceConnection", "version": "1" }, "runOrder": 1, "configuration": { "BranchName": "main", "ConnectionArn": "ARN", "DetectChanges": "false", "FullRepositoryId": "owner-name/my-bitbucket-repo", "OutputArtifactFormat": "CODE_ZIP" }, "outputArtifacts": [ { "name": "SourceArtifact" } ], "inputArtifacts": [], "region": "us-west-2", "namespace": "SourceVariables" } ],

El siguiente ejemplo de salida de acción muestra que se utilizó la ramificación main predeterminada cuando la canalización se inició manualmente.

Ejemplo de página de salida de acción para una canalización iniciada manualmente

En el siguiente ejemplo de salida de acción, se muestra la solicitud de extracción y la ramificación que se utilizó para el desencadenador cuando se filtró por solicitud de extracción.

Ejemplo de página de salida de acción para una canalización iniciada con un tipo de filtro de solicitud de extracción para el desencadenador