Automatiser les compilations en réponse aux événements Pub/Sub

Les déclencheurs Cloud Build Pub/Sub vous permettent d'exécuter des compilations en réponse aux événements Google Cloud publiés sur Pub/Sub. Vous pouvez utiliser les informations d'un événement Pub/Sub pour paramétrer votre compilation et déterminer si une compilation doit s'exécuter en réponse à l'événement. Les déclencheurs Pub/Sub peuvent être configurés pour écouter n'importe quel sujet Pub/Sub.

Cette page vous explique comment créer un déclencheur Pub/Sub qui automatise les compilations en réponse aux événements sur Artifact Registry, Container Registry et Cloud Storage.

Avant de commencer

  • Activez l'API Cloud Build

    Activer l'API

  • Assurez-vous que votre code source contient un fichier de configuration de compilation ou un Dockerfile dans le dépôt.
  • Pour utiliser les commandes gcloud sur cette page, installez la CLI Google Cloud.

Créer un déclencheur de compilation qui répond aux événements Artifact Registry

Vous pouvez créer un déclencheur Pub/Sub qui répond aux événements Artifact Registry tels que le moment où les images sont stockées, taguées ou supprimées. Cette section explique comment créer un déclencheur Pub/Sub qui appelle une compilation lorsqu'un nouveau tag est transféré vers une image existante. Si vous ne connaissez pas Artifact Registry, consultez la présentation d'Artifact Registry.

Console

