Créer des dépôts depuis GitLab

Cette page explique comment créer des applications 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 le SDK 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 que vous 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 de 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 devez 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 section 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 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 un build.

Outre le 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 entrants de webhook vers 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 un nom pour votre secret.

  4. Dans le champ Valeur de secret, saisissez un nom pour votre secret ou importez un fichier.

    Pour importer votre fichier de clé SSH, cliquez sur 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 le secret créé, Google Cloud Console attribue automatiquement le rôle Accesseur de secrets du gestionnaire de secrets à votre compte de service Cloud Build, ${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Si vous ne voyez pas ce rôle sur votre compte de service, suivez la procédure décrite dans la section Attribuer le rôle de gestionnaire de secrets à 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 le déclencheur Webhook.

Créer des déclencheurs de webhook

Console

Pour créer un déclencheur de webhook qui appelle des builds à partir de GitLab à l'aide de Google Cloud Console, procédez comme suit:

  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.
    • Description (facultatif) : description de votre déclencheur.
    • Événement: sélectionnez Événement de webhook pour configurer votre déclencheur afin de démarrer les compilations en réponse aux événements webhook entrants.
    • URL de webhook: utilisez l'URL de webhook pour authentifier les événements de webhook entrant.

      • Secret: vous devez disposer d'un secret pour authentifier les événements de webhook entrant. Vous pouvez créer un secret ou utiliser un secret existant.

        Pour créer un secret, procédez comme suit:

        1. Sélectionnez Créer.
        2. Cliquez sur Créer un secret.

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

        3. Dans le champ Nom secret, saisissez un nom pour votre secret.

        4. Cliquez sur Créer un secret pour enregistrer votre secret. Celui-ci sera automatiquement créé et stocké pour vous 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 votre version de secret dans le menu déroulant.

        Si vous utilisez un secret existant, vous devrez peut-être attribuer manuellement le rôle Accesseur de secrets du gestionnaire de secrets à 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 de gestionnaire de secrets à votre compte de service.

      Une fois le secret créé ou sélectionné, un aperçu de l'URL de webhook s'affiche. Votre URL contiendra une clé API générée par Cloud Build et votre clé secrète. 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 n'en avez pas. pour l'instant.

      Vous pouvez utiliser l'URL pour appeler un événement de webhook en envoyant 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 savoir comment utiliser l'URL lors de la création d'un webhook dans GitLab, consultez la section Créer un webhook dans GitLab.

    • Source (facultatif): dépôt à créer lors de l'exécution du déclencheur de webhook. Laissez ce champ vide. Dans cet exemple, la configuration de compilation est une configuration de compilation intégrée. Aucune source n'est donc 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 extrait 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 correspond au chemin d'accès de votre 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 (facultatifs): ce champ vous permet de définir des variables de substitution spécifiques à un déclencheur.

      Dans cet exemple, supposons que vous souhaitiez surveiller un nom de branche spécifique associé à un ID de commit, puis que vous passiez à 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 afin d'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 la documentation GitLab sur les événements.

    • Filtres (facultatifs): vous pouvez créer une règle dans un déclencheur qui détermine si votre déclencheur exécutera un build 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 les correspondances exactes. Vous pouvez également utiliser le mot clé "correspond" si vous souhaitez établir une correspondance par expression régulière.

      Définissez les filtres suivants:

      • _BRANCH == refs/heads/main

      Pour voir plus d'exemples de syntaxe à utiliser pour les filtrages de vos déclencheurs de webhook, consultez la section Utiliser CEL pour filtrer les événements de compilation.

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

gcloud

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

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

Où :

  • TRIGGER_NAME correspond au nom de votre déclencheur.
  • PATH_TO_REPO est le chemin d'accès au dépôt pour appeler une compilation. Exemple :https://www.github.com/owner/repo
  • PATH_TO_SECRET est le chemin d'accès à votre secret tel qu'il est 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.

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

  • TAG_NAME correspond au nom de votre balise si vous souhaitez configurer le déclencheur pour qu'il s'appuie sur une balise.

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 de GitLab concernant 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.

Étape suivante