Connettiti a un host Bitbucket Data Center

Questa pagina spiega come collegare un host Bitbucket Data Center a Cloud Build.

Prima di iniziare

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  • Prepara il codice sorgente in un repository Bitbucket Data Center.
  • Avere un file Dockerfile o un file di configurazione Cloud Build nel tuo repository di origine Bitbucket Data Center.
  • Se non hai installato un'istanza di Bitbucket Data Center, consulta la sezione Installare Bitbucket Data Center per istruzioni.
  • Per utilizzare i comandi gcloud in questa pagina, installa Google Cloud CLI.

Autorizzazioni IAM richieste

  • Per ottenere le autorizzazioni necessarie per connettere l'host del tuo Data Center Bitbucket, chiedi all'amministratore di concederti il ruolo IAM Amministratore delle connessioni Cloud Build (roles/cloudbuild.connectionAdmin) nell'account utente. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.

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

Connettiti a un host Bitbucket Data Center

Prima di creare una connessione all'host per la tua istanza Bitbucket Data Center, devi creare token di accesso personale in Bitbucket Data Center completando i seguenti passaggi:

  1. Accedi all'istanza 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 assicurarti che i repository Cloud Build possano accedere al codice sorgente nei repository.

Console

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

  1. Apri la pagina Repositories (Repositoi) nella console Google Cloud.

    Apri la pagina Repositori

    Viene visualizzata la pagina Repositori.

  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 collegare 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. 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 di Bitbucket Data Center.

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

    1. Rete internet pubblica: seleziona questa opzione se l'istanza è accessibile tramite la rete internet pubblica.

    2. Rete privata: seleziona questa opzione se l'istanza è ospitata su una rete privata.

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

        Il certificato non deve superare i 10 KB di dimensione e deve essere in formato PEM (.pem, .cer o .crt). Se lasci vuoto questo campo, Cloud Build utilizza un certificato dall'insieme predefinito di certificati.

      2. Nella sezione Servizio Directory, seleziona la località del servizio. Puoi accettare l'ID progetto precompilato o specificarne un altro.

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

          Se scegli , inserisci le seguenti informazioni:

          • Progetto: inserisci o seleziona il tuo Google Cloud ID progetto dal menu a discesa.

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

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

        3. Servizio: seleziona il nome del servizio nello 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. Gli 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 token di accesso personali vengono archiviati in modo sicuro in Secret Manager. Dopo aver eseguito 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 seguente comando, dove WEBHOOK_SECRET è il nome che vuoi assegnare al 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 intendi utilizzare per creare una connessione host, esegui il seguente 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 è il tuo Google Cloud ID progetto.

Ora puoi procedere con la connessione dell'host del tuo Data Center Bitbucket a Cloud Build.

  1. Esegui il comando seguente per creare una connessione a 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 è il nome della connessione.
    • 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 token con ambito repository admin.
    • READ_TOKEN è il nome del token con ambito lettura del repository.
    • SECRET_VERSION è la versione del tuo secret.
    • WEBHOOK_SECRET è il tuo secret webhook.

Terraform

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

Nel seguente esempio, lo snippet di codice esegue le seguenti operazioni:

  • Configura il provider Google Terraform.
  • Crea un secret di Secret Manager per archiviare i token di Bitbucket.
  • Concedi all'agente di servizio Cloud Build le autorizzazioni necessarie per accedere ai secret.
  • Crea una connessione a 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 tuo numero Google Cloud di progetto.
  • ADMIN_TOKEN_NAME è il nome del token con ambito repository:admin.
  • ADMIN_TOKEN_VALUE è il valore del tuo ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME è il nome del token con ambito repository:read.
  • READ_TOKEN_VALUE è il valore del tuo READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME è il nome del secret webhook.
  • WEBHOOK_SECRET_VALUE è il valore del tuo WEBHOOK_SECRET_NAME.
  • REGION è la regione per la connessione.
  • CONNECTION_NAME è il nome della connessione.
  • BITBUCKET_URI è l'URI della tua istanza Bitbucket Data Center.

Passaggi successivi