Connettiti a un host Bitbucket Cloud

Questa pagina spiega come connettere un host Bitbucket Cloud a Cloud Build.

Prima di iniziare

  • Enable the Cloud Build, Secret Manager, and Compute Engine APIs.

    Enable the APIs

  • Assicurati che il codice sorgente si trovi in un repository Bitbucket Cloud.
  • Assicurati che il repository di origine Bitbucket Cloud contenga un file Dockerfile o un file di configurazione Cloud Build.
  • Installa Google Cloud CLI per utilizzare i comandi gcloud.

Autorizzazioni IAM richieste

Per ottenere le autorizzazioni necessarie per la connessione, chiedi all'amministratore di concederti il ruolo IAM Amministratore delle connessioni Cloud Build (cloudbuild.connectionAdmin) nel tuo account utente. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

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

Creare token di accesso Bitbucket Cloud

Crea i seguenti due token di accesso in Bitbucket Cloud:

  • Token di accesso amministrativo per collegare e scollegare i repository.
  • Token di accesso in lettura per consentire a Cloud Build di accedere al codice sorgente.

Per creare questi token:

  1. Accedi a Bitbucket Cloud.

  2. Segui le istruzioni di Bitbucket Cloud per creare token di accesso collegati al tuo repository, al tuo progetto o alla tua area di lavoro.

    Concedi le seguenti autorizzazioni:

    • Token di accesso amministrativo:

      • Repository: Lettura e Amministratore
      • Richieste di pull: Lettura
      • Webhook: Lettura e Scrittura
    • Token di accesso in lettura:

      • Repositori: Lettura
  3. Copia i token da utilizzare nelle procedure seguenti.

Connettiti a un host Bitbucket Cloud

Console

Connetti Cloud Build all'host Bitbucket Cloud completando i seguenti passaggi:

  1. Apri la pagina Repository nella console Google Cloud .

    Apri la pagina Repositori

    Viene visualizzata la pagina Repositori.

  2. Nel selettore di progetti, seleziona il tuo progetto Google Cloud .

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

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

  5. Seleziona Bitbucket come provider di origine.

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

    1. Regione: seleziona una regione per la connessione.

    2. Nome: inserisci un nome per la connessione.

    3. Nella sezione Dettagli host, seleziona Bitbucket Cloud come tipo di host.

    4. Workspace: inserisci l'ID area di lavoro per il tuo repository Bitbucket Cloud.

    5. Token di accesso: inserisci il token di accesso amministrativo creato in precedenza.

    6. Token di accesso in lettura: inserisci il token di accesso in lettura creato in precedenza.

  7. Fai clic su Connetti.

    La nuova connessione viene visualizzata nella pagina Repositori.

gcloud

  1. Per memorizzare le credenziali:

    1. Memorizza i token di accesso in Secret Manager nel tuo progettoGoogle Cloud eseguendo i seguenti comandi:

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

      Dove:

      • ADMIN_TOKEN è il tuo token di accesso amministrativo.
      • ADMIN_SECRET_NAME è il nome che vuoi assegnare al secret del token di accesso amministrativo in Secret Manager.
      • READ_TOKEN è il tuo token di accesso in lettura.
      • READ_SECRET_NAME è il nome che vuoi assegnare al secret del token di accesso in lettura in Secret Manager.
    2. Crea un secret webhook in Secret Manager eseguendo il seguente comando, dove WEBHOOK_SECRET_NAME è il nome che vuoi assegnare al secret webhook:

      echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
      
    3. Se i tuoi secret non si trovano tutti nello stesso progetto, concedi l'accesso all'agente del servizio Cloud Build eseguendo quanto segue:

      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"
      

      Dove:

      • PROJECT_ID è l'ID progetto del tuo Google Cloud .
      • ADMIN_SECRET_NAME è il nome del secret del token di amministratore.
      • READ_SECRET_NAME è il nome del secret del token di lettura.
      • WEBHOOK_SECRET_NAME è il nome del secret del webhook.
  2. Connetti Cloud Build all'host Bitbucket Cloud utilizzando il seguente comando:

    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
    

    Dove:

    • CONNECTION_NAME è il nome che vuoi assegnare alla connessione all'host Bitbucket Cloud.
    • WORKSPACE_ID è l'ID spazio di lavoro per il tuo repository Bitbucket Cloud.
    • PROJECT_ID è l'ID progetto del tuo Google Cloud .
    • REGION è la regione per la connessione all'host.
    • ADMIN_SECRET_NAME è il nome del secret del token di amministratore.
    • READ_SECRET_NAME è il nome del secret del token di accesso in lettura.
    • WEBHOOK_SECRET_NAME è il nome del secret webhook.

Terraform

Puoi connettere l'host Bitbucket Cloud 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.
  • Concede all'agente di servizio Cloud Build le autorizzazioni necessarie per accedere ai segreti.
  • Crea una connessione a 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 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 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
        ]
    }
    

Dove:

  • PROJECT_ID è l'ID progetto del tuo Google Cloud .
  • PROJECT_NUMBER è il numero del progetto Google Cloud .
  • ADMIN_TOKEN_NAME è il nome del token con accesso agli ambiti webhook, repository, repository:admin e pullrequest.
  • 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 tua connessione.
  • CONNECTION_NAME è il nome della connessione.
  • WORKSPACE_ID è l'ID spazio di lavoro per il tuo repository Bitbucket Cloud.

Passaggi successivi