Pour créer un déclencheur qui écoute un nouveau tag transféré vers une image existante dans Artifact Registry à l'aide de Google Cloud Console:

  1. Ouvrez la page Déclencheurs :

    Ouvrir la page Déclencheurs

  2. Sélectionnez votre projet en haut de la page, puis cliquez sur Ouvrir.

  3. Cliquez sur Créer un déclencheur.

  4. Entrez les paramètres de déclencheur suivants :

    • Nom : saisissez le nom de votre déclencheur.
    • Région: sélectionnez la région de votre déclencheur.

      • Si vous sélectionnez global comme région, Cloud Build utilise le pool par défaut pour exécuter votre compilation.
      • Si vous sélectionnez une région non globale et que le fichier de configuration de compilation associé au déclencheur spécifie un pool privé, Cloud Build utilise le pool privé pour exécuter votre compilation. Dans ce cas, la région spécifiée dans votre déclencheur doit correspondre à celle dans laquelle vous avez créé votre pool privé.
      • Si vous sélectionnez une région non globale et que le fichier de configuration de compilation associé au déclencheur ne spécifie pas de pool privé, Cloud Build utilise le pool par défaut pour exécuter votre compilation dans la même région que votre déclencheur.
    • Description (facultative) : saisissez une description du déclencheur.

    • Événement: sélectionnez Message Pub/Sub comme événement pour appeler votre déclencheur.

    • Abonnement : Sélectionnez le sujet Pub/Sub auquel vous souhaitez vous abonner comme l'événement déclencheur. Tous les sujets existants dans votre projet s'affichent dans le menu déroulant.

    • Source : sélectionnez le dépôt à compiler lorsque le déclencheur est exécuté.

    • Révision : sélectionnez la branche ou le tag à compiler lorsque le déclencheur est exécuté.

      • Branche: saisissez le nom de la branche sur laquelle appeler votre compilation.
      • Tag: saisissez le nom du tag sur lequel appeler votre compilation.
    • Configuration: sélectionnez le fichier de configuration de compilation (situé dans votre dépôt distant) ou créez un fichier de configuration de compilation intégré à utiliser pour votre compilation.

      • Type: sélectionnez le type de configuration à utiliser pour votre compilation.
        • Fichier de configuration Cloud Build (yaml or json) : utilisez un fichier de configuration de compilation pour votre configuration.
        • Dockerfile: utilisez un fichier Dockerfile pour votre configuration.
        • Buildpacks: utilisez des packs de création pour votre configuration.
      • Emplacement: spécifiez l'emplacement de votre configuration.

        • Repository (Dépôt) Si votre fichier de configuration se trouve dans votre dépôt distant, indiquez l'emplacement de votre fichier de configuration de compilation, le répertoire Dockerfile ou le répertoire packs de création. Si votre type de configuration de compilation est un fichier Dockerfile ou un pack de création, vous devez attribuer un nom à l'image obtenue et, éventuellement, un délai avant expiration pour la compilation. Une fois le nom de l'image Dockerfile ou du pack de création fourni, vous obtenez un aperçu de la commande docker build ou pack que votre compilation va exécuter.
        • Variables d'environnement de pack de création (facultatif): si vous avez sélectionné buildpacks comme type de configuration, cliquez sur Ajouter une variable d'environnement de pack pour spécifier les variables d'environnement et valeurs de votre pack de création. Pour en savoir plus sur les variables d'environnement du pack de création, consultez la section Variables d'environnement.
        • Intégré: si vous avez sélectionné Fichier de configuration Cloud Build (yaml ou json) comme option de configuration, vous pouvez spécifier votre configuration de compilation de manière intégrée. Cliquez sur Open Editor (Ouvrir l'éditeur) pour écrire votre fichier de configuration de compilation dans Google Cloud Console à l'aide de la syntaxe YAML ou JSON. Cliquez sur OK pour enregistrer la configuration de compilation.

    • Substitutions (Facultatif): Si vous avez choisi le fichier de configuration de compilation comme option de configuration de la compilation, vous pouvez choisir de définir des Variables de substitution spécifique à un déclencheur en utilisant ce champ.

      Dans l'exemple suivant, nous souhaitons obtenir le nom du tag d'image à partir de la charge utile et de l'action associée à l'événement gcr. Pour ce faire, créez des variables de substitution à l'aide de liaisons de charge utile.

      Spécifiez les variables et valeurs suivantes:

      Nom de la variable Valeur de la variable
      _IMAGE_TAG $(body.message.data.tag)
      _ACTION $(body.message.data.action)

      body.message référence le PubSubMessage publié par les éditeurs et consommé par les abonnés. Pour consulter plus d'exemples de la charge utile de la notification Pub/Sub, consultez la section Exemples de notifications.

    • Filtres (facultatif): vous pouvez créer des filtres dans un déclencheur qui déterminent si votre déclencheur exécutera une compilation en réponse à la charge utile entrante en spécifiant des filtres sur les variables de substitution. L'expression de filtre doit renvoyer la valeur true pour qu'une compilation s'exécute.

      Nous vous recommandons d'utiliser le filtrage lorsque vous configurez des déclencheurs Pub/Sub sur des sujets contenant plusieurs messages. Les filtres peuvent être utilisés pour contrôler avec précision les compilations exécutées en réponse aux messages Pub/Sub entrants. Pour en savoir plus sur les risques associés à la configuration d'un déclencheur sans filtres, consultez la section Risques associés à un déclencheur non filtré.

      Dans l'exemple suivant, nous souhaitons que le déclencheur exécute une compilation si un nouveau tag est transféré vers une image existante. Nous utilisons des opérateurs de condition de filtre pour vérifier si la variable _IMAGE_TAG correspond à un nom de tag existant et si la variable _ACTION correspond à INSERT pour rechercher les données nouvellement ajoutées.

      Spécifiez les filtres suivants:

      • _IMAGE_TAG != ""
      • _ACTION == INSERT

      La syntaxe de filtrage des déclencheurs Pub/Sub utilise le CEL (Common Expression Language) pour l'évaluation des expressions. Pour en savoir plus sur le CEL, consultez le dépôt cel-spec. Pour voir plus d'exemples de syntaxe de filtrage que vous pouvez appliquer à vos déclencheurs Pub/Sub, consultez la section Utiliser le CEL pour filtrer les événements de compilation.

  1. Cliquez sur Créer pour créer votre déclencheur de compilation.

gcloud

Pour créer un déclencheur qui écoute un nouveau tag transféré vers une image existante dans Artifact Registry à l'aide des commandes gcloud, procédez comme suit:

  1. Ouvrez une fenêtre de terminal.
  2. Exécutez la commande gcloud alpha pour créer un déclencheur de compilation dans votre projet. Dans l'exemple ci-dessous, le déclencheur est configuré pour répondre aux compilations avec une correspondance de tag prod et une correspondance d'action INSERT en fonction de la charge utile spécifiée comme définie par la variable de substitution, _IMAGE_TAG.

     gcloud alpha builds triggers create pubsub \
       --name=TRIGGER_NAME \
       --topic=projects/PROJECT_ID/topics/TOPIC_NAME \
       --build-config=BUILD_CONFIG \ # or --inline-config=INLINE_BUILD_CONFIG
       --substitutions=\
         _IMAGE_TAG_='$(body.message.data.tag)'
         _ACTION='$(body.message.data.action)'
       --filter='_IMAGE_TAG == "" && _ACTION == "INSERT"'
       --repo=REPO_NAME
       --tag=TAG_NAME  # or --branch=BRANCH_NAME
    

    Où :

    • TRIGGER_NAME correspond au nom de votre déclencheur.
    • PROJECT_ID est l'ID de votre projet Cloud.
    • TOPIC_NAME correspond au nom du sujet Pub/Sub auquel vous êtes abonné.
    • BUILD_CONFIG correspond au chemin d'accès à votre fichier de configuration de compilation.
    • INLINE_BUILD_CONFIG est le chemin d'accès à votre fichier de configuration de compilation intégré.
    • REPO_NAME est le nom du dépôt source sur lequel la compilation est appelée.
    • TAG_NAME est le nom de votre tag si vous souhaitez configurer votre déclencheur pour qu'il effectue une compilation sur un tag.
    • BRANCH_NAME est le nom de votre branche si vous souhaitez configurer votre déclencheur pour effectuer une compilation sur une branche.

Créer un déclencheur de compilation qui répond aux événements Container Registry

Vous pouvez créer un déclencheur Pub/Sub qui répond aux événements Container Registry tels que le moment où des images sont stockées, taguées ou supprimées. Cette section explique comment créer un déclencheur Pub/Sub qui appelle une compilation lorsqu'une image correspond à un tag configuré par un filtre personnalisé. Si vous ne connaissez pas Container Registry, consultez le guide de démarrage rapide pour Container Registry pour savoir comment transférer et extraire des images avec des tags.

Console

Pour créer un déclencheur qui écoute un transfert d'image dans Container Registry et correspond à un nom de tag à l'aide de Google Cloud Console:

  1. Ouvrez la page Déclencheurs :

    Ouvrir la page Déclencheurs

  2. Sélectionnez votre projet en haut de la page, puis cliquez sur Ouvrir.

  3. Cliquez sur Créer un déclencheur.

  4. Entrez les paramètres de déclencheur suivants :

    • Nom : saisissez le nom de votre déclencheur.
    • Région : sélectionnez la région de votre déclencheur.

      • Si vous sélectionnez global comme région, Cloud Build utilise le pool par défaut pour exécuter votre compilation.
      • Si vous sélectionnez une région non globale et que le fichier de configuration de compilation associé au déclencheur spécifie un pool privé, Cloud Build utilise le pool privé pour exécuter votre compilation. Dans ce cas, la région spécifiée dans votre déclencheur doit correspondre à celle dans laquelle vous avez créé votre pool privé.
      • Si vous sélectionnez une région non globale et que le fichier de configuration de compilation associé au déclencheur ne spécifie pas de pool privé, Cloud Build utilise le pool par défaut pour exécuter votre compilation dans la même région que votre déclencheur.
    • Description (facultative) : saisissez une description du déclencheur.

    • Événement: sélectionnez Message Pub/Sub comme événement pour appeler votre déclencheur.

    • Abonnement : Sélectionnez le sujet Pub/Sub auquel vous souhaitez vous abonner comme l'événement déclencheur. Tous les sujets existants dans votre projet s'affichent dans le menu déroulant.

    • Source : sélectionnez le dépôt à compiler lorsque le déclencheur est exécuté.

    • Révision : sélectionnez la branche ou le tag à compiler lorsque le déclencheur est exécuté.

      • Branche: saisissez le nom de la branche sur laquelle appeler votre compilation.
      • Tag: saisissez le nom du tag sur lequel appeler votre compilation.
    • Configuration: sélectionnez le fichier de configuration de compilation (situé dans votre dépôt distant) ou créez un fichier de configuration de compilation intégré à utiliser pour votre compilation.

      • Type: sélectionnez le type de configuration à utiliser pour votre compilation.
        • Fichier de configuration Cloud Build (yaml or json) : utilisez un fichier de configuration de compilation pour votre configuration.
        • Dockerfile: utilisez un fichier Dockerfile pour votre configuration.
        • Buildpacks: utilisez des packs de création pour votre configuration.
      • Emplacement: spécifiez l'emplacement de votre configuration.

        • Repository (Dépôt) Si votre fichier de configuration se trouve dans votre dépôt distant, indiquez l'emplacement de votre fichier de configuration de compilation, le répertoire Dockerfile ou le répertoire packs de création. Si votre type de configuration de compilation est un fichier Dockerfile ou un pack de création, vous devez attribuer un nom à l'image obtenue et, éventuellement, un délai avant expiration pour la compilation. Une fois le nom de l'image Dockerfile ou du pack de création fourni, vous obtenez un aperçu de la commande docker build ou pack que votre compilation va exécuter.
        • Variables d'environnement de pack de création (facultatif): si vous avez sélectionné buildpacks comme type de configuration, cliquez sur Ajouter une variable d'environnement de pack pour spécifier les variables d'environnement et valeurs de votre pack de création. Pour en savoir plus sur les variables d'environnement du pack de création, consultez la section Variables d'environnement.
        • Intégré: si vous avez sélectionné Fichier de configuration Cloud Build (yaml ou json) comme option de configuration, vous pouvez spécifier votre configuration de compilation de manière intégrée. Cliquez sur Open Editor (Ouvrir l'éditeur) pour écrire votre fichier de configuration de compilation dans Google Cloud Console à l'aide de la syntaxe YAML ou JSON. Cliquez sur OK pour enregistrer la configuration de compilation.

    • Substitutions (Facultatif): Si vous avez choisi le fichier de configuration de compilation comme option de configuration de la compilation, vous pouvez choisir de définir des Variables de substitution spécifique à un déclencheur en utilisant ce champ.

      Dans l'exemple suivant, nous souhaitons obtenir le nom du tag d'image à partir de la charge utile et de l'action associée à l'événement gcr. Pour ce faire, créez des variables de substitution à l'aide de liaisons de charge utile.

      Spécifiez les variables et valeurs suivantes:

      Nom de la variable Valeur de la variable
      _IMAGE_TAG $(body.message.data.tag)
      _ACTION $(body.message.data.action)

      body.message référence le PubSubMessage publié par les éditeurs et consommé par les abonnés. Pour consulter plus d'exemples de la charge utile de la notification Pub/Sub, consultez la section Exemples de notifications.

    • Filtres (facultatif): vous pouvez créer des filtres dans un déclencheur qui déterminent si votre déclencheur exécutera une compilation en réponse à la charge utile entrante en spécifiant des filtres sur les variables de substitution. L'expression de filtre doit renvoyer la valeur true pour qu'une compilation s'exécute.

      Nous vous recommandons d'utiliser le filtrage lorsque vous configurez des déclencheurs Pub/Sub sur des sujets contenant plusieurs messages. Les filtres peuvent être utilisés pour contrôler avec précision les compilations exécutées en réponse aux messages Pub/Sub entrants. Pour en savoir plus sur les risques associés à la configuration d'un déclencheur sans filtres, consultez la section Risques associés à un déclencheur non filtré.

      Dans l'exemple suivant, nous souhaitons que le déclencheur exécute une compilation si le nom de la variable de tag _IMAGE_TAG correspond à un nom de tag spécifique, tel que prod. Vous pouvez spécifier l'opérateur de condition de filtre comme "==" pour une correspondance exacte. Vous pouvez également vérifier l'action associée à votre événement gcr. Par exemple, vous pouvez spécifier _ACTION comme INSERT pour rechercher les données nouvellement ajoutées.

      Spécifiez les filtres suivants:

      • _IMAGE_TAG == prod
      • _ACTION == INSERT

      La syntaxe de filtrage des déclencheurs Pub/Sub utilise le CEL (Common Expression Language) pour l'évaluation des expressions. Pour en savoir plus sur le CEL, consultez le dépôt cel-spec. Pour voir plus d'exemples de syntaxe de filtrage que vous pouvez appliquer à vos déclencheurs Pub/Sub, consultez la section Filtrer les compilations.

  1. Cliquez sur Créer pour créer votre déclencheur de compilation.

gcloud

Pour créer un déclencheur qui écoute un transfert d'image dans Container Registry et effectue une correspondance basée sur un nom de tag à l'aide des commandes gcloud:

  1. Ouvrez une fenêtre de terminal.
  2. Exécutez la commande gcloud alpha pour créer un déclencheur de compilation dans votre projet. Dans l'exemple ci-dessous, le déclencheur est configuré pour répondre aux compilations avec une correspondance de tag prod et une correspondance d'action INSERT en fonction de la charge utile spécifiée comme définie par la variable de substitution, _IMAGE_TAG.

     gcloud alpha builds triggers create pubsub \
       --name=TRIGGER_NAME \
       --topic=projects/PROJECT_ID/topics/TOPIC_NAME \
       --build-config=BUILD_CONFIG \ # or --inline-config=INLINE_BUILD_CONFIG
       --substitutions=\
         _IMAGE_TAG_='$(body.message.data.tag)'
         _ACTION='$(body.message.data.action)'
       --filter='_IMAGE_TAG == "prod" && _ACTION == "INSERT"'
       --repo=REPO_NAME
       --tag=TAG_NAME  # or --branch=BRANCH_NAME
    

    Où :

    • TRIGGER_NAME correspond au nom de votre déclencheur.
    • PROJECT_ID est l'ID de votre projet Cloud.
    • TOPIC_NAME correspond au nom du sujet Pub/Sub auquel vous êtes abonné.
    • BUILD_CONFIG correspond au chemin d'accès à votre fichier de configuration de compilation.
    • INLINE_BUILD_CONFIG est le chemin d'accès à votre fichier de configuration de compilation intégré.
    • REPO_NAME est le nom du dépôt source sur lequel la compilation est appelée.
    • TAG_NAME est le nom de votre tag si vous souhaitez configurer votre déclencheur pour qu'il effectue une compilation sur un tag.
    • BRANCH_NAME est le nom de votre branche si vous souhaitez configurer votre déclencheur pour effectuer une compilation sur une branche.

Créer un déclencheur de compilation qui répond aux événements Cloud Storage

Vous pouvez créer un déclencheur Pub/Sub qui répond aux événements Cloud Storage, par exemple lorsqu'un nouveau binaire est transféré vers un bucket de stockage existant. Cette section explique comment créer un déclencheur Pub/Sub qui répond avec une compilation lors du déploiement d'un nouveau binaire dans un bucket importé. Si vous ne connaissez pas Cloud Storage, consultez les guides de démarrage rapide.

Console

Pour créer un déclencheur qui écoute les événements Cloud Storage à l'aide de Google Cloud Console:

  1. Ouvrez la page Déclencheurs :

    Ouvrir la page Déclencheurs

  2. Sélectionnez votre projet en haut de la page, puis cliquez sur Ouvrir.

  3. Cliquez sur Créer un déclencheur.

  4. Entrez les paramètres de déclencheur suivants :

    • Nom : saisissez le nom de votre déclencheur.
    • Région : sélectionnez la région de votre déclencheur.

      • Si vous sélectionnez global comme région, Cloud Build utilise le pool par défaut pour exécuter votre compilation.
      • Si vous sélectionnez une région non globale et que le fichier de configuration de compilation associé au déclencheur spécifie un pool privé, Cloud Build utilise le pool privé pour exécuter votre compilation. Dans ce cas, la région spécifiée dans votre déclencheur doit correspondre à celle dans laquelle vous avez créé votre pool privé.
      • Si vous sélectionnez une région non globale et que le fichier de configuration de compilation associé au déclencheur ne spécifie pas de pool privé, Cloud Build utilise le pool par défaut pour exécuter votre compilation dans la même région que votre déclencheur.
    • Description (facultative) : saisissez une description du déclencheur.

    • Événement: sélectionnez Message Pub/Sub comme événement pour appeler votre déclencheur.

    • Abonnement : Sélectionnez le sujet Pub/Sub auquel vous souhaitez vous abonner comme l'événement déclencheur. Tous les sujets existants dans votre projet s'affichent dans le menu déroulant.

    • Source : sélectionnez le dépôt à compiler lorsque le déclencheur est exécuté.

    • Révision : sélectionnez la branche ou le tag à compiler lorsque le déclencheur est exécuté.

      • Branche: saisissez le nom de la branche sur laquelle appeler votre compilation.
      • Tag: saisissez le nom du tag sur lequel appeler votre compilation.
    • Configuration: sélectionnez le fichier de configuration de compilation (situé dans votre dépôt distant) ou créez un fichier de configuration de compilation intégré à utiliser pour votre compilation.

      • Type: sélectionnez le type de configuration à utiliser pour votre compilation.
        • Fichier de configuration Cloud Build (yaml or json) : utilisez un fichier de configuration de compilation pour votre configuration.
        • Dockerfile: utilisez un fichier Dockerfile pour votre configuration.
        • Buildpacks: utilisez des packs de création pour votre configuration.
      • Emplacement: spécifiez l'emplacement de votre configuration.

        • Repository (Dépôt) Si votre fichier de configuration se trouve dans votre dépôt distant, indiquez l'emplacement de votre fichier de configuration de compilation, le répertoire Dockerfile ou le répertoire packs de création. Si votre type de configuration de compilation est un fichier Dockerfile ou un pack de création, vous devez attribuer un nom à l'image obtenue et, éventuellement, un délai avant expiration pour la compilation. Une fois le nom de l'image Dockerfile ou du pack de création fourni, vous obtenez un aperçu de la commande docker build ou pack que votre compilation va exécuter.
        • Variables d'environnement de pack de création (facultatif): si vous avez sélectionné buildpacks comme type de configuration, cliquez sur Ajouter une variable d'environnement de pack pour spécifier les variables d'environnement et valeurs de votre pack de création. Pour en savoir plus sur les variables d'environnement du pack de création, consultez la section Variables d'environnement.
        • Intégré: si vous avez sélectionné Fichier de configuration Cloud Build (yaml ou json) comme option de configuration, vous pouvez spécifier votre configuration de compilation de manière intégrée. Cliquez sur Open Editor (Ouvrir l'éditeur) pour écrire votre fichier de configuration de compilation dans Google Cloud Console à l'aide de la syntaxe YAML ou JSON. Cliquez sur OK pour enregistrer la configuration de compilation.

    • Substitutions (Facultatif): Si vous avez choisi le fichier de configuration de compilation comme option de configuration de la compilation, vous pouvez choisir de définir des Variables de substitution spécifique à un déclencheur en utilisant ce champ.

      Dans cet exemple, nous souhaitons surveiller le déploiement d'un nouveau binaire lorsqu'il est importé dans un bucket. Pour obtenir ces données, nous pouvons créer des variables de substitution à l'aide de liaisons de charge utile.

      Spécifiez les variables et valeurs suivantes:

      Nom de la variable Valeur de la variable
      _EVENT_TYPE $(body.message.attributes.eventType)
      _BUCKET_ID $(body.message.attributes.bucketId)
      _OBJECT_ID $(body.message.attributes.objectId)

      body.message référence le PubSubMessage publié par les éditeurs et consommé par les abonnés. Pour consulter plus d'exemples de la charge utile de la notification Pub/Sub, consultez la section Exemples de notifications.

    • Filtres (facultatif): vous pouvez créer des filtres dans un déclencheur qui déterminent si votre déclencheur exécutera une compilation en réponse à la charge utile entrante en spécifiant des filtres sur les variables de substitution. L'expression de filtre doit renvoyer la valeur true pour qu'une compilation s'exécute.

      Nous vous recommandons d'utiliser le filtrage lorsque vous configurez des déclencheurs Pub/Sub sur des sujets contenant plusieurs messages. Les filtres peuvent être utilisés pour contrôler avec précision les compilations exécutées en réponse aux messages Pub/Sub entrants. Pour en savoir plus sur les risques associés à la configuration d'un déclencheur sans filtres, consultez la section Risques associés à un déclencheur non filtré.

      Comme nous voulons que le déclencheur exécute une compilation si le nouveau binaire a été déployé dans un bucket spécifique, nous pouvons utiliser l'opérateur "==" pour rechercher des correspondances exactes. Vous pouvez également utiliser le mot clé "correspondances" si vous souhaitez rechercher des correspondances par expression régulière.

      Spécifiez les filtres suivants:

      • _EVENT_TYPE == OBJECT_FINALIZE
      • _OBJECT_ID correspond à ^<object-id>$
      • _BUCKET_ID correspond à ^<bucket-id>$
  1. Cliquez sur Créer pour créer votre déclencheur de compilation.

gcloud

Pour créer un déclencheur de compilation qui écoute les événements de compilation avec un type d'événement spécifique dans Cloud Storage, procédez comme suit:

  1. Ouvrez une fenêtre de terminal.
  2. Exécutez la commande gcloud alpha pour créer un déclencheur de compilation dans votre projet. Dans l'exemple ci-dessous, le déclencheur est configuré pour répondre aux compilations avec un événement Cloud Storage associé à un nouveau binaire transmis à un bucket de stockage existant :

     gcloud alpha builds triggers create pubsub \
       --name=TRIGGER_NAME \
       --topic=projects/PROJECT_ID/topics/TOPIC_NAME \
       --build-config=BUILD_CONFIG \ # or --inline-config=INLINE_BUILD_CONFIG
       --substitutions=\
         _EVENT_TYPE='$(body.message.attributes.eventType)'
         _BUCKET_ID='$(body.message.attributes.bucketId)'
         _OBJECT_ID='$(body.message.attributes.objectId)'
       --filter='_EVENT_TYPE == "OBJECT_FINALIZE" && _OBJECT_ID.matches("<object-id>") && _BUCKET_ID.matches("<bucket-id>")'
       --repo=REPO_NAME
       --tag=TAG_NAME  # or --branch=BRANCH_NAME
    

    Où :

    • TRIGGER_NAME correspond au nom de votre déclencheur.
    • PROJECT_ID est l'ID de votre projet Cloud.
    • TOPIC_NAME correspond au nom du sujet Pub/Sub auquel vous êtes abonné.
    • BUILD_CONFIG correspond au chemin d'accès à votre fichier de configuration de compilation.
    • INLINE_BUILD_CONFIG est le chemin d'accès à votre fichier de configuration de compilation intégré.
    • REPO_NAME est le nom du dépôt source sur lequel la compilation est appelée.
    • TAG_NAME est le nom de votre tag si vous souhaitez configurer votre déclencheur pour qu'il effectue une compilation sur un tag.
    • BRANCH_NAME est le nom de votre branche si vous souhaitez configurer votre déclencheur pour effectuer une compilation sur une branche.

Risques associés à un déclencheur non filtré

Si vous n'avez pas configuré de filtres sur votre déclencheur Pub/Sub, celui-ci peut appeler un nombre infini de compilations si votre déclencheur modifie un artefact ou un objet qui publie involontairement un nouveau message dans le sujet qu'il écoute. Par exemple, votre déclencheur peut appeler un nombre infini de compilations si votre déclencheur:

  • Pointe vers un sujet gcr.
  • Crée une image ou un tag dans gcr.
  • Pointe vers un sujet gcs pour un objet spécifique de votre bucket et modifie cet objet.

Si vous rencontrez une boucle infinie, vous pouvez supprimer votre déclencheur ou le mettre à jour pour qu'il pointe vers un sujet distinct afin d'éviter que des frais supplémentaires ne soient facturés pour chaque compilation que vous appelez.

Utiliser le CEL pour filtrer les événements de compilation

Cloud Build utilise le CEL avec la variable, build, sur les champs répertoriés dans la ressource Compilation afin d'accéder aux champs associés à votre événement de compilation, tels que votre ID de déclencheur, votre liste d'images, ou vos valeurs de substitution. Vous pouvez utiliser la chaîne filter pour filtrer les événements de compilation dans votre fichier de configuration de compilation à l'aide de n'importe quel champ répertorié dans la ressource Compilation. Pour trouver la syntaxe exacte associée à votre champ, consultez le fichier cloudbuild.proto.

Filtrer par ID de déclencheur

Pour filtrer par ID de déclencheur, spécifiez la valeur de votre ID de déclencheur dans le champ filter à l'aide de build.build_trigger_id, où trigger-id est votre ID de déclencheur sous forme de chaîne :

filter: build.build_trigger_id == trigger-id

Filtrer par état

Pour filtrer par état, spécifiez l'état de la compilation que vous souhaitez filtrer dans le champ filter à l'aide de build.status.

L'exemple suivant montre comment filtrer les événements de compilation dotés de l'état SUCCESS à l'aide du champ filter :

filter: build.status == Build.Status.SUCCESS

Vous pouvez également filtrer les compilations présentant des états différents. L'exemple suivant montre comment filtrer les événements de compilation dont l'état est SUCCESS, FAILURE ou TIMEOUT à l'aide du champ filter :

filter: build.status in [Build.Status.SUCCESS, Build.Status.FAILURE, Build.Status.TIMEOUT]

Pour afficher des valeurs d'état supplémentaires que vous pouvez filtrer, consultez la section État dans la documentation de référence sur les ressources de compilation.

Filtrer par tag

Pour filtrer par tag, spécifiez la valeur de votre tag dans le champ filter à l'aide de build.tags, où tag-name est le nom de votre tag :

filter: tag-name in build.tags

Vous pouvez appliquer un filtre en fonction du nombre de tags spécifiés dans votre événement de compilation à l'aide de size. Dans l'exemple suivant, le champ filter filtre les événements de compilation comportant exactement deux tags spécifiés, avec un tag spécifié en tant que v1 :

filter: size(build.tags) == 2 && "v1" in build.tags

Filtrer par images

Pour filtrer par images, spécifiez la valeur de votre image dans le champ filter à l'aide de build.images, où image-name est le nom complet de votre image, tel que répertorié dans Container Registry, comme par exemple gcr.io/example/image-one :

filter: image-name in build.images

Dans l'exemple suivant, les filtres filter sont appliqués aux événements de compilation dont le nom d'image spécifié est gcr.io/example/image-one ou gcr.io/example/image-two :

filter: "gcr.io/example/image-one" in build.images || "gcr.io/example/image-two" in build.images

Filtrer par date et heure

Vous pouvez filtrer les événements de compilation en fonction de la date et l'heure de création, de début ou de fin d'une compilation en spécifiant l'une des options suivantes dans votre champ filter : build.create_time, build.start_time ou build.finish_time

Dans l'exemple suivant, le champ filter utilise timestamp pour filtrer les événements de compilation dont la date et l'heure de requête pour créer la compilation sont fixées au 20 juillet 2020 à 6h00 :

filter: build.create_time == timestamp("2020-07-20:T06:00:00Z")

Vous pouvez également filtrer les événements de compilation par comparaisons horaires. Dans l'exemple suivant, le champ filter utilise timestamp pour filtrer les événements de compilation dont le début est compris entre le 20 juillet 2020 à 6h00 et le 30 juillet 2020 à 6h00.

filter: timestamp("2020-07-20:T06:00:00Z") >= build.start_time && build.start_time <= timestamp("2020-07-30:T06:00:00Z")

Pour en savoir plus sur la façon dont les fuseaux horaires sont exprimés dans le CEL, consultez la définition de langage pour les fuseaux horaires.

Pour filtrer par durée de compilation, vous pouvez utiliser duration pour comparer les horodatages. Dans l'exemple suivant, le champ filter utilise duration pour filtrer les événements de compilation dont la compilation a duré au moins cinq minutes :

filter: build.finish_time - build.start_time >= duration("5m")

Filtrer par substitution

Vous pouvez filtrer par substitution en spécifiant la variable de substitution dans le champ filter à l'aide de build.substitutions. Dans l'exemple suivant, le champ filter répertorie les compilations contenant la variable de substitution substitution-variable et vérifie si substitution-variable correspond à l'élément substitution-value spécifié :

filter: build.substitutions[substitution-variable] == substitution-value

Où :

  • substitution-variable est le nom de votre variable de substitution.
  • substitution-value est le nom de votre valeur de substitution.

Vous pouvez également filtrer par valeur de variable de substitution par défaut. Dans l'exemple suivant, le champ filter répertorie les compilations portant le nom de branche master et les compilations portant le nom de dépôt github.com/user/my-example-repo. Les variables de substitution par défaut BRANCH_NAME et REPO_NAME sont transmises sous forme de clés à build.substitutions :

filter: build.substitutions["BRANCH_NAME"] == "master" && build.substitutions["REPO_NAME"] == "github.com/user/my-example-repo"

Si vous souhaitez filtrer les chaînes à l'aide d'expressions régulières, vous pouvez utiliser la fonction matches intégrée. Dans l'exemple ci-dessous, le champ filter filtre les compilations dont l'état est FAILURE ou TIMEOUT, et qui disposent également d'une variable de substitution de compilation TAG_NAME avec une valeur correspondant à l'expression régulière v{DIGIT}.{DIGIT}.{3 DIGITS}).

filter: build.status in [Build.Status.FAILURE, Build.Status.TIMEOUT] && build.substitutions["TAG_NAME"].matches("^v\\d{1}\\.\\d{1}\\.\\d{3}$")`

Pour afficher la liste des valeurs de substitution par défaut, consultez la section Utiliser des substitutions par défaut.

Étapes suivantes