Cette page explique comment vous connecter à un hôte GitLab Enterprise Edition à Cloud Build.
Avant de commencer
Activez les API Cloud Build et Secret Manager.
Rôles requis pour activer les API
Pour activer les API, vous avez besoin de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.
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 protocoleHTTPne sont pas compatibles.Vous devez configurer votre hôte avec la même URL que celle utilisée pour y accéder 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 dans un réseau privé, consultez 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 de 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 :
Connectez-vous à votre instance GitLab Enterprise Edition.
Sur la page GitLab Enterprise Edition de votre instance, cliquez sur votre avatar en haut à droite.
Cliquez sur Modifier mon profil.
Dans la barre latérale de gauche, sélectionnez Jetons d'accès.
La page Jetons d'accès personnels s'affiche.
Créez un jeton d'accès avec le niveau d'accès
apià utiliser pour connecter et déconnecter des dépôts.Créez un jeton d'accès avec le niveau d'accès
read_apipour 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 :
Ouvrez la page Dépôts dans la Google Cloud console.
La page Dépôts s'affiche.
En haut de la page, sélectionnez l'onglet 2e génération.
Dans le sélecteur de projet de la barre supérieure, sélectionnez votre Google Cloud projet.
Cliquez sur Créer une connexion hôte pour connecter un nouvel hôte à Cloud Build.
Dans le panneau de gauche, sélectionnez GitLab comme fournisseur de source.
Dans la section Configurer la connexion, saisissez les informations suivantes :
Région : sélectionnez une région pour votre connexion.
Nom : saisissez un nom pour votre connexion.
Dans la section Détails de l'hôte, sélectionnez ou saisissez les informations suivantes :
Hôte GitLab : sélectionnez GitLab Enterprise Edition autogéré.
URL de l'hôte : saisissez l'URL de l'hôte pour votre connexion. Exemple :
https://my-gle-server.net.
Facultatif : Si vous souhaitez gérer les clés de chiffrement utilisées pour chiffrer les jetons d'accès de vos dépôts GitLab Enterprise Edition, accédez à la section Chiffrement et choisissez une clé Cloud Key Management Service. Pour en savoir plus, consultez Activer les clés de chiffrement gérées par le client pour Secret Manager.
Dans la section Mise en réseau, sous Type de connexion, sélectionnez l'une des options suivantes :
Internet public : sélectionnez cette option si votre instance est accessible via l'Internet public.
Réseau privé : sélectionnez cette option si votre instance est hébergée sur un réseau privé. Configurez ensuite les éléments suivants :
Certificat CA : cliquez sur "Parcourir" pour importer votre certificat autosigné.
Sous Service de l'Annuaire des services, sélectionnez l'emplacement de votre service :
- Dans le projet CURRENT_PROJECT
- Dans un autre projet
- Saisie manuelle
Saisissez les informations suivantes :
Projet : si vous avez sélectionné Dans un autre projet ou Saisie manuelle, saisissez ou sélectionnez l'ID de votre Google Cloud 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.
Espace de noms : sélectionnez l'espace de noms de votre service.
Service : sélectionnez le nom du service dans votre espace de noms.
Dans la section Jetons d'accès personnels, saisissez les informations suivantes :
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.Jeton d'accès à l'API en lecture seule : 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.
Cliquez sur Se connecter.
Après avoir cliqué sur le bouton Se connecter, vos jetons d'accès personnels sont stockés de manière sécurisée dans Secret Manager. Après la connexion de 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 Secret Manager page.
gcloud
Avant de connecter votre hôte GitLab Enterprise Edition à Cloud Build, procédez comme suit pour stocker vos identifiants :
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=-Si vous stockez vos secrets dans un Google Cloud projet 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 :
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_VERSIONOù :
- CONNECTION_NAME est le nom de votre connexion dans Cloud Build.
- 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 le niveau d'accès
api. - READ_TOKEN est le nom de votre jeton avec le niveau d'accès
read_api. - SECRET_VERSION est la version de votre secret.
- WEBHOOK_SECRET est votre secret de webhook.
Vous avez bien créé une connexion GitLab Enterprise Edition.
Terraform
Vous pouvez connecter votre hôte GitLab Enterprise Edition à Cloud Build à l'aide de Terraform. Pour en savoir plus sur Terraform, consultez Google Cloud.
Dans l'exemple suivant, l'extrait de code effectue les opérations suivantes :
- Configure le fournisseur Terraform pour les Google Cloud ressources
- 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.read-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.api-pat-secret.project secret_id = google_secret_manager_secret.api-pat-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.read-pat-secret.project secret_id = google_secret_manager_secret.read-pat-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 { host_uri = "URI" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.api-pat-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.read-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 ] }
Remplacez les éléments suivants :
PROJECT_ID: ID de votre Google Cloud projet.GITLAB_PAT_API: votre jeton d'accès personnel avec l'accèsapi.GITLAB_API_TOKEN: votre jeton d'accès personnel.GITLAB_PAT_READ: votre jeton d'accès personnel avec l'accèsread_api.WEBHOOK_SECRET: nom du secret contenant la valeur de votre secret de webhook.WEBHOOK_SECRET_VALUE: valeur de votre secret de webhook.PROJECT_NUMBER: votre Google Cloud projet numéro. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la Google Cloud console ou en exécutant la commande suivante :gcloud projects describe PROJECT_ID --format='value(projectNumber)'REGION: la région de votre connexion.CONNECTION_NAME: nom de votre connexion hôte GitLab Enterprise Edition dans Cloud Build.URI: URI de votre connexion, par exemplehttps://my-gitlab-enterprise-server.net.
Vous avez bien créé une connexion GitLab Enterprise Edition.
Faire pivoter les jetons d'accès GitLab Enterprise Edition anciens ou expirés
Faites pivoter vos jetons d'accès afin que votre connexion hôte Cloud Build puisse maintenir sa connexion à votre dépôt GitLab Enterprise Edition. Si votre jeton d'accès GitLab Enterprise Edition expire, votre connexion hôte Cloud Build est déconnectée de son dépôt GitLab Enterprise Edition. Dans ce cas, vous ne pouvez pas désactiver la connexion ni associer de dépôt tant que vous n'avez pas fait pivoter le jeton expiré. De plus, des erreurs s'affichent dans les cas suivants :
La page Détails de la connexion de votre connexion affiche un message d'erreur indiquant
Connection is disconnected due to an invalid or expired access token(La connexion est déconnectée en raison d'un jeton d'accès non valide ou expiré).Si vous essayez d'associer un dépôt à une connexion dont le jeton a expiré, le message Jeton d'accès non valide s'affiche. En cliquant sur Afficher la connexion , vous accédez à la page Détails de la connexion de la connexion dont le jeton a expiré.
Cloud Build vous permet de faire pivoter les jetons d'accès en saisissant de nouvelles valeurs de jeton et en les enregistrant dans Secret Manager dans la dernière version secrète de ces jetons. Pour faire pivoter vos jetons d'accès, procédez comme suit :
Faites pivoter chaque jeton d'accès dans GitLab Enterprise Edition :
Accédez au dépôt GitLab Enterprise Edition connecté à votre connexion hôte Cloud Build.
Suivez les instructions de la documentation GitLab pour faire pivoter un jeton d'accès. Lorsque vous faites pivoter un jeton, GitLab Enterprise Edition crée un jeton avec de nouveaux identifiants et invalide la version précédente de ce jeton. Votre jeton pivoté dispose des mêmes autorisations et du même champ d'application que le jeton d'origine.
Copiez les ID de vos jetons pivotés.
Mettez à jour votre jeton d'accès dans Cloud Build :
Accédez à la page Détails de la connexion de votre connexion.
Sélectionnez Mettre à jour les jetons d'accès.
Dans le menu Rotation des jetons, saisissez vos nouveaux jetons dans les champs Jeton d'accès à l'API et Jeton d'accès en lecture seule.
(Facultatif) Si vous souhaitez que votre connexion utilise toujours la dernière version du secret pour vos jetons, sélectionnez Mettre à jour la connexion pour toujours utiliser la dernière version. Il peut être utile de laisser cette option désélectionnée si votre connexion utilise un numéro de version secrète spécifique.
Sélectionnez Mettre à jour pour enregistrer vos modifications.
Cloud Build enregistre les nouveaux jetons d'accès en tant que dernière version de votre secret dans Secret Manager.
Étape suivante
- Découvrez comment connecter un dépôt GitLab Enterprise Edition.
- Découvrez comment créer et déployer vos charges de travail à Google Cloud l'aide de composants CI/CD gérés par Google dans votre pipeline GitLab. Consultez GitLab sur Google Cloud.