Se connecter à un hôte Bitbucket Data Center

Cette page explique comment connecter un hôte Bitbucket Data Center à Cloud Build.

Avant de commencer

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  • Préparez votre code source dans un dépôt Bitbucket Data Center.
  • Vous devez disposer d'un fichier de configuration Dockerfile ou Cloud Build dans votre dépôt source Bitbucket Data Center.
  • Si vous n'avez pas installé d'instance Bitbucket Data Center, consultez Installer Bitbucket Data Center pour obtenir des instructions.
  • Pour utiliser les commandes gcloud sur cette page, installez Google Cloud CLI.

Autorisations IAM requises

  • Pour obtenir les autorisations nécessaires pour connecter votre hôte Bitbucket Data Center, 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 la section "Gérer les accès".

Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Se connecter à un hôte Bitbucket Data Center

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

  1. Connectez-vous à votre instance Bitbucket Data Center.

  2. Suivez les instructions pour créer des jetons d'accès HTTP pour votre compte utilisateur.

    1. Créez un jeton d'accès avec le niveau d'accès administrateur de dépôt à utiliser pour connecter et dissocier des dépôts.

    2. Créez un jeton d'accès avec le niveau d'accès lecture de dépôt 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 Bitbucket Data Center à 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 Bitbucket 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. Vous devez spécifier une région. Votre connexion ne peut pas exister à l'échelle mondiale.

    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. Hôte Bitbucket: sélectionnez Centre de données Bitbucket comme hôte.

    2. URL de l'hôte: saisissez l'URL de votre hôte Bitbucket Data Center.

  8. Dans la section Mise en réseau, sélectionnez l'une des options suivantes:

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

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

      1. Certificat CA: votre certificat autosigné. Cliquez sur Browse (Parcourir) pour ouvrir le certificat à partir de votre machine locale.

        Votre certificat ne doit pas dépasser 10 Ko et doit être au format PEM (.pem, .cer ou .crt). Si vous laissez ce champ vide, Cloud Build utilise un certificat de l'ensemble de certificats par défaut.

      2. Dans la section Service Directory service (Service Directory service), sélectionnez l'emplacement de votre service. Vous pouvez accepter l'ID de projet renseigné automatiquement ou en spécifier un autre.

        1. Sélectionnez le projet de votre service. Vous pouvez accepter le projet prérempli, sélectionner Dans un autre projet pour parcourir les options ou Saisir manuellement.

          Si vous choisissez cette option, saisissez les informations suivantes:

          • Project (Projet) : saisissez ou sélectionnez votre Google CloudID 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.

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

    1. Jeton d'accès administrateur: saisissez le jeton avec l'accès de niveau administrateur de dépôt. Ce jeton est utilisé pour connecter et dissocier des dépôts.

    2. Jeton d'accès en lecture: saisissez le jeton avec l'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.

  10. 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 connecté à l'hôte du centre de données Bitbucket, 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

  1. Stockez vos jetons dans Secret Manager.

  2. Créez un secret de webhook dans Secret Manager en exécutant la commande suivante, où WEBHOOK_SECRET correspond au nom que vous souhaitez donner à votre secret de webhook:

      cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create 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, 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 Google Cloud projet.

Vous pouvez maintenant connecter votre hôte Bitbucket Data Center à Cloud Build.

  1. Exécutez la commande suivante pour créer une connexion Bitbucket Data Center:

    gcloud builds connections create bitbucket-data-center 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 est le nom de votre connexion.
    • HOST_URI est l'URI de votre instance Bitbucket Data Center.
    • PROJECT_ID correspond à votre Google Cloud ID de projet.
    • 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 champ d'application lecture de dépôts.
    • SECRET_VERSION correspond à la version de votre secret.
    • WEBHOOK_SECRET est le secret de votre webhook.

Terraform

Vous pouvez connecter votre hôte Bitbucket Data Center à 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 Data Center.

    // 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_data_center_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 correspond à votre Google Cloud ID de projet.
  • PROJECT_NUMBER est le numéro de votre Google Cloud projet.
  • ADMIN_TOKEN_NAME est le nom de votre jeton avec une portée repository:admin.
  • ADMIN_TOKEN_VALUE correspond à la valeur de votre ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME est le nom de votre jeton avec une portée repository:read.
  • READ_TOKEN_VALUE correspond à la valeur de votre READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME est le nom du secret de votre webhook.
  • WEBHOOK_SECRET_VALUE correspond à la valeur de votre WEBHOOK_SECRET_NAME.
  • REGION est la région de votre connexion.
  • CONNECTION_NAME est le nom de votre connexion.
  • BITBUCKET_URI est l'URI de votre instance Bitbucket Data Center.

Étape suivante