Connettersi a un host Bitbucket Data Center

Questa pagina spiega come connettere un host Bitbucket Data Center a Cloud Build. La connessione a un host Bitbucket Data Center integra i tuoi repository Bitbucket Data Center con Cloud Build. In questo modo, puoi configurare i trigger di build per creare repository da Bitbucket Data Center e creare repository da Bitbucket Data Center in una rete privata.

Prima di iniziare

  • Enable the Cloud Build and Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Autorizzazioni IAM obbligatorie

Per ottenere le autorizzazioni necessarie per connetterti al tuo host Bitbucket Data Center, chiedi all'amministratore di concederti il ruolo IAM Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) sul tuo account utente. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Se la tua istanza Bitbucket Data Center è ospitata in una rete privata, consulta Creare repository da Bitbucket Data Center in una rete privata per scoprire di più sui ruoli IAM aggiuntivi necessari per configurare una connessione host.

Creare token di accesso personali

Prima di creare una connessione host per l'istanza Bitbucket Data Center, crea token di accesso personale in Bitbucket Data Center procedendo nel seguente modo:

  1. Accedi alla tua istanza di Bitbucket Data Center.

  2. Segui le istruzioni per creare token di accesso HTTP per il tuo account utente.

    1. Crea un token di accesso con l'ambito amministratore del repository da utilizzare per collegare e scollegare i repository.

    2. Crea un token di accesso con l'ambito lettura del repository per garantire che i repository Cloud Build possano accedere al codice sorgente nei repository.

  3. Salva i valori dei token in modo sicuro. Li utilizzerai per connetterti al repository Bitbucket Data Center.

Connettersi a un host Bitbucket Data Center

Console

Per connettere l'host Bitbucket Data Center a Cloud Build:

  1. Apri la pagina Repository nella console Google Cloud .

    Apri la pagina Repository

  2. Nella parte superiore della pagina, seleziona la scheda 2ª gen..

  3. Nel selettore di progetti nella barra superiore, seleziona il tuo progetto Google Cloud .

  4. Fai clic su Crea connessione host per connettere un nuovo host a Cloud Build.

  5. Nel riquadro a sinistra, seleziona Bitbucket come provider di origine.

  6. Nella sezione Configura connessione, inserisci le seguenti informazioni:

    1. Regione: seleziona una regione per la connessione. Devi specificare una regione. La tua connessione non può esistere a livello globale.

    2. Name (Nome): inserisci un nome per la connessione.

  7. Nella sezione Dettagli host, seleziona o inserisci le seguenti informazioni:

    1. Host Bitbucket: seleziona Bitbucket Data Center come host.

    2. URL host: inserisci l'URL dell'host Bitbucket Data Center.

  8. Nella sezione Networking, seleziona una delle seguenti opzioni:

    1. Internet pubblico: seleziona questa opzione se la tua istanza è accessibile tramite internet pubblico.

    2. Rete privata: seleziona questa opzione se la tua istanza è ospitata su una rete privata.

      1. Certificato CA: il certificato autofirmato. Fai clic su Sfoglia per aprire il certificato dalla macchina locale.

        Il certificato non deve superare le dimensioni di 10 KB e deve essere in formato PEM (.pem, .cer o .crt). Se lasci questo campo vuoto, Cloud Build utilizza un certificato del set predefinito di certificati.

      2. Nella sezione Servizio di Service Directory, seleziona la posizione del tuo servizio. Puoi accettare l'ID progetto precompilato o specificarne uno diverso.

        1. Seleziona il progetto del tuo servizio. Puoi accettare il progetto precompilato, scegliere In un altro progetto per sfogliare o scegliere Inserisci manualmente.

          Se scegli Inserisci manualmente, inserisci le seguenti informazioni:

          • Progetto: inserisci o seleziona l' Google Cloud ID progetto dal menu a discesa.

          • Regione: questo campo preselezione la regione della connessione. La regione specificata per il servizio deve corrispondere a quella associata alla connessione.

        2. Spazio dei nomi: seleziona lo spazio dei nomi del tuo servizio.

        3. Servizio: seleziona il nome del servizio nel tuo spazio dei nomi.

  9. Nella sezione Token di accesso HTTP, inserisci le seguenti informazioni:

    1. Token di accesso amministrativo: inserisci il token con accesso all'ambito repository admin. Questo token viene utilizzato per collegare e scollegare i repository.

    2. Token di accesso in lettura: inserisci il token con accesso all'ambito repository read. I trigger di Cloud Build utilizzano questo token per accedere al codice sorgente nei repository.

  10. Fai clic su Connetti.

    Dopo aver fatto clic sul pulsante Connetti, i tuoi token di accesso personali vengono memorizzati in modo sicuro in Secret Manager. Dopo la connessione all'host Bitbucket Data Center, Cloud Build crea un secret webhook per tuo conto. Puoi visualizzare e gestire i tuoi secret nella pagina Secret Manager.

