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 para permitir 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
Ler token de acesso:
- Repositórios: Leitura
Copie os tokens para usar nos procedimentos a seguir.
Conectar-se a um host do Bitbucket Cloud
Console
Conecte o Cloud Build ao seu host do Bitbucket Cloud seguindo estas etapas:
Abra a página Repositórios no console do Google Cloud .
Você vai ver a página Repositórios.
No seletor de projetos, selecione seu projeto 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 sua 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 workspace do 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
Conclua as etapas a seguir para armazenar suas credenciais:
Armazene seus tokens de acesso no Secret Manager no seu projetoGoogle Cloud executando 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 é seu token de acesso de administrador.
- ADMIN_SECRET_NAME é o nome que você quer dar ao secret do token de acesso de administrador no Secret Manager.
- READ_TOKEN é seu 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 seguinte comando, 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 seus secrets 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 secret do 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 seu host do Bitbucket Cloud ao Cloud Build usando o Terraform.
No exemplo a seguir, o snippet de código faz o seguinte:
- Configura o provedor do Google para 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 secrets.
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 projeto Google Cloud .
- ADMIN_TOKEN_NAME é o nome do seu token com
acesso ao escopo
webhook
,repository
,repository:admin
epullrequest
. - ADMIN_TOKEN_VALUE é o valor do seu ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME é o nome do seu token com escopo
repository:read
. - READ_TOKEN_VALUE é o valor do seu READ_TOKEN_NAME.
- WEBHOOK_SECRET_NAME é o nome do secret do webhook.
- WEBHOOK_SECRET_VALUE é o valor do seu WEBHOOK_SECRET_NAME.
- REGION é a região da sua conexão.
- CONNECTION_NAME é o nome da conexão.
- WORKSPACE_ID é o ID do espaço de trabalho do repositório do Bitbucket Cloud.
A seguir
- Saiba como conectar a um repositório do Bitbucket Cloud.
- Saiba como ver os resultados da build.
- Saiba como fazer implantações azul-verde no Compute Engine.