Créer des dépôts depuis GitLab

Cette page explique créer sur GitLab à l'aide de déclencheurs de webhook.

Avant de commencer

  • Activer les API Cloud Build and Secret Manager.

    Activer les API

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

Configuration

Avant de créer un déclencheur de webhook pour compiler sur GitLab, vous devez créer une clé SSH afin d'authentifier votre connexion à GitLab. Lorsque vous créez un déclencheur sans dépôt associé et accédez à votre code sur un système de gestion de code source externe, tel que GitLab, vous devez récupérer votre clé SSH dans votre configuration de compilation intégrée.

Cette section explique comment créer et stocker votre clé SSH avant de créer un déclencheur webhook.

Créer une clé SSH

Pour accéder à votre code sur GitLab, vous devez récupérer une clé SSH dans votre configuration de compilation intégrée.

Pour créer une clé SSH:

  1. Ouvrez une fenêtre de terminal.

  2. Créez un répertoire nommé working-dir et accédez-y :

    mkdir working-dir
    cd working-dir
    
  3. Créez une clé SSH GitLab, où gitlab.com est l'URL de votre dépôt GitLab:

    ssh-keygen -t rsa -b 4096 -N '' -C gitlab.com -f id_gitlab
    

    La commande crée une clé SSH dans working-dir/id_gitlab sans phrase secrète pour votre clé SSH. Cloud Build ne peut pas utiliser votre clé SSH si elle est protégée par une phrase secrète.

Activer l'accès SSH sur GitLab

Vous devrez activer l'accès SSH sur votre GitLab pour permettre aux utilisateurs de votre serveur d'ajouter leurs propres clés SSH et d'utiliser ces clés SSH pour sécuriser les opérations Git entre leur ordinateur et l'instance GitLab. Pour apprendre à utiliser SSH avec GitLab, consultez la page GitLab et clés SSH.

Ajouter votre clé d'accès SSH publique sur GitLab

Pour sécuriser les opérations effectuées par d'autres systèmes sur vos dépôts gérés dans GitLab, vous devez ajouter votre clé d'accès SSH publique à GitLab. Pour savoir comment ajouter votre clé, consultez la section Ajouter une clé SSH à votre compte GitLab.

Créer et stocker vos identifiants dans Secret Manager

Lorsque vous créez une clé SSH, un fichier id_gitlab est créé dans votre environnement local. Comme ce fichier contient des informations sensibles associées à l'authentification, vous devez le stocker dans Secret Manager avant de l'utiliser pour appeler une compilation.

En plus du secret utilisé lors de la création d'un déclencheur de webhook, vous devez également créer un secret dans Secret Manager pour valider et autoriser les événements de webhook entrants dans Cloud Build.

Pour créer et stocker vos identifiants dans Secret Manager:

  1. Accédez à la page "Secret Manager" dans Cloud Console:

    Accéder à la page Secret Manager

  2. Sur la page Secret Manager, cliquez sur Créer un secret.

  3. Sur la page Créer un secret, sous Nom, saisissez le nom du secret.

  4. Dans le champ Valeur du secret, saisissez le nom du secret ou importez un fichier.

    Pour importer votre fichier de clé SSH, cliquez sur Upload (Importer) afin d'inclure votre fichier working-dir/id_gitlab.

  5. Ne modifiez pas la section Régions.

  6. Cliquez sur le bouton Créer un secret pour créer votre secret.

