Questa pagina spiega come connettersi a un host Bitbucket Cloud in Cloud Build.
Prima di iniziare
-
Abilita le API Cloud Build, Secret Manager, and Compute Engine.
- Assicurati che il codice sorgente si trovi in un repository Bitbucket Cloud
- Assicurati che il repository di origine Bitbucket Cloud abbia un valore
Dockerfile
o un File di configurazione di 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
Amministratore connessioni Cloud Build (cloudbuild.connectionAdmin
)
ruolo IAM per il tuo account utente.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Creazione token di accesso Bitbucket Cloud
Crea i due seguenti token di accesso in Bitbucket Cloud:
- Token di accesso amministrativo, per la connessione e la disconnessione repository.
- Token di accesso in lettura per consentire a Cloud Build di accedere all'origine le API nel tuo codice.
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, progetto oppure area di lavoro.
Concedi le seguenti autorizzazioni:
Token di accesso amministrativo:
- Repository: Read e Admin
- Richieste di pull: Lettura
- Webhook: lettura e scrittura
Token di accesso in lettura:
- Repository: lettura
Copia i token per utilizzarli nelle seguenti procedure.
Connettiti a un host Bitbucket Cloud
Console
Connetti Cloud Build all'host Bitbucket Cloud completando seguenti passaggi:
Apri la pagina Repository nella console Google Cloud.
Verrà visualizzata la pagina Repository.
Nel selettore di progetti, seleziona il tuo progetto Google Cloud.
Nella parte superiore della pagina, seleziona la scheda 2a generazione.
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.
Area di lavoro: inserisci l'ID area di lavoro del 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 archiviare le tue credenziali:
Archivia i token di accesso in Secret Manager in Google 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 assegnare il 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 tuo il secret del token di accesso in lettura in Secret Manager.
Crea un secret webhook in Secret Manager eseguendo questo comando, dove WEBHOOK_SECRET_NAME è il nome da assegnare al secret webhook:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
Se i tuoi secret non sono tutti nello stesso progetto, concedi l'accesso ai Account 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 ID progetto Google Cloud.
- ADMIN_SECRET_NAME è il nome del tuo il secret del token amministrativo.
- READ_SECRET_NAME è il nome del tuo lettura del secret del token.
- WEBHOOK_SECRET_NAME è il nome del tuo secret webhook.
Connetti Cloud Build all'host Bitbucket Cloud utilizzando 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 al tuo host Bitbucket Cloud.
- WORKSPACE_ID è l'ID area di lavoro del tuo repository Bitbucket Cloud.
- PROJECT_ID è il tuo ID progetto Google Cloud.
- REGION è la regione per la tua 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 tuo secret webhook.
Terraform
Puoi connettere il tuo host Bitbucket Cloud a Cloud Build utilizzando con Terraform.
Nell'esempio riportato di seguito, lo snippet di codice esegue le seguenti operazioni:
- Configura il provider Google Terraform.
- Crea un secret di Secret Manager per archiviare i token Bitbucket.
- Concede le autorizzazioni necessarie a Cloud Build account di servizio (P4SA) per prodotto e per progetto 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 P4SA 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 ID progetto Google Cloud.
- PROJECT_NUMBER è il tuo progetto Google Cloud numero.
- ADMIN_TOKEN_NAME è il nome del tuo token con
Accesso agli ambiti
webhook
,repository
,repository:admin
epullrequest
. - ADMIN_TOKEN_VALUE è il valore di ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME è il nome del tuo token con
Ambito
repository:read
. - READ_TOKEN_VALUE è il valore di READ_TOKEN_NAME.
- WEBHOOK_SECRET_NAME è il nome del tuo secret webhook.
- WEBHOOK_SECRET_VALUE è il valore di WEBHOOK_SECRET_NAME.
- REGION è la regione per la connessione.
- CONNECTION_NAME è il nome della tua connessione.
- WORKSPACE_ID è l'ID area di lavoro del tuo Bitbucket nel repository di Google 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.