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 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:
Accedi a Bitbucket Cloud.
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
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:
Apri la pagina Repository nella console Google Cloud .
Viene visualizzata la pagina Repositori.
Nel selettore di progetti, seleziona il tuo progetto Google Cloud .
Nella parte superiore della pagina, seleziona la scheda 2ª gen..
Fai clic su Crea connessione host per collegare 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 area di lavoro 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 Repositori.
gcloud
Per memorizzare le credenziali:
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.
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 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.
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
epullrequest
. - 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
- Scopri come connetterti a un repository Bitbucket Cloud.
- Scopri come visualizzare i risultati della build.
- Scopri come eseguire deployment blu/verdi su Compute Engine.