Une fois votre secret créé, Google Cloud Console attribue automatiquement le rôle Secret Secret Accessor (Secret Manager) à votre compte de service Cloud Build, ${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Si ce rôle ne s'affiche pas sur votre compte de service, suivez les étapes décrites dans la section Attribuer le rôle Secret Manager à votre compte de service.

Maintenant que vous avez stocké votre clé SSH, vous pouvez également supprimer la clé SSH de votre environnement en exécutant la commande suivante:

rm id_gitlab*

Vous êtes maintenant prêt à créer votre déclencheur webhook.

Créer des déclencheurs de webhooks

Console

Pour créer un déclencheur de webhook qui appelle des compilations à partir de GitLab à l'aide de Google Cloud Console:

  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. Remarque: Si vous sélectionnez global comme région, les pools par défaut sont utilisés pour exécuter votre compilation. Sinon, un pool privé situé dans la région de votre déclencheur est utilisé pour exécuter votre compilation.
    • 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.

        Pour créer un secret:

        1. Sélectionnez Créer.
        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 existant.
        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, ${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.

       curl -X POST -H "application/json" "https://cloudbuild.googleapis.com/v1/projects/${PROJECT_NAME}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY}&secret=${SECRET_VALUE}" -d "{}"
      

      Pour apprendre à utiliser l'URL lorsque vous créez un webhook dans GitLab, consultez la page Créer un webhook dans GitLab.

    • Source (facultatif): dépôt à compiler lorsque le déclencheur de webhook est exécuté. Laissez ce champ vide. Dans cet exemple, la configuration de compilation est une configuration de compilation intégrée. Une source n'est donc pas nécessaire.

    • Configuration : créez une configuration de compilation intégrée dans Google Cloud Console.

      Dans l'exemple suivant, la configuration de compilation intégrée authentifie votre connexion à GitLab à l'aide de votre clé SSH et accède au dépôt spécifié. Ensuite, il vérifie le commit qui a appelé le webhook.

      steps:
      # first, setup SSH:
      # 1- save the SSH key from Secret Manager to a file
      # 2- add the host key to the known_hosts file
      - name: gcr.io/cloud-builders/git
        args:
          - '-c'
          - |
            echo "$$SSHKEY" > /root/.ssh/id_rsa
            chmod 400 /root/.ssh/id_rsa
            ssh-keyscan gitlab.com > /root/.ssh/known_hosts
        entrypoint: bash
        secretEnv:
          - SSHKEY
        volumes:
          - name: ssh
            path: /root/.ssh
      # second, clone the repository
      - name: gcr.io/cloud-builders/git
        args:
          - clone
          - '-n'
          - 'git@gitlab.com/GITLAB_REPO'
          - .
        volumes:
          - name: ssh
            path: /root/.ssh
      # third, checkout the specific commit that invoked this build
      - name: gcr.io/cloud-builders/git
        args:
          - checkout
          - $_TO_SHA
      availableSecrets:
        secretManager:
        - versionName: PATH_TO_SECRET_VERSION
          env: SSHKEY
      

      Où :

      • GITLAB_REPO est le chemin d'accès au dépôt GitLab.
      • PATH_TO_SECRET_VERSION est le chemin d'accès à la version de votre secret, tel qu'il est stocké dans Secret Manager. Il s'agit du secret contenant votre clé SSH. Par exemple, projects/project-id/secrets/secret-name/versions/1.
      • SSHKEY est le nom de l'environnement utilisé dans ce cas pour stocker le chemin d'accès à votre secret.
    • Substitutions (facultatives): vous pouvez choisir de définir des variables de substitution spécifiques au déclencheur à l'aide de ce champ.

      Dans cet exemple, supposons que vous souhaitiez surveiller un nom de branche spécifique associé à un ID de commit, puis basculer vers ce nom de branche dans la définition de compilation. Pour obtenir ces données, vous pouvez créer des variables de substitution à l'aide de liaisons de charge utile pour enregistrer le nom de la branche.

      Spécifiez les variables et valeurs suivantes:

      Nom de la variable Valeur de la variable
      _BRANCH $(body.ref)
      _TO_SHA $(body.after)

      Pour afficher la charge utile associée aux événements GitLab, consultez la page de documentation GitLab sur les événements.

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

      Comme vous souhaitez que le déclencheur exécute une compilation si le nom de la branche correspond à main, vous pouvez 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:

      • _BRANCH == refs/heads/main

      Pour plus d'exemples de syntaxe sur le filtrage que vous pouvez appliquer à vos déclencheurs de webhook, consultez la section Utiliser le langage CEL pour filtrer les événements de compilation.

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

gcloud

Pour créer un déclencheur de webhook qui appelle des compilations à partir de GitLab, procédez comme suit:

     gcloud alpha builds triggers create webhook \
       --name=TRIGGER_NAME \
       --secret=PATH_TO_SECRET \
       --substitutions='' \
       --filter='' \
       --inline-config=PATH_TO_INLINE_BUILD_CONFIG \ # or --repo=PATH_TO_REPO
       --branch=BRANCH_NAME #  or --tag=TAG_NAME

Où :

  • TRIGGER_NAME correspond au nom de votre déclencheur.
  • PATH_TO_SECRET est le chemin d'accès au secret stocké dans Secret Manager. Exemple : projects/my-project/secrets/my-secret/versions/2.
  • PATH_TO_INLINE_BUILD_CONFIG est le chemin d'accès à votre configuration de compilation intégrée. Bien que la configuration de compilation soit stockée de manière intégrée dans le déclencheur que vous créez, le chemin d'accès de la configuration est extrait d'un fichier local.
  • PATH_TO_REPO est le chemin d'accès au dépôt sur lequel appeler une compilation. Exemple : https://gitlab.com/project-namespace. Votre URL de dépôt doit être un dépôt connecté Cloud Build.

  • BRANCH_NAME est le nom de votre branche si vous souhaitez configurer votre déclencheur pour qu'il se compile sur une branche.

  • TAG_NAME est le nom de votre tag si vous souhaitez configurer votre déclencheur pour qu'il effectue une compilation sur un tag.

Créer un webhook dans GitLab

Pour que GitLab puisse envoyer des requêtes à Cloud Build, vous devez créer un webhook dans GitLab en suivant les instructions décrites dans la documentation GitLab sur les webhooks.

Désormais, chaque fois que les mises à jour de votre dépôt correspondent à l'événement déclencheur que vous avez spécifié dans votre webhook, une compilation est automatiquement appelée par les déclencheurs du webhook Cloud Build.

Étapes suivantes