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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- Assicurati che il codice sorgente si trovi in un repository Bitbucket Cloud.
- Assicurati che il repository di origine Bitbucket Cloud abbia un
Dockerfileo un file di configurazione Cloud Build. - Installa Google Cloud CLI per utilizzare i comandi
gcloud.
Autorizzazioni IAM obbligatorie
Per assicurarti che disponga delle autorizzazioni necessarie per connettersi,
chiedi all'amministratore di concedere a il ruolo IAM Amministratore connessione Cloud Build (cloudbuild.connectionAdmin) sul tuo account utente.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
L'amministratore potrebbe anche essere in grado di concedere le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.
Crea token di accesso Bitbucket Cloud
Crea i due token di accesso seguenti 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, segui questi passaggi:
Accedi a Bitbucket Cloud.
Segui le istruzioni di Bitbucket Cloud per creare token di accesso collegati al tuo repository, al tuo progetto o al tuo workspace.
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:
- Repository: Lettura
Copia i token da utilizzare nelle procedure seguenti.
Connettersi a un host Bitbucket Cloud
Console
Connetti Cloud Build al tuo host Bitbucket Cloud completando i seguenti passaggi:
Apri la pagina Repository nella console Google Cloud .
Viene visualizzata la pagina Repository.
Nel selettore dei progetti, seleziona il tuo progetto Google Cloud .
Nella parte superiore della pagina, seleziona la scheda 2ª gen..
Fai clic su Crea connessione host per connettere un nuovo host a Cloud Build.
Seleziona Bitbucket come provider di origine.
Nella sezione Configura connessione, inserisci le seguenti informazioni:
Regione: seleziona una regione per la connessione.
Name (Nome): inserisci un nome per la connessione.
Nella sezione Dettagli host, seleziona Bitbucket Cloud come tipo di host.
Workspace: inserisci l'ID workspace per il tuo repository Bitbucket Cloud.
Token di accesso: inserisci il token di accesso amministrativo creato in precedenza.
Token di accesso in lettura: inserisci il token di accesso in lettura creato in precedenza.
Fai clic su Connetti.
La nuova connessione viene visualizzata nella pagina Repository.
gcloud
Per memorizzare le credenziali:
Archivia i token di accesso in Secret Manager nel tuo progettoGoogle Cloud eseguendo questi 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 dare 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 dare al secret del token di accesso in lettura in Secret Manager.
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=-Se i tuoi secret non si trovano tutti nello stesso progetto, concedi l'accesso all'agente di servizio Cloud Build eseguendo questo comando:
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 è il tuo Google Cloud ID progetto.
- ADMIN_SECRET_NAME è il nome del secret del token amministratore.
- READ_SECRET_NAME è il nome del secret del token di lettura.
- WEBHOOK_SECRET_NAME è il nome del secret del webhook.
Connetti Cloud Build al tuo 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/1Dove:
- CONNECTION_NAME è il nome che vuoi assegnare alla connessione all'host Bitbucket Cloud.
- WORKSPACE_ID è l'ID workspace del tuo repository Bitbucket Cloud.
- PROJECT_ID è il tuo Google Cloud ID progetto.
- REGION è la regione per la connessione host.
- ADMIN_SECRET_NAME è il nome del secret del token amministratore.
- READ_SECRET_NAME è il nome del secret del token di accesso in lettura.
- WEBHOOK_SECRET_NAME è il nome del secret del webhook.
Terraform
Puoi connettere il tuo host Bitbucket Cloud 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 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 è il tuo Google Cloud ID progetto.
- PROJECT_NUMBER è il numero del tuo progetto Google Cloud .
- ADMIN_TOKEN_NAME è il nome del tuo token con
accesso all'ambito
webhook,repository,repository:adminepullrequest. - 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 è il nome della connessione.
- WORKSPACE_ID è l'ID workspace del tuo repository Bitbucket Cloud.
Ruotare i token di accesso Bitbucket Cloud vecchi o scaduti
Se il token di accesso a Bitbucket Cloud scade, la connessione host Cloud Build viene disconnessa dal repository Bitbucket Cloud. Di conseguenza, visualizzerai errori nelle seguenti circostanze:
Quando provi a collegare un repository Bitbucket Cloud a una connessione Cloud Build, 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:
Trova i segreti associati alla connessione host:
Esegui questo comando:
gcloud builds connections describe CONNECTION_PATH --region=REGIONDove:
- CONNECTION_PATH è il percorso della connessione host Bitbucket Cloud in Cloud Build, nel formato
projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME. - REGION è la regione per la tua connessione.
- CONNECTION_PATH è il percorso della connessione host Bitbucket Cloud in Cloud Build, nel formato
Nell'output del comando, cerca i valori dei campi del token utente.
readAuthorizerCredential.userTokenSecretVersionmostra il nome di Secret Manager del tokenReadeauthorizerCredential.userTokenSecretVersionmostra il nome di Secret Manager del tokenAdmin. Questi nomi vengono archiviati come secret in Secret Manager.
Ruota ogni token di accesso in Bitbucket Cloud:
Vai al repository Bitbucket Cloud connesso alla connessione host di Cloud Build.
Segui le istruzioni riportate nella documentazione di Bitbucket per ruotare un token di accesso. Quando ruoti un token, Bitbucket Cloud 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.
Copia l'ID del token ruotato.
Crea una nuova versione del secret per ogni token:
Apri la pagina Secret Manager nella console Google Cloud :
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.
Nella finestra Aggiungi nuova versione, inserisci l'ID del token ruotato e poi fai clic su Aggiungi nuova versione.
Passaggi successivi
- Scopri come connetterti a un repository Bitbucket Cloud.
- Scopri come visualizzare i risultati della build.
- Scopri come eseguire deployment blu/verdi su Compute Engine.