Cette page explique comment connecter un hôte Bitbucket Server à Cloud Build. La connexion à un hôte Bitbucket Server permet d'intégrer vos dépôts Bitbucket Server à Cloud Build. Vous pouvez ainsi configurer des déclencheurs de compilation pour créer des dépôts à partir de Bitbucket Server et créer des dépôts à partir de Bitbucket Server dans un réseau privé.
Avant de commencer
Activez les API Cloud Build, Secret Manager et Compute Engine, si ce n'est pas déjà fait.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.
- Préparez votre code source dans un dépôt Bitbucket Server.
- Disposer d'un fichier
Dockerfileou d'un fichier de configuration Cloud Build dans votre dépôt source Bitbucket Server. - Si vous n'avez pas installé d'instance Bitbucket Server, consultez le guide d'installation de Bitbucket Server pour obtenir des instructions.
Autorisations IAM requises
Pour obtenir les autorisations nécessaires pour vous connecter à votre hôte Bitbucket Server, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de connexion Cloud Build (roles/cloudbuild.connectionAdmin) sur votre compte utilisateur.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Si votre instance Bitbucket Server est hébergée dans un réseau privé, consultez Créer des dépôts à partir de Bitbucket Server dans un réseau privé pour en savoir plus sur les rôles IAM supplémentaires requis pour configurer une connexion hôte.
Créer des jetons d'accès personnels
Avant de créer une connexion hôte pour votre instance Bitbucket Server, créez des jetons d'accès personnels dans Bitbucket Server en procédant comme suit :
Connectez-vous à votre instance Bitbucket Server.
Suivez les instructions pour créer des jetons d'accès HTTP pour votre compte utilisateur.
Créez un jeton d'accès avec le niveau d'accès administrateur de dépôt pour l'utiliser afin d'associer et de dissocier des dépôts.
Créez un jeton d'accès avec le champ d'application repository read pour vous assurer que les dépôts Cloud Build peuvent accéder au code source dans les dépôts.
Enregistrez vos valeurs de jeton de manière sécurisée. Vous les utiliserez pour vous connecter à votre dépôt Bitbucket Server.
Se connecter à un hôte Bitbucket Server
Console
Pour connecter votre hôte Bitbucket Server à Cloud Build :
Ouvrez la page Dépôts dans la console Google Cloud .
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 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 Bitbucket comme fournisseur de source.
Dans la section Configurer la connexion, saisissez les informations suivantes :
Région : sélectionnez une région pour votre connexion. Vous devez spécifier une région. Votre connexion ne peut pas exister à l'échelle mondiale.
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 Bitbucket : sélectionnez Bitbucket Data Center comme hôte.
URL de l'hôte : saisissez l'URL de votre hôte.
Facultatif : Si vous souhaitez gérer les clés de chiffrement utilisées pour chiffrer les jetons d'accès à vos dépôts Bitbucket Server, 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, 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é. Ensuite, configurez les éléments suivants :
Certificat d'autorité de certification : votre certificat autosigné. Cliquez sur Parcourir pour ouvrir le certificat depuis votre machine locale.
Votre certificat ne doit pas dépasser 10 Ko et doit être au format PEM (
.pem,.cerou.crt). Si vous laissez ce champ vide, Cloud Build utilise un certificat de l'ensemble de certificats par défaut.Sous Service d'annuaire de services, sélectionnez l'emplacement de votre service :
- Dans le projet CURRENT_PROJECT
- Dans un autre projet
- Saisir manuellement
Saisissez les informations suivantes :
Projet : si vous avez sélectionné Dans un autre projet ou Saisir manuellement, 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. 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 HTTP, saisissez les informations suivantes :
Jeton d'accès administrateur : saisissez le jeton avec le niveau d'accès administrateur de dépôt. Ce jeton est utilisé pour associer et dissocier des dépôts.
Jeton d'accès en lecture : saisissez le jeton avec accès au champ d'application lecture de dépôts. 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 Connecter, vos jetons d'accès personnels sont stockés de manière sécurisée dans Secret Manager. Une fois la connexion à l'hôte Bitbucket Server établie, Cloud Build crée un secret de webhook en votre nom. Vous pouvez afficher et gérer vos secrets sur la page Secret Manager.
gcloud
Créez un secret de webhook dans Secret Manager en exécutant la commande suivante, où WEBHOOK_SECRET correspond au nom que vous souhaitez attribuer à votre secret de webhook :
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-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, exécutez 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 projet Google Cloud .
Vous pouvez maintenant connecter votre hôte Bitbucket Server à Cloud Build.
Exécutez la commande suivante pour créer une connexion Bitbucket Server :
gcloud builds connections create bitbucketserver CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_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 ``` Where:- CONNECTION_NAME correspond au nom de votre connexion hôte Bitbucket Server dans Cloud Build.
- HOST_URI correspond à l'URI de votre instance Bitbucket Server.
- PROJECT_ID est l'ID de votre projet Google Cloud .
- REGION est la région de votre connexion.
- ADMIN_TOKEN est le nom de votre jeton avec le niveau d'accès administrateur de dépôt.
- READ_TOKEN est le nom de votre jeton avec le niveau d'accès lecture de dépôts.
- SECRET_VERSION correspond à la version de votre secret.
- WEBHOOK_SECRET est votre secret de webhook.
Terraform
Vous pouvez connecter votre hôte Bitbucket Server à 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 Secret Manager pour stocker les jetons Bitbucket.
- Accorde les autorisations nécessaires à l'agent de service Cloud Build pour accéder aux secrets.
Crée une connexion Bitbucket Server.
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "admin-token-secret" { project = "PROJECT_ID" secret_id = "ADMIN_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "admin-token-secret-version" { secret = google_secret_manager_secret.admin-token-secret.id secret_data = "ADMIN_TOKEN_VALUE" } resource "google_secret_manager_secret" "read-token-secret" { project = "PROJECT_ID" secret_id = "READ_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "read-token-secret-version" { secret = google_secret_manager_secret.read-token-secret.id secret_data = "READ_TOKEN_VALUE" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET_NAME" 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" "p4sa-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.admin-token-secret.project secret_id = google_secret_manager_secret.admin-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { project = google_secret_manager_secret.read-token-secret.project secret_id = google_secret_manager_secret.read-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-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.p4sa-secretAccessor.policy_data } // Create the connection resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_server_config { host_uri = "BITBUCKET_URI" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.read-token-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 votre Google Cloud ID du projet.
- PROJECT_NUMBER est le numéro de votre projet Google Cloud .
- ADMIN_TOKEN_NAME est le nom de votre jeton avec le champ d'application
repository:admin. - ADMIN_TOKEN_VALUE correspond à la valeur de votre ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME est le nom de votre jeton avec le champ d'application
repository:read. - READ_TOKEN_VALUE correspond à la valeur de votre READ_TOKEN_NAME.
- WEBHOOK_SECRET_NAME est le nom de votre secret de webhook.
- WEBHOOK_SECRET_VALUE correspond à la valeur de votre WEBHOOK_SECRET_NAME.
- REGION correspond à la région de votre connexion.
- CONNECTION_NAME est le nom de votre connexion hôte Bitbucket Server dans Cloud Build.
- BITBUCKET_URI correspond à l'URI de votre instance Bitbucket Data Center.
Faire tourner les anciens jetons d'accès Bitbucket Server ou ceux qui ont expiré
Faites tourner vos jetons d'accès pour que votre connexion hôte Cloud Build puisse maintenir sa connexion à votre dépôt Bitbucket Server. Si votre jeton d'accès Bitbucket Server expire, la connexion de votre hôte Cloud Build est déconnectée de son dépôt Bitbucket Server. Dans ce cas, vous ne pouvez pas désactiver la connexion ni associer un dépôt tant que vous n'avez pas renouvelé le jeton expiré. De plus, des erreurs s'afficheront 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.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. Si vous cliquez sur Afficher la connexion, vous êtes redirigé vers la page Détails de la connexion pour la connexion dont le jeton a expiré.
Cloud Build vous permet de faire tourner les jetons d'accès en saisissant de nouvelles valeurs de jeton et en les enregistrant dans la dernière version du secret dans Secret Manager. Pour faire tourner vos jetons d'accès :
Effectuez une rotation de chaque jeton d'accès dans Bitbucket Server :
Accédez au dépôt Bitbucket Server connecté à votre connexion hôte Cloud Build.
Suivez les instructions de la documentation Bitbucket pour faire pivoter un jeton d'accès. Lorsque vous faites tourner un jeton, Bitbucket Server en crée un avec de nouvelles identifiants et invalide la version précédente de ce jeton. Votre jeton renouvelé dispose des mêmes autorisations et de la même portée que le jeton d'origine.
Copiez les ID de vos jetons renouvelés.
Mettez à jour votre jeton d'accès dans Cloud Build :
Accédez à la page Détails de 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.
(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écochée si votre connexion utilise un numéro de version secret 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.
Étapes suivantes
- Découvrez comment connecter un dépôt Bitbucket Server.
- Découvrez comment effectuer des déploiements bleu-vert sur Compute Engine.