Questa pagina spiega come connettere un host Bitbucket Server a Cloud Build. La connessione a un host Bitbucket Server integra i repository Bitbucket Server con Cloud Build. In questo modo, puoi configurare i trigger di build per creare repository da Bitbucket Server e creare repository da Bitbucket Server in una rete privata.
Prima di iniziare
Abilita le API Cloud Build, Secret Manager e Compute Engine.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.
- Prepara il codice sorgente in un repository Bitbucket Server.
- Avere un
Dockerfileo un file di configurazione Cloud Build nel repository di origine Bitbucket Server. - Se non hai installato un'istanza Bitbucket Server, consulta la Guida all'installazione di Bitbucket Server per le istruzioni.
Autorizzazioni IAM obbligatorie
Per ottenere le autorizzazioni
necessarie per connetterti all'host Bitbucket Server,
chiedi all'amministratore di concederti il ruolo IAM
Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) sul 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.
Se la tua istanza Bitbucket Server è ospitata in una rete privata, consulta Creare repository da Bitbucket Server in una rete privata per scoprire di più sui ruoli IAM aggiuntivi richiesti per configurare una connessione host.
Creare token di accesso personali
Prima di creare una connessione host per l'istanza Bitbucket Server, crea token di accesso personali in Bitbucket Server procedendo nel seguente modo:
Accedi alla tua istanza Bitbucket Server.
Segui le istruzioni per creare token di accesso HTTP per il tuo account utente.
Crea un token di accesso con l'ambito amministratore del repository da utilizzare per collegare e scollegare i repository.
Crea un token di accesso con l'ambito lettura del repository per garantire che i repository Cloud Build possano accedere al codice sorgente nei repository.
Salva i valori dei token in modo sicuro. Li utilizzerai per connetterti al repository Bitbucket Server.
Connettiti a un host Bitbucket Server
Console
Per connettere l'host Bitbucket Server a Cloud Build:
Apri la pagina Repository nella console Google Cloud .
Nella parte superiore della pagina, seleziona la scheda 2ª gen..
Nel selettore di progetti nella barra superiore, seleziona il tuo progetto Google Cloud .
Fai clic su Crea connessione host per connettere un nuovo host a Cloud Build.
Nel riquadro a sinistra, seleziona Bitbucket come provider di origine.
Nella sezione Configura connessione, inserisci le seguenti informazioni:
Regione: seleziona una regione per la connessione. Devi specificare una regione. La tua connessione non può esistere a livello globale.
Name (Nome): inserisci un nome per la connessione.
Nella sezione Dettagli host, seleziona o inserisci le seguenti informazioni:
Host Bitbucket: seleziona Bitbucket Data Center come host.
URL host: inserisci l'URL del tuo host.
(Facoltativo) Se vuoi gestire le chiavi di crittografia utilizzate per criptare i token di accesso per i tuoi repository Bitbucket Server, vai alla sezione Crittografia e scegli una chiave Cloud Key Management Service. Per saperne di più, vedi Attivare le chiavi di crittografia gestite dal cliente per Secret Manager.
Nella sezione Networking, seleziona una delle seguenti opzioni:
Internet pubblico: seleziona questa opzione se la tua istanza è accessibile tramite internet pubblico.
Rete privata: seleziona questa opzione se la tua istanza è ospitata su una rete privata. Quindi, configura quanto segue:
Certificato CA: il certificato autofirmato. Fai clic su Sfoglia per aprire il certificato dalla macchina locale.
Il certificato non deve superare le dimensioni di 10 KB e deve essere in formato PEM (
.pem,.cero.crt). Se lasci questo campo vuoto, Cloud Build utilizza un certificato del set predefinito di certificati.Nella sezione Servizio Service Directory, seleziona la località per il tuo servizio:
- Nel progetto CURRENT_PROJECT
- In un altro progetto
- Inserisci manualmente
Inserisci le seguenti informazioni:
Progetto: se hai selezionato In un altro progetto o Inserisci manualmente, inserisci o seleziona l'ID progetto Google Cloud dal menu a discesa.
Regione: questo campo preselezione la regione della connessione. La regione specificata per il tuo servizio deve corrispondere a quella associata alla tua connessione.
Spazio dei nomi: seleziona lo spazio dei nomi del servizio.
Servizio: seleziona il nome del servizio nel tuo spazio dei nomi.
Nella sezione Token di accesso HTTP, inserisci le seguenti informazioni:
Token di accesso amministrativo: inserisci il token con accesso all'ambito repository admin. Questo token viene utilizzato per collegare e scollegare i repository.
Token di accesso in lettura: inserisci il token con accesso all'ambito repository read. I trigger di Cloud Build utilizzano questo token per accedere al codice sorgente nei repository.
Fai clic su Connetti.
Dopo aver fatto clic sul pulsante Connetti, i tuoi token di accesso personali vengono memorizzati in modo sicuro in Secret Manager. Dopo la connessione all'host Bitbucket Server, Cloud Build crea un secret webhook per tuo conto. Puoi visualizzare e gestire i tuoi secret nella pagina Secret Manager.
gcloud
Crea un secret webhook in Secret Manager eseguendo il comando seguente, dove WEBHOOK_SECRET è il nome che vuoi assegnare al tuo secret webhook:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-Se memorizzi i tuoi secret in un progetto Google Cloud diverso da quello che prevedi di utilizzare per creare una connessione host, esegui il seguente comando per concedere al tuo progetto l'accesso al service agent Cloud Build:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \ --role="roles/secretmanager.admin"Dove:
- PROJECT_ID è l'ID progetto Google Cloud .
Ora puoi procedere a connettere l'host Bitbucket Server a Cloud Build.
Esegui questo comando per creare una connessione Bitbucket Server:
gcloud builds connections create bitbucketserver CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_TOKEN/versions/SECRET_VERSION \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION ``` Where:- CONNECTION_NAME è un nome per la connessione host Bitbucket Server in Cloud Build.
- HOST_URI è l'URI della tua istanza Bitbucket Server.
- PROJECT_ID è il tuo Google Cloud ID progetto.
- REGION è la regione per la tua connessione.
- ADMIN_TOKEN è il nome del token con ambito repository admin.
- READ_TOKEN è il nome del token con ambito repository read.
- SECRET_VERSION è la versione del secret.
- WEBHOOK_SECRET è il secret webhook.
Terraform
Puoi connettere il tuo host Bitbucket Server a Cloud Build utilizzando Terraform.
Nel seguente esempio, lo snippet di codice esegue queste operazioni:
- Configura il provider Google Terraform.
- Crea un secret Secret Manager per archiviare i token Bitbucket.
- Concede le autorizzazioni necessarie al service agent Cloud Build per accedere ai secret.
Crea una connessione Bitbucket Server.
// 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 resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_server_config { host_uri = "BITBUCKET_URI" 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 token con ambito
repository:admin. - 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 è un nome per la connessione host Bitbucket Server in Cloud Build.
- BITBUCKET_URI è l'URI dell'istanza di Bitbucket Data Center.
Passaggi successivi
- Scopri come connettere un repository Bitbucket Server.
- Scopri come eseguire deployment blu/verdi su Compute Engine.