Automatiser les compilations en réponse aux événements webhook

Cloud Build vous permet de définir des déclencheurs de webhook, qui peuvent authentifier et accepter les événements de webhook entrants. Ces événements, envoyés à une URL personnalisée, vous permettent de connecter directement des systèmes externes et des systèmes de gestion de code source externes tels que Bitbucket.com, Bitbucket Server ou GitLab à Cloud Build via des événements de webhook.

Avec les déclencheurs de webhook, vous pouvez définir un fichier de configuration de compilation intégré plutôt que de spécifier une source lors de la création de votre déclencheur. La configuration de compilation intégrée vous permet de contrôler les opérations Git et de définir le reste de votre compilation.

Cette page explique comment créer des déclencheurs de webhook afin d'automatiser les compilations en réponse à des événements de webhook.

Avant de commencer

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  • Pour utiliser les commandes gcloud sur cette page, installez Google Cloud CLI.

Créer des déclencheurs de webhooks

Console

Pour créer un déclencheur de webhook à l'aide de la console Google Cloud:

  1. Ouvrez la page Déclencheurs :

    Ouvrir la page Déclencheurs de compilation

  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 : nom de votre déclencheur.
    • Région : sélectionnez la région de votre déclencheur.

      • Si 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 build. Dans ce cas, la région que vous spécifiez dans votre déclencheur doit correspondre à celle dans laquelle vous avez créé votre pool privé.
      • Si le fichier de configuration de compilation associé au déclencheur ne spécifie pas de pool privé, Cloud Build utilise la version par défaut pour exécuter votre build dans la même région comme déclencheur.
    • Description (facultatif) : description de votre déclencheur.

    • Événement: sélectionnez Événement de webhook pour configurer votre déclencheur de sorte qu'il lance des compilations en réponse aux événements de webhook entrants.

    • URL de webhook: utilisez l'URL du webhook pour authentifier les événements webhooks entrants.

      • Secret: vous aurez besoin d'un secret pour authentifier les événements webhook entrants. Vous pouvez créer un secret ou utiliser un secret existant. Ce secret est distinct du secret associé à votre clé SSH.

        Pour créer un secret:

        1. Sélectionnez Utiliser un nouveau secret (généré par Cloud Build).
        2. Cliquez sur Créer un secret.

          La fenêtre pop-up Créer un secret de webhook s'affiche.

        3. Dans le champ Nom du secret, saisissez le nom du secret.

        4. Cliquez sur Créer un secret pour enregistrer votre secret, qui sera automatiquement créé et stocké dans Secret Manager.

        Pour utiliser un secret existant, procédez comme suit:

        1. Sélectionnez Utiliser un secret existant ou créer le vôtre.
        2. Dans le champ Secret, sélectionnez le nom du secret que vous souhaitez utiliser dans le menu déroulant ou suivez les instructions pour ajouter un secret par ID de ressource.
        3. Dans le champ Version du secret, sélectionnez la version de votre secret dans le menu déroulant.

        Si vous utilisez un secret existant, vous devrez peut-être attribuer manuellement le rôle "Accesseur de secrets" de Secret Manager à votre compte de service Cloud Build, service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Pour en savoir plus, consultez la section Attribuer le rôle Secret Manager à votre compte de service.

      Une fois le secret créé ou sélectionné, un aperçu d'URL de webhook s'affiche. Votre URL contiendra une clé API générée par Cloud Build et votre secret. Si Cloud Build ne parvient pas à récupérer votre clé API, vous pouvez l'ajouter manuellement à l'URL ou apprendre à obtenir une clé API si vous ne disposez pas de pour l'instant.

      Vous pouvez utiliser l'URL pour appeler un événement de webhook en effectuant une requête HTTP à l'aide de la méthode POST.

      Utilisez la commande suivante pour appeler un événement de webhook:

      curl -X POST -H "Content-type: application/json" "https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY}&secret=${SECRET_VALUE}&trigger=${TRIGGER_NAME}&projectId=${PROJECT_ID}" -d "{}"
      

      Une fois ces étapes effectuées, Secret Manager le rôle Accesseur de secrets sera automatiquement accordé à votre l'agent de service Cloud Build, service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com Si vous ne voyez pas ce rôle automatiquement à votre agent de service, procédez comme suit : des étapes décrites dans la section Attribuer le rôle Secret Manager à votre compte de service.

    • Source (facultatif) : sélectionnez la source à compiler lorsque le déclencheur Webhook est exécuté. Si vous spécifiez une configuration de compilation intégrée, vous n'avez pas besoin de spécifier la source suivante. Vous pouvez spécifier 1re génération ou 2e génération comme source. Pour en savoir plus, consultez la page Dépôts Cloud Build.

      • Dépôt : sélectionnez le dépôt de votre choix dans la liste des dépôts disponibles.

      • Branche ou tag : spécifiez une expression régulière à laquelle faire correspondre la valeur de la branche ou du tag. Pour en savoir plus sur la syntaxe des expressions régulières acceptables, consultez la page Syntaxe RE2.

      • Contrôle des commentaires : si vous avez sélectionné Demande d'extraction (application GitHub uniquement) comme événement, choisissez l'une des options suivantes pour contrôler si une compilation doit être exécutée automatiquement par le déclencheur :

        • Obligatoire, sauf pour les propriétaires et les collaborateurs : lorsqu'une demande d'extraction est créée ou mise à jour par un propriétaire ou un collaborateur du dépôt, les compilations sont automatiquement exécutées par le déclencheur. Si un contributeur externe lance l'action, les compilations ne seront exécutées qu'après que le propriétaire ou le collaborateur a ajouté /gcbrun à la demande d'extraction.

        • Obligatoire : lorsqu'une demande d'extraction est créée ou mise à jour par un contributeur, les compilations ne sont exécutées qu'après que le propriétaire ou le collaborateur a ajouté /gcbrun à la demande d'extraction. Compilations sont exécutées chaque fois qu'une modification est apportée à une demande d'extraction.

        • Non requis : lorsqu'une demande d'extraction est créée ou mise à jour par un contributeur, les compilations sont automatiquement exécutées par des déclencheurs.

    • 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. Si vous n'avez pas spécifié de dépôt source, vous devez sélectionner un fichier de configuration de compilation intégré comme option de configuration.

      • 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.

        • Dépôt: si votre fichier de configuration se trouve dans votre dans un dépôt distant, indiquez l'emplacement fichier de configuration de compilation, le Dockerfile ou le répertoire "buildpacks". 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 Ouvrir l'éditeur pour écrire votre fichier de configuration de compilation dans le la console Google Cloud à l'aide de la syntaxe YAML ou JSON. Cliquez sur OK pour enregistrer la configuration de compilation.

      Dans l'exemple suivant, les journaux du fichier de configuration de compilation intégrée renvoient "hello world":

       steps:
       - name: 'ubuntu'
         args: ['echo', 'hello world']
      
    • Substitutions (facultatif): si vous avez sélectionné le fichier de configuration de compilation comme option de configuration de compilation ou que vous avez créé un fichier de configuration de compilation intégré, vous pouvez choisir de définir des Variables de substitution spécifiques au déclencheur à l'aide de ce champ. Vous pouvez également obtenir des données à l'aide de liaisons de charge utile lors de la définition des valeurs des variables de substitution.

    • Filtres (facultatif): vous pouvez créer une règle dans un déclencheur qui détermine si votre déclencheur exécutera une compilation en fonction de vos variables de substitution.

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

