Nesta página, explicamos como conectar um host do Bitbucket Cloud ao Cloud Build.
Antes de começar
-
Enable the Cloud Build, Secret Manager, and Compute Engine APIs.
- Verifique se o código-fonte está em um repositório do Bitbucket Cloud.
- Verifique se o repositório de origem do Bitbucket Cloud tem um
Dockerfile
ou um arquivo de configuração do Cloud Build. - Instale a Google Cloud CLI para usar comandos
gcloud
.
Permissões do IAM obrigatórias
Para receber as permissões necessárias para se conectar,
peça ao administrador para conceder a você o
papel do IAM de administrador da conexão do Cloud Build (cloudbuild.connectionAdmin
)
na sua conta de usuário.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Criar tokens de acesso do Bitbucket Cloud
Crie os dois tokens de acesso a seguir no Bitbucket Cloud:
- Token de acesso de administrador: para conectar e desconectar repositórios.
- Token de acesso de leitura: permite que o Cloud Build acesse seu código-fonte.
Para criar esses tokens, siga estas etapas:
Faça login no Bitbucket Cloud.
Siga as instruções do Bitbucket Cloud para criar tokens de acesso vinculados ao seu repositório, projeto ou espaço de trabalho.
Conceda as seguintes permissões:
Token de acesso de administrador:
- Repositórios: leitura e administrador
- Pull requests: Ler
- Webhooks: leitura e gravação
Token de acesso de leitura:
- Repositórios: Ler
Copie seus tokens para usar nos procedimentos a seguir.
Conectar-se a um host do Bitbucket Cloud
Console
Para conectar o Cloud Build ao host do Bitbucket Cloud, siga estas etapas:
Abra a página Repositórios no console do Google Cloud.
Você vai encontrar a página Repositórios.
No seletor de projetos, selecione seu projeto do Google Cloud.
Na parte de cima da página, selecione a guia 2ª geração.
Clique em Criar conexão de host para conectar um novo host ao Cloud Build.
Selecione Bitbucket como seu provedor de origem.
Na seção Configurar conexão, insira as seguintes informações:
Região: selecione uma região para a conexão.
Nome: insira um nome para a conexão.
Na seção Detalhes do host, selecione Bitbucket Cloud como o tipo de host.
Workspace: insira o ID do espaço de trabalho do seu repositório do Bitbucket Cloud.
Token de acesso: insira o token de acesso de administrador criado anteriormente.
Token de acesso de leitura: insira o token de acesso de leitura criado anteriormente.
Clique em Conectar.
A nova conexão aparece na página Repositórios.
gcloud
Siga estas etapas para armazenar suas credenciais:
Para armazenar seus tokens de acesso no Secret Manager no projetoGoogle Cloud , execute os seguintes comandos:
echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=- echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-
Em que:
- ADMIN_TOKEN é o token de acesso de administrador.
- ADMIN_SECRET_NAME é o nome que você quer dar ao secret do token de acesso do administrador no Secret Manager.
- READ_TOKEN é o token de acesso de leitura.
- READ_SECRET_NAME é o nome que você quer dar ao secret do token de acesso de leitura no Secret Manager.
Crie um secret de webhook no Secret Manager executando o comando abaixo, em que WEBHOOK_SECRET_NAME é o nome que você quer dar ao secret de webhook:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
Se os segredos não estiverem todos no mesmo projeto, conceda acesso ao agente de serviço do Cloud Build executando o seguinte:
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"
Em que:
- PROJECT_ID é o Google Cloud ID do projeto.
- ADMIN_SECRET_NAME é o nome do secret do token de administrador.
- READ_SECRET_NAME é o nome do secreto de token de leitura.
- WEBHOOK_SECRET_NAME é o nome do secret do webhook.
Conecte o Cloud Build ao host do Bitbucket Cloud usando o seguinte 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
Em que:
- CONNECTION_NAME é o nome que você quer dar à conexão com o host do Bitbucket Cloud.
- WORKSPACE_ID é o ID do espaço de trabalho do repositório do Bitbucket Cloud.
- PROJECT_ID é o Google Cloud ID do projeto.
- REGION é a região da conexão do host.
- ADMIN_SECRET_NAME é o nome do secret do token de administrador.
- READ_SECRET_NAME é o nome do secret do token de acesso de leitura.
- WEBHOOK_SECRET_NAME é o nome do secret do webhook.
Terraform
É possível conectar o host do Bitbucket Cloud ao Cloud Build usando o Terraform.
No exemplo abaixo, o snippet de código faz o seguinte:
- Configura o provedor do Google do Terraform.
- Cria um secret do Secret Manager para armazenar os tokens do Bitbucket.
- Concede as permissões necessárias ao agente de serviço do Cloud Build para acessar segredos.
Cria uma conexão com o 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 ] }
Em que:
- PROJECT_ID é o Google Cloud ID do projeto.
- PROJECT_NUMBER é o número do seu Google Cloud projeto.
- ADMIN_TOKEN_NAME é o nome do token com
webhook
,repository
,repository:admin
e acesso de escopopullrequest
. - ADMIN_TOKEN_VALUE é o valor de ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME é o nome do token com escopo
repository:read
. - READ_TOKEN_VALUE é o valor de READ_TOKEN_NAME.
- WEBHOOK_SECRET_NAME é o nome do secret do webhook.
- WEBHOOK_SECRET_VALUE é o valor de WEBHOOK_SECRET_NAME.
- REGION é a região da sua conexão.
- CONNECTION_NAME é o nome da conexão.
- WORKSPACE_ID é o ID do Workspace do repositório do Bitbucket Cloud.
A seguir
- Saiba como se conectar a um repositório do Bitbucket Cloud.
- Saiba como ver os resultados da build.
- Saiba como realizar implantações azul-verde no Compute Engine.