gcloud

  1. Archivia i token in Secret Manager.

  2. Crea un secret webhook in Secret Manager eseguendo il comando seguente, dove WEBHOOK_SECRET è il nome che vuoi dare al tuo secret webhook:

      cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-
    
  3. Se memorizzi i tuoi secret in un progetto Google Cloud diverso da quello che prevedi di utilizzare per creare una connessione host, esegui questo comando per concedere al tuo progetto l'accesso all'agente di servizio 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"
    

    Dove:

    • PROJECT_ID è l'ID progetto Google Cloud .

Ora puoi procedere a connettere l'host Bitbucket Data Center a Cloud Build.

  1. Esegui questo comando per creare una connessione 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 è un nome per la connessione host Bitbucket Data Center in Cloud Build.
    • HOST_URI è l'URI dell'istanza di Bitbucket Data Center.
    • PROJECT_ID è il tuo Google Cloud ID progetto.
    • REGION è la regione per la tua connessione.
    • ADMIN_TOKEN è il nome del tuo token con ambito repository admin.
    • READ_TOKEN è il nome del tuo token con ambito repository read.
    • SECRET_VERSION è la versione del secret.
    • WEBHOOK_SECRET è il secret webhook.

Terraform

Puoi connettere l'host Bitbucket Data Center a Cloud Build utilizzando Terraform.

Nel seguente esempio, lo snippet di codice esegue queste operazioni:

  • Configura il provider Google Terraform.
  • Crea un secret di Secret Manager per archiviare i token Bitbucket.
  • Concede le autorizzazioni necessarie al service agent Cloud Build per accedere ai secret.
  • Crea una connessione 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
        ]
    }
    

Dove:

  • PROJECT_ID è il tuo Google Cloud ID progetto.
  • PROJECT_NUMBER è il numero del tuo progetto Google Cloud .
  • ADMIN_TOKEN_NAME è il nome del tuo token con ambito repository:admin.
  • ADMIN_TOKEN_VALUE è il valore del tuo ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME è il nome del tuo token con ambito repository:read.
  • READ_TOKEN_VALUE è il valore del tuo READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME è il nome del secret del webhook.
  • WEBHOOK_SECRET_VALUE è il valore del tuo WEBHOOK_SECRET_NAME.
  • REGION è la regione per la tua connessione.
  • CONNECTION_NAME è un nome per la connessione host Bitbucket Data Center in Cloud Build.
  • BITBUCKET_URI è l'URI della tua istanza Bitbucket Data Center.

Ruotare i token di accesso Bitbucket Data Center vecchi o scaduti

Se il token di accesso a Bitbucket Data Center scade, la connessione dell'host Cloud Build viene disconnessa dal repository Bitbucket Data Center. Di conseguenza, visualizzerai errori nelle seguenti circostanze:

  • Quando provi a collegare una connessione Cloud Build a un repository Bitbucket Data Center, viene visualizzato un messaggio Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection.

  • Nella pagina Trigger, quando fai clic su Esegui, si apre la pagina Esegui trigger e viene visualizzato un messaggio Failed to list branches. You can still enter one manually.

Per ruotare un token precedente o scaduto per la connessione:

  1. Trova i segreti associati alla connessione host:

    1. Esegui questo comando:

      gcloud builds connections describe CONNECTION_PATH --region=REGION
      

      Dove:

      • CONNECTION_PATH è il percorso della connessione host di Bitbucket Data Center in Cloud Build, nel formato projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME.
      • REGION è la regione per la tua connessione.
    2. Nell'output del comando, cerca i valori dei campi del token utente. readAuthorizerCredential.userTokenSecretVersion mostra il nome di Secret Manager del token Read e authorizerCredential.userTokenSecretVersion mostra il nome di Secret Manager del token Admin. Questi nomi vengono archiviati come secret in Secret Manager.

  2. Ruota ogni token di accesso in Bitbucket Data Center:

    1. Vai al repository Bitbucket Data Center connesso alla connessione host Cloud Build.

    2. Segui le istruzioni riportate nella documentazione di Bitbucket per ruotare un token di accesso. Quando ruoti un token, Bitbucket Data Center ne crea uno nuovo con nuove credenziali e invalida la versione precedente. Il token ruotato ha le stesse autorizzazioni e lo stesso ambito del token originale.

    3. Copia l'ID del token ruotato.

  3. Crea una nuova versione del secret per ogni token:

    1. Apri la pagina Secret Manager nella console Google Cloud :

      Apri la pagina Secret Manager

    2. Per ogni token che hai ruotato, trova il nome del secret che hai identificato nel passaggio 1 e fai clic su Azioni, quindi fai clic su Aggiungi nuova versione.

    3. Nella finestra Aggiungi nuova versione, inserisci l'ID del token ruotato e poi fai clic su Aggiungi nuova versione.

Per saperne di più, consulta Token di accesso e Migliorare la sicurezza in Bitbucket: introduzione della scadenza per i token di accesso nella documentazione di Bitbucket Data Center.

Passaggi successivi