Se connecter à un hôte GitLab Enterprise Edition

Cette page explique comment connecter l'hôte GitLab Enterprise Edition à Cloud Build.

Avant de commencer

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

Conditions requises pour l'hôte

  • Si vous n'avez pas installé d'instance de serveur GitLab Enterprise Edition, consultez le guide d'installation de GitLab Enterprise Edition pour obtenir des instructions.

    Lorsque vous suivez les instructions pour installer une instance de serveur GitLab Enterprise Edition, tenez compte des points suivants:

    • Vous devez configurer votre hôte pour qu'il gère le protocole HTTPS. Les hôtes configurés avec le protocole HTTP ne sont pas compatibles.

    • Vous devez configurer votre hôte avec la même URL que celle utilisée pour accéder à votre hôte depuis Google Cloud. Pour en savoir plus, consultez la documentation GitLab sur la configuration de l'URL externe.

Autorisations IAM requises

Pour connecter votre hôte GitLab Enterprise Edition, attribuez le rôle Administrateur de connexion Cloud Build (roles/cloudbuild.connectionAdmin) à votre compte utilisateur.

Pour ajouter les rôles requis à votre compte utilisateur, consultez la page Configurer l'accès aux ressources Cloud Build. Pour en savoir plus sur les rôles IAM associés à Cloud Build, consultez la page Rôles et autorisations IAM.

Si votre instance GitLab Enterprise Edition est hébergée sur un réseau privé, consultez Créer des dépôts à partir de GitLab Enterprise Edition sur un réseau privé pour en savoir plus sur les rôles IAM supplémentaires requis avant la connexion à l'hôte.

Se connecter à un hôte GitLab Enterprise Edition

Avant de créer une connexion hôte pour votre instance GitLab Enterprise Edition, vous devez créer des jetons d'accès personnels dans GitLab Enterprise Edition en procédant comme suit:

  1. Connectez-vous à votre instance GitLab Enterprise Edition.

  2. Sur la page GitLab Enterprise Edition de votre instance, cliquez sur votre avatar en haut à droite.

  3. Cliquez sur Modifier mon profil.

  4. Dans la barre latérale de gauche, sélectionnez Jetons d'accès.

    La page Jetons d'accès personnels s'affiche.

  5. Créez un jeton d'accès avec le champ d'application api à utiliser pour connecter et dissocier des dépôts.

  6. Créez un jeton d'accès avec le champ d'application read_api pour vous assurer que les dépôts Cloud Build peuvent accéder au code source dans les dépôts.

Console

Pour connecter votre hôte GitLab Enterprise Edition à Cloud Build:

  1. Ouvrez la page Dépôts de la console Google Cloud.

    Ouvrir la page "Dépôts"

    La page Dépôts s'affiche.

  2. En haut de la page, sélectionnez l'onglet 2e génération.

  3. Dans le sélecteur de projet de la barre supérieure, sélectionnez votre projet Google Cloud.

  4. Cliquez sur Créer une connexion hôte pour connecter un nouvel hôte à Cloud Build.

  5. Dans le panneau de gauche, sélectionnez GitLab comme fournisseur de source.

  6. Dans la section Configurer la connexion, saisissez les informations suivantes:

    1. Région: sélectionnez une région pour votre connexion.

    2. Nom: saisissez un nom pour votre connexion.

  7. Dans la section Détails de l'hôte, sélectionnez ou saisissez les informations suivantes:

    1. Fournisseur GitLab: sélectionnez GitLab Enterprise Edition autogéré comme fournisseur.

    2. URL de l'hôte: saisissez l'URL de l'hôte de votre connexion. Exemple :https://my-gle-server.net

    3. Certificat CA: cliquez sur "Parcourir" pour importer votre certificat autosigné.

    4. Sous Type de connexion, sélectionnez l'une des options suivantes:

      1. Internet public: sélectionnez cette option si votre instance est accessible via l'Internet public.

      2. Accès au réseau privé: sélectionnez cette option si votre instance est hébergée sur un réseau privé.

      3. Sous Service de répertoire de services, sélectionnez l'emplacement de votre service:

        • Dans le projet your-project
        • Dans un autre projet
        • Saisir manuellement
        1. Si vous sélectionnez Dans un autre projet ou Saisir manuellement, saisissez les informations suivantes:

          • Project (Projet) : saisissez ou sélectionnez votre Google Cloud ID de projet dans le menu déroulant.

          • Région: ce champ présélectionne la région de votre connexion. La région spécifiée pour votre service doit correspondre à celle associée à votre connexion.

        2. Espace de noms: sélectionnez l'espace de noms de votre service.

        3. Service: sélectionnez le nom du service dans votre espace de noms.

  8. Dans la section Jetons d'accès personnels, saisissez les informations suivantes:

    1. Jeton d'accès à l'API: saisissez le jeton avec l'accès de portée api. Ce jeton est utilisé pour connecter et dissocier des dépôts.

    2. Jeton d'accès à l'API en lecture seule: saisissez le jeton avec l'accès au champ d'application read_api. Les déclencheurs Cloud Build utilisent ce jeton pour accéder au code source dans les dépôts.

  9. Cliquez sur Se connecter.

    Une fois que vous avez cliqué sur le bouton Connecter, vos jetons d'accès personnels sont stockés de manière sécurisée dans Secret Manager. Après la connexion à l'hôte, Cloud Build crée également un secret de webhook en votre nom. Vous pouvez afficher et gérer les secrets sur la page Secret Manager. Vous pouvez afficher et gérer vos secrets sur la page Secret Manager.

Vous avez maintenant créé une connexion GitLab Enterprise Edition.

gcloud

Avant de connecter votre hôte GitLab Enterprise Edition à Cloud Build, procédez comme suit pour stocker vos identifiants:

  1. Stockez votre jeton dans Secret Manager.

  2. Créez un secret de webhook dans Secret Manager en exécutant la commande suivante:

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. Si vous stockez vos secrets dans un projet Google Cloud différent de celui que vous prévoyez d'utiliser pour créer une connexion hôte, saisissez la commande suivante pour accorder à votre projet l'accès à l'agent de service Cloud Build:

    PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT} \
      --role="roles/secretmanager.admin"
    

    Où :

    • PROJECT_ID est l'ID de votre Google Cloud projet.

Vous pouvez maintenant connecter votre hôte GitLab Enterprise Edition à Cloud Build.

Procédez comme suit :

  1. Saisissez la commande suivante pour créer une connexion GitLab Enterprise Edition:

    gcloud builds connections create gitlab CONNECTION_NAME \
      --host-uri=HOST_URI \
      --project=PROJECT_ID \
      --region=REGION \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_TOKEN/versions/SECRET_VERSION \
      --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \
      --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION
    

    Où :

    • CONNECTION_NAME est le nom de votre connexion.
    • HOST_URI est l'URI de votre instance GitLab Enterprise Edition. Exemple :https://my-gle-server.net
    • PROJECT_ID est l'ID de votre Google Cloud projet.
    • REGION est la région de votre connexion.
    • API_TOKEN est le nom de votre jeton avec une portée api.
    • READ_TOKEN est le nom de votre jeton avec une portée read_api.
    • SECRET_VERSION correspond à la version de votre secret.
    • WEBHOOK_SECRET est le secret de votre webhook.

Vous avez maintenant créé une connexion GitLab Enterprise Edition.

Terraform

Vous pouvez connecter votre hôte GitLab Enterprise Edition à Cloud Build à l'aide de Terraform.

Dans l'exemple suivant, l'extrait de code effectue les opérations suivantes:

  • Configure le fournisseur Google Terraform
  • Crée un secret pour stocker votre jeton d'accès personnel GitLab Enterprise Edition.
  • Accorde les autorisations nécessaires à l'agent de service Cloud Build pour accéder aux secrets.
  • Crée une connexion GitLab Enterprise Edition

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    // Create secrets and grant permissions to the Cloud Build service agent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            auto {}
         }
     }
    
     resource "google_secret_manager_secret_version" "api-pat-secret-version" {
         secret = google_secret_manager_secret.api-pat-secret.id
         secret_data = "GITLAB_API_TOKEN"
     }
    
     resource "google_secret_manager_secret" "read-pat-secret" {
         project = "PROJECT_ID"
         secret_id = "GITLAB_PAT_READ"
    
         replication {
             auto {}
         }
    }
    
    resource "google_secret_manager_secret_version" "read-pat-secret-version" {
        secret = google_secret_manager_secret.pat-secret.id
        secret_data = "GITLAB_API_TOKEN"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET"
    
        replication {
            auto {}
        }
    }
    
    resource "google_secret_manager_secret_version" "webhook-secret-secret-version" {
        secret = google_secret_manager_secret.webhook-secret-secret.id
        secret_data = "WEBHOOK_SECRET_VALUE"
    }
    
    data "google_iam_policy" "serviceagent-secretAccessor" {
        binding {
            role = "roles/secretmanager.secretAccessor"
            members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"]
        }
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-pak" {
      project = google_secret_manager_secret.private-key-secret.project
      secret_id = google_secret_manager_secret.private-key-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-rpak" {
      project = google_secret_manager_secret.webhook-secret-secret.project
      secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-whs" {
      project = google_secret_manager_secret.webhook-secret-secret.project
      secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    // Create the connection and add the repository resource
    resource "google_cloudbuildv2_connection" "my-connection" {
        project = "PROJECT_ID"
        location = "REGION"
        name = "CONNECTION_NAME"
    
        gitlab_config {
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.pat-secret-version.id
            }
            read_authorizer_credential {
                 user_token_secret_version = google_secret_manager_secret_version.pat-secret-version.id
            }
            webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id
        }
    
        depends_on = [
            google_secret_manager_secret_iam_policy.policy-pak,
            google_secret_manager_secret_iam_policy.policy-rpak,
            google_secret_manager_secret_iam_policy.policy-whs
        ]
    }
    

Où :

  • PROJECT_ID est l'ID de votre Google Cloud projet.
  • GITLAB_PAT_API est votre jeton d'accès personnel avec accès api.
  • GITLAB_API_TOKEN est votre jeton d'accès personnel.
  • GITLAB_PAT_READ est votre jeton d'accès personnel avec un accès read_api.
  • WEBHOOK_SECRET est le nom du secret contenant la valeur du secret de votre webhook.
  • WEBHOOK_SECRET_VALUE est la valeur de votre secret de webhook.
  • REGION est la région de votre connexion.
  • CONNECTION_NAME est le nom de votre connexion GitLab Enterprise Edition.
  • URI est l'URI de votre connexion. Exemple :https://my-gitlab-enterprise-server.net Vous avez maintenant créé une connexion GitLab Enterprise Edition.

Étape suivante