Se connecter à un hôte Bitbucket Cloud

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

Avant de commencer

  • Activer les API Cloud Build, Secret Manager, and Compute Engine.

    Activer les API

  • Vérifier que le code source se trouve dans un dépôt Bitbucket Cloud
  • Assurez-vous que le dépôt source Bitbucket Cloud dispose d'un fichier Dockerfile ou Fichier de configuration Cloud Build.
  • Installez la Google Cloud CLI pour utiliser les commandes gcloud.

Autorisations IAM requises

Pour obtenir les autorisations dont vous avez besoin pour vous connecter, demandez à votre administrateur de vous accorder le Administrateur de connexion Cloud Build (cloudbuild.connectionAdmin) rôle IAM sur le 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.

Créer des jetons d'accès Bitbucket Cloud

Créez les deux jetons d'accès suivants dans Bitbucket Cloud:

  • Jeton d'accès administrateur, pour la connexion et la déconnexion des dépôts.
  • Jeton d'accès en lecture : pour autoriser Cloud Build à accéder à votre source du code source.

Pour créer ces jetons, procédez comme suit:

  1. Connectez-vous à Bitbucket Cloud.

  2. Suivez les instructions Bitbucket Cloud pour créer des jetons d'accès associés à votre dépôt ; project ou workspace.

    Accordez les autorisations suivantes:

    • Jeton d'accès administrateur:

      • Dépôts: Read et Admin
      • Demandes d'extraction: Lire
      • Webhooks: Read et Write
    • Jeton d'accès en lecture:

      • Dépôts: Read
  3. Copiez vos jetons pour les utiliser dans les procédures suivantes.

Se connecter à un hôte Bitbucket Cloud

Console

Connectez Cloud Build à votre hôte Bitbucket Cloud en exécutant la commande en suivant les étapes ci-dessous:

  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. Dans le sélecteur de projet, choisissez votre projet Google Cloud.

  3. En haut de la page, sélectionnez l'onglet 2nd gen (2e génération).

  4. Cliquez sur Créer une connexion hôte pour connecter un nouvel hôte à Cloud Build.

  5. Sélectionnez Bitbucket 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.

    3. Dans la section Host details (Détails de l'hôte), sélectionnez Bitbucket Cloud (Cloud Bitbucket) comme type d'hôte.

    4. Espace de travail: saisissez l'ID de l'espace de travail pour votre dépôt Bitbucket Cloud.

    5. Jeton d'accès: saisissez votre jeton d'accès administrateur créé précédemment.

    6. Jeton d'accès en lecture: saisissez le jeton d'accès en lecture créé précédemment.

  7. Cliquez sur Se connecter.

    La nouvelle association apparaît sur la page Dépôts.

gcloud

  1. Pour stocker vos identifiants, procédez comme suit:

    1. Stockez vos jetons d'accès dans Secret Manager dans votre compte Google Cloud à l'aide des commandes suivantes:

      echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=-
      
      echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-
      

      Où :

      • ADMIN_TOKEN est votre jeton d'accès administrateur.
      • ADMIN_SECRET_NAME est le nom que vous voulez donner à le secret de votre jeton d'accès administrateur dans Secret Manager.
      • READ_TOKEN est votre jeton d'accès en lecture.
      • READ_SECRET_NAME est le nom que vous voulez donner à votre le secret du jeton d'accès en lecture dans Secret Manager.
    2. Créer un secret de webhook dans Secret Manager en exécutant la commande suivante, où WEBHOOK_SECRET_NAME est le nom que vous souhaitez attribuer au secret de votre webhook:

      echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
      
    3. Si vos secrets ne sont pas tous dans le même projet, accordez l'accès au compte de service Cloud Build en exécutant la commande suivante:

      PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      CLOUD_BUILD_SERVICE_ACCOUNT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
      gcloud secrets add-iam-policy-binding ADMIN_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      
      gcloud secrets add-iam-policy-binding READ_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      
      gcloud secrets add-iam-policy-binding WEBHOOK_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      

      Où :

      • PROJECT_ID est l'ID de votre projet Google Cloud.
      • ADMIN_SECRET_NAME est le nom de votre le secret du jeton d'administrateur.
      • READ_SECRET_NAME est le nom de votre le secret du jeton de lecture.
      • WEBHOOK_SECRET_NAME est le nom de votre secret du webhook.
  2. Connectez Cloud Build à votre hôte Bitbucket Cloud à l'aide de la classe la commande suivante:

    gcloud builds connections create bitbucket-cloud CONNECTION_NAME \
        --workspace=WORKSPACE_ID \
        --project=PROJECT_ID \
        --region=REGION \
        --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_SECRET_NAME/versions/latest \
        --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_SECRET_NAME/versions/latest \
        --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET_NAME/versions/1
    

    Où :

    • CONNECTION_NAME est le nom que vous souhaitez attribuer à la connexion à votre hôte Bitbucket Cloud.
    • WORKSPACE_ID est l'ID de l'espace de travail de votre dépôt Bitbucket Cloud.
    • PROJECT_ID est l'ID de votre projet Google Cloud.
    • REGION est la région de votre connexion hôte.
    • ADMIN_SECRET_NAME est le nom du secret de votre jeton d'administrateur.
    • READ_SECRET_NAME est le nom de votre secret de jeton d'accès en lecture.
    • WEBHOOK_SECRET_NAME est le nom de votre secret de webhook.

Terraform

Vous pouvez connecter votre hôte Bitbucket Cloud à Cloud Build en utilisant 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 Secret Manager pour stocker les jetons Bitbucket.
  • Accorde les autorisations nécessaires au rôle Cloud Build compte de service (P4SA) par produit et par projet pour accéder aux secrets.
  • Crée une connexion Bitbucket Cloud.

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    provider "google" {
      project = "PROJECT_ID"
      region = "REGION"
    }
    
    // Create secrets and grant permissions to the P4SA
    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 and add the repository resource
    resource "google_cloudbuildv2_connection" "my-connection" {
        project = "PROJECT_ID"
        location = "REGION"
        name = "CONNECTION_NAME"
    
        bitbucket_cloud_config {
            workspace = "WORKSPACE_ID"
            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 l'ID de votre projet Google Cloud.
  • PROJECT_NUMBER est votre projet Google Cloud. numéro.
  • ADMIN_TOKEN_NAME est le nom de votre jeton avec Accès aux niveaux d'accès webhook, repository, repository:admin et pullrequest.
  • ADMIN_TOKEN_VALUE est la valeur de votre ADMIN_TOKEN_NAME
  • READ_TOKEN_NAME est le nom de votre jeton avec repository:read.
  • READ_TOKEN_VALUE est la valeur de votre READ_TOKEN_NAME
  • WEBHOOK_SECRET_NAME est le nom de votre secret de webhook.
  • WEBHOOK_SECRET_VALUE est la valeur de votre WEBHOOK_SECRET_NAME
  • REGION est la région de votre connexion.
  • CONNECTION_NAME est le nom de votre connexion.
  • WORKSPACE_ID est l'ID de l'espace de travail de votre Bitbucket. Cloud Repository

Étape suivante