Cette page explique comment connecter l'hôte GitLab Enterprise Edition à Cloud Build.
Avant de commencer
-
Enable the Cloud Build and Secret Manager APIs.
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 pour installer un serveur GitLab Enterprise Edition Notez les points suivants:
Vous devez configurer votre hôte pour qu'il gère le protocole
HTTPS
. Hôtes configurés avec le protocoleHTTP
ne sont pas acceptés.Vous devez configurer votre hôte avec l'URL utilisée pour accéder à votre 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, accordez l'autorisation Cloud Build
Administrateur de connexion (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 sur un réseau privé, consultez la section Créer des dépôts à partir de GitLab Enterprise Edition dans un réseau privé pour les rôles IAM supplémentaires requis avant de passer connexion 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 Personal Access Tokens (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éer un jeton d'accès avec le niveau d'accès
read_api
pour garantir que les dépôts Cloud Build peuvent accéder au code source qu'ils contiennent.
Console
Pour connecter votre hôte GitLab Enterprise Edition à Cloud Build, procédez comme suit:
Ouvrez la page Dépôts de la console Google Cloud.
La page Dépôts s'affiche.
En haut de la page, sélectionnez l'onglet 2nd gen (2e génération).
Dans le sélecteur de projet de la barre supérieure, sélectionnez votre projet Google Cloud.
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 source.
Dans la section Configure Connection (Configurer la connexion), saisissez les informations suivantes:
Région: sélectionnez une région pour votre connexion.
Name (Nom) : saisissez le nom de votre connexion.
Dans la section Host details (Détails de l'hôte), sélectionnez ou saisissez les informations suivantes informations:
Fournisseur GitLab: sélectionnez le fournisseur GitLab Enterprise Edition autogéré.
Host URL (URL de l'hôte) : saisissez l'URL de l'hôte pour votre connexion. Exemple :
https://my-gle-server.net
Certificat CA: cliquez sur "Parcourir" pour importer votre certificat autosigné.
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.
Accès au réseau privé: sélectionnez cette option si votre instance est hébergée sur un réseau privé.
Sous Service de répertoire de services, sélectionnez l'emplacement de votre service :
- Dans le projet
your-project
- Dans un autre projet
- Saisie manuelle
Si vous sélectionnez Dans un autre projet ou Saisir manuellement, saisissez le les informations suivantes:
Project (Projet) : saisissez ou sélectionnez l'ID de votre projet Google Cloud dans le menu déroulant.
Région: ce champ présélectionne la région de votre connexion. Région spécifiée doit correspondre à la région 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 le projet
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 le 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 l'accès au champ d'application
read_api
. Les déclencheurs Cloud Build utilisent ce jeton pour accéder à la source dans des dépôts.
Cliquez sur Se connecter.
Lorsque vous cliquez 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 consulter et gérer vos secrets Secret Manager .
Vous venez de créer une connexion GitLab Enterprise Edition.
gcloud
Avant de connecter votre hôte GitLab Enterprise Edition à Cloud Build, Pour stocker vos identifiants, procédez comme suit:
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 projet Google Cloud différent de celui que vous prévoyez pour créer une connexion hôte, saisissez la commande suivante pour accorder au 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 correspond à votre ID de projet Google Cloud.
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_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 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 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
- 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 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 correspond à votre ID de projet Google Cloud.
- 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 venez de créer une connexion GitLab Enterprise Edition.
É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 sur Google Cloud à l'aide de composants CI/CD gérés par Google dans votre pipeline GitLab. Consultez la page GitLab sur Google Cloud.