gcloud

Pour créer un déclencheur webhook, procédez comme suit:

gcloud builds triggers create webhook \
  --region=REGION \
  --name=TRIGGER_NAME \
  --repository=projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME \
  --secret=projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION \
  --substitutions=_SUB_ONE='$(body.message.test)',_SUB_TWO='$(body.message.output)' \
  --subscription-filter='_SUB_ONE == "prod"' \
  --inline-config=PATH_TO_INLINE_BUILD_CONFIG \
  --tag=TAG_NAME
  # --build-config=PATH_TO_BUILD_CONFIG \
  # --branch=BRANCH_NAME

Où :

  • REGION est la région de votre déclencheur.
  • TRIGGER_NAME correspond au nom de votre déclencheur.
  • PROJECT_ID est votre ID de projet cloud.
  • CONNECTION_NAME est le nom de votre connexion hôte.
  • REPO_NAME est le nom du dépôt.
  • SECRET_NAME est le nom de votre secret tel qu'il est stocké dans Secret Manager.
  • SECRET_VERSION est la version associée à votre tels qu'ils sont stockés dans Secret Manager.
  • PATH_TO_INLINE_BUILD_CONFIG est le chemin d'accès à votre fichier de configuration de compilation intégré si vous utilisez --inline-config.
  • TAG_NAME est le nom de votre tag si vous souhaitez configurer votre déclencheur pour qu'il effectue une compilation sur un tag.
  • PATH_TO_BUILD_CONFIG est le chemin d'accès de votre fichier de configuration de compilation si vous utilisez --build-config.
  • BRANCH_NAME est le nom de votre branche si vous souhaitez configurer votre déclencheur pour qu'il se compile sur une branche.

(Facultatif) Obtenir une clé API

Pour authentifier votre événement webhook entrant, vous avez besoin d'une clé API.

Pour obtenir une clé API:

  1. Ouvrez la page Identifiants dans la console Google Cloud:

    Ouvrez la page Identifiants.

  2. Cliquez sur Créer des identifiants.

  3. Cliquez sur Clé API.

    Une boîte de dialogue contenant la clé API s'affiche. Prenez note de votre clé API.

  4. Si vous souhaitez limiter votre clé pour les applications de produits, cliquez sur Restreindre la clé pour effectuer les étapes supplémentaires permettant de sécuriser votre clé. Sinon, cliquez sur Fermer.

    Pour savoir comment restreindre votre clé, consultez la section Appliquer des restrictions de clé API.

(Facultatif) Attribuer le rôle "Secret Manager" à votre compte de service

Cloud Build attribue automatiquement le rôle Accesseur de secrets de Secret Manager aux comptes de service nécessitant ce rôle lors de la configuration du secret. Si ce rôle n'est pas automatiquement attribué au compte de service nécessaire, procédez comme suit pour l'ajouter manuellement afin que votre compte de service ait accès à votre secret:

  1. Ouvrez la page IAM dans la console Google Cloud:

    Ouvrir la page IAM

  2. Facultatif: Pour afficher les comptes fournis par Google, sélectionnez la case Inclure les attributions de rôles fournies par Google.

  3. Notez le compte de service de compilation que vous souhaitez auquel attribuer le rôle.

  4. Ouvrez la page Secret Manager dans la console Google Cloud :

    Ouvrir la page Secret Manager

  5. Cliquez sur le nom de votre secret.

    La page Informations détaillées sur le secret s'affiche.

    1. Cliquez sur l'onglet Autorisations.

    2. Cliquez sur Accorder l'accès.

      Le panneau Accorder l'accès s'affiche.

    3. Dans la section Ajouter des comptes principaux, ajoutez l'adresse e-mail associée au compte de service de compilation.

    4. Dans la section Attribuer des rôles, sélectionnez Secret Manager > Accesseur de secrets Secret Manager

    5. Cliquez sur Enregistrer.

Étape suivante