Se connecter à un hôte GitLab Enterprise Edition

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

Avant de commencer

  • Activer les API Cloud Build and Secret Manager.

    Activer les API

Configuration requise 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 d'installation d'une instance de serveur GitLab Enterprise Edition, tenez compte des points suivants:

    • Vous devez configurer votre hôte pour gérer 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 de 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 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 dans un réseau privé, consultez la section Créer des dépôts à partir de GitLab Enterprise Edition dans 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 Personal Access Tokens (Jetons d'accès personnels) s'affiche.

  5. Créez un jeton d'accès avec le niveau d'accès api à utiliser pour connecter et déconnecter 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, procédez comme suit:

  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 2nd gen (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 source.

  6. Dans la section Configure Connection (Configurer la connexion), saisissez les informations suivantes:

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

    2. Name (Nom) : saisissez le nom de 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 autogéré GitLab Enterprise Edition comme fournisseur.

    2. Host URL (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 l'Annuaire des services, sélectionnez l'emplacement de votre service:

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

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

          • Region (Région) : ce champ présélectionne la région de votre connexion. La région spécifiée pour votre service doit correspondre à la région 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 Personal access tokens (Jetons d'accès personnels), saisissez les informations suivantes:

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

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

  9. Cliquez sur Connect (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 venez de créer 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 autoriser votre projet à accéder à 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 correspond à votre ID de projet Google Cloud.
    • CLOUD_BUILD_SERVICE_AGENT est votre compte de service Cloud Build.

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 correspond à votre ID de projet Google Cloud.
    • REGION est la région de votre connexion.
    • API_TOKEN est le nom de votre jeton dont le niveau d'accès est api.
    • READ_TOKEN est le nom de votre jeton dont le niveau d'accès est read_api.
    • SECRET_VERSION est la version de votre secret.
    • WEBHOOK_SECRET est le secret de votre webhook.

Vous venez de créer 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:

  • Il configure le fournisseur Terraform pour Google
  • Il crée un secret pour stocker votre jeton d'accès personnel GitLab Enterprise Edition.
  • Accorde à l'agent de service Cloud Build les autorisations nécessaires 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 service sgent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            automatic = true
         }
     }
    
     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 {
             automatic = true
         }
    }
    
    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 {
            automatic = true
        }
    }
    
    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 correspond à votre ID de projet Google Cloud.
  • GITLAB_PAT_API est votre jeton d'accès personnel avec l'accès api.
  • GITLAB_API_TOKEN est votre jeton d'accès personnel.
  • GITLAB_PAT_READ est votre jeton d'accès personnel avec l'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 du secret de votre 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 venez de créer une connexion GitLab Enterprise Edition.

Étapes suivantes