Esta página explica como se conectar a um host do Bitbucket Cloud para o 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 os comandos
gcloud
.
Permissões do IAM obrigatórias
Para ter as permissões necessárias para se conectar,
peça ao administrador para conceder a você
Administrador de conexão do Cloud Build (cloudbuild.connectionAdmin
)
o papel do IAM na sua conta de usuário.
Para mais informações sobre como conceder 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 a origem o 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
- Solicitações de envio: Read
- 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
Conecte o Cloud Build ao host do Bitbucket Cloud concluindo as seguintes etapas:
Abra a página Repositórios no console do Google Cloud.
Você verá a página Repositórios.
No seletor de projetos, escolha seu projeto do Google Cloud.
Na parte de cima da página, selecione a guia 2a geração.
Clique em Criar conexão de host para conectar um novo host ao Cloud Build.
Selecione Bitbucket como o provedor de origem.
Na seção Configurar conexão, digite as seguintes informações:
Região: selecione uma região para a conexão.
Nome: digite um nome para a conexão.
Na seção Detalhes do host, selecione Bitbucket Cloud como o tipo de host.
Espaço de trabalho: insira o ID do espaço de trabalho do seu repositório do Bitbucket Cloud.
Token de acesso: digite o token de acesso de administrador criado anteriormente.
Token de acesso de leitura: insira seu 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:
Para armazenar seus tokens de acesso no Secret Manager no seu projeto do Google 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 é seu token de acesso de administrador.
- ADMIN_SECRET_NAME é o nome que você quer atribuir; o secret do token de acesso de administrador no Secret Manager.
- READ_TOKEN é o token de acesso de leitura.
- READ_SECRET_NAME é o nome que você quer dar à conta um secret do token de acesso somente leitura no Secret Manager.
Crie um secret do webhook no Secret Manager executando o seguinte comando, em que WEBHOOK_SECRET_NAME é o nome que você quer dar ao secret do webhook:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
Se os secrets não estiverem todos no mesmo projeto, conceda acesso ao Agente de serviço do Cloud Build executando o seguinte 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"
Em que:
- PROJECT_ID é o ID do projeto do Google Cloud.
- 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 chave secreta 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 ID do projeto do Google Cloud.
- REGION é a região da conexão de 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
Conecte o 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 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 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 ID do projeto do Google Cloud.
- PROJECT_NUMBER é seu projeto do Google Cloud número
- ADMIN_TOKEN_NAME é o nome do seu token com
Acesso aos escopos
webhook
,repository
,repository:admin
epullrequest
. - ADMIN_TOKEN_VALUE é o valor da ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME é o nome do seu token com
repository:read
. - READ_TOKEN_VALUE é o valor da 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 para 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.