Connettiti a un host Bitbucket Data Center

Questa pagina spiega come connettere 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 Dockerfile o un file di configurazione Cloud Build nel repository di origine Bitbucket Data Center.
  • Se non hai installato un'istanza di Bitbucket Data Center, consulta 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 Bitbucket Data Center, chiedi all'amministratore di concederti il ruolo IAM Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) sull'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.

Connettersi a un host Bitbucket Data Center

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

  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.

Console

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

  1. Apri la pagina Repository nella console Google Cloud .

    Apri la pagina Repository

    Viene visualizzata 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 Google Cloud progetto.

  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 directory dei servizi, seleziona la posizione del tuo servizio. Puoi accettare l'ID progetto precompilato o specificarne un altro.

        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 le seguenti informazioni:

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

          • Regione: questo campo pre-seleziona la regione della tua 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 archiviati 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}@gcpiam.gserviceaccount.com-sa-cloudbuild."
    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 il tuo 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 all'agente di servizio 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
        siam.gserviceaccount.comecret_data = "WEBHOOK_SECRET_VALUE"
    }
    
    data "google_iam_policy" "p4sa-secretAccessor" {
        binding {
            role = "roles/secretmanager.secretAccessor"
            members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild."]
        }
    }
    
    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.

Passaggi successivi