Se connecter à un hôte de centre de données Bitbucket

Cette page explique comment connecter un 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 du centre de données Bitbucket.
  • Disposer d'un Dockerfile ou d'un Fichier de configuration Cloud Build dans dans le dépôt source de votre centre de données Bitbucket.
  • Si vous n'avez pas installé d'instance Bitbucket Data Center, Installez Bitbucket Data Center pour savoir comment procéder.
  • Pour utiliser les commandes gcloud sur cette page, installez Google Cloud CLI.

Autorisations IAM requises

  • Pour obtenir les autorisations nécessaires pour connecter votre centre de données Bitbucket demandez à votre administrateur de vous accorder Administrateur de connexion Cloud Build (roles/cloudbuild.connectionAdmin) sur le compte utilisateur. Pour plus pour en savoir plus sur l'attribution de rôles, consultez "Gérer l'accès".

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

Se connecter à un hôte de centre de données Bitbucket

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 procédez comme suit:

  1. Connectez-vous à votre centre de données Bitbucket. Compute Engine.

  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 repository admin (administrateur du dépôt) à utiliser pour connecter et déconnecter des dépôts.

    2. Créez un jeton d'accès avec le niveau d'accès lecture du dépôt pour vous assurer Les dépôts Cloud Build peuvent accéder au code source qu'ils contiennent.

Console

Pour connecter l'hôte de votre centre de données Bitbucket à Cloud Build, procédez comme suit:

  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 2nd gen (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 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. Vous devez spécifier un dans la même région. Votre connexion ne peut pas exister globalement.

    2. Name (Nom) : saisissez le nom de votre connexion.

  7. Dans la section Host details (Détails de l'hôte), sélectionnez ou saisissez les informations suivantes informations:

    1. Bitbucket host (Hôte Bitbucket) : sélectionnez Bitbucket Data Center en tant qu'hôte.

    2. Host URL (URL de l'hôte) : saisissez l'URL de l'hôte de votre centre de données Bitbucket.

  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. à l'aide de l'Internet public.

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

      1. Certificat CA: votre certificat autosigné. Cliquez sur Parcourir. pour ouvrir le certificat à partir de votre ordinateur local.

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

      2. Dans la section Service de l'Annuaire des services, sélectionnez l'emplacement de votre service. Vous pouvez accepter les champs ou spécifiez un autre projet.

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

          Si vous choisissez saisissez les informations suivantes:

          • Project (Projet) : saisissez ou sélectionnez votre projet Google Cloud l'ID du projet dans le menu déroulant.

          • Région: ce champ présélectionne la région . La région spécifiée pour votre service doit correspondent à la région 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'administrateur du dépôt. un accès au niveau d'accès. Ce jeton est utilisé pour la connexion et la déconnexion des dépôts.

    2. Read access token (Jeton d'accès en lecture) : saisissez le jeton avec le champ d'application repository read (lecture du dépôt). y accéder. Les déclencheurs Cloud Build utilisent ce jeton pour accéder à la source dans des 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é à Hôte du centre de données Bitbucket, Cloud Build crée un webhook en votre nom. Vous pouvez consulter et gérer vos secrets Secret Manager .

gcloud

  1. Stockez vos jetons dans Secret Manager.

  2. Créer un secret de webhook dans Secret Manager en exécutant la commande suivante, où WEBHOOK_SECRET est le nom que vous voulez donner à votre Secret du 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'API Cloud Build compte de service:

    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 l'hôte de votre centre de données Bitbucket à Cloud Build.

  1. Exécutez la commande suivante pour créer une connexion au centre de données Bitbucket:

    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 est l'ID de votre projet Google Cloud.
    • REGION est la région pour votre connexion.
    • ADMIN_TOKEN est le nom de votre jeton avec administrateur du dépôt.
    • READ_TOKEN est le nom de votre jeton avec champ d'application lecture du dépôt.
    • SECRET_VERSION est la version de votre secret.
    • WEBHOOK_SECRET est le secret de votre webhook.

Terraform

Vous pouvez connecter l'hôte de votre centre de données Bitbucket à 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.
  • 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 au centre de données Bitbucket.

    // 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 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 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 repository:admin.
  • 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.
  • BITBUCKET_URI est l'URI de vos données Bitbucket. Cloud Storage.

Étape suivante