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.
- Assicurati che il codice sorgente si trovi in un repository Bitbucket Cloud.
- Assicurati che il repository di origine Bitbucket Cloud abbia un
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 connetterti,
chiedi all'amministratore di concederti il
ruolo IAM Amministratore connessione Cloud Build (cloudbuild.connectionAdmin
) nel 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.
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.
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
Completa i seguenti passaggi per memorizzare le tue 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 comando seguente, 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/1
Dove:
- 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 all'agente di servizio Cloud Build le autorizzazioni necessarie 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:admin
epullrequest
. - 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 tua connessione.
- WORKSPACE_ID è l'ID workspace del tuo repository Bitbucket Cloud.
Passaggi successivi
- Scopri come connetterti a un repository Bitbucket Cloud.
- Scopri come visualizzare i risultati della build.
- Scopri come eseguire deployment blu/verde su Compute Engine.