Nesta página, explicamos como conectar um host do Bitbucket Data Center ao Cloud Build.
Antes de começar
-
Enable the Cloud Build and Secret Manager APIs.
- Tenha o código-fonte pronto em um repositório do Bitbucket Data Center.
- Tenha um
Dockerfile
ou um arquivo de configuração do Cloud Build no seu repositório de origem do Bitbucket Data Center. - Se você não tiver instalado uma instância do Bitbucket Data Center, consulte Instalar o Bitbucket Data Center para ver instruções.
Para usar os comandos
gcloud
nesta página, instale a CLI do Google Cloud.
Permissões do IAM obrigatórias
- Para receber as permissões necessárias para conectar o host do Bitbucket Data Center, peça ao administrador para conceder a você o papel do IAM de Administrador de conexão do Cloud Build (
roles/cloudbuild.connectionAdmin
) na conta de usuário. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível receber as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
- Se a sua instância do Bitbucket Data Center estiver hospedada em uma rede privada, consulte Criar repositórios do Bitbucket Data Center em uma rede privada para saber sobre outros papéis do IAM necessários antes da conexão do host.
Conectar-se a um host do Bitbucket Data Center
Antes de criar uma conexão de host para sua instância do Bitbucket Data Center, é necessário criar tokens de acesso pessoal no Bitbucket Data Center seguindo estas etapas:
Faça login na sua instância do Bitbucket Data Center.
Siga as instruções para criar tokens de acesso HTTP para sua conta de usuário.
Crie um token de acesso com o escopo repository admin para usar na conexão e desconexão de repositórios.
Crie um token de acesso com o escopo leitura do repositório para garantir que os repositórios do Cloud Build possam acessar o código-fonte nos repositórios.
Console
Para conectar o host do Bitbucket Data Center ao Cloud Build:
Abra a página Repositórios no console do Google Cloud.
Você vai encontrar a página Repositórios.
Na parte de cima da página, selecione a guia 2ª geração.
No seletor de projetos, na barra superior, selecione seu projeto do Google Cloud.
Clique em Criar conexão de host para conectar um novo host ao Cloud Build.
No painel à esquerda, 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. É necessário especificar uma região. Sua conexão não pode existir globalmente.
Nome: insira um nome para a conexão.
Na seção Detalhes do host, selecione ou insira as seguintes informações:
Host do Bitbucket: selecione Data center do Bitbucket como host.
URL do host: insira o URL do host do Bitbucket Data Center.
Na seção Rede, selecione uma das seguintes opções:
Internet pública: selecione essa opção se a instância for acessível usando a Internet pública.
Rede privada: selecione essa opção se a instância for hospedada em uma rede privada.
Certificado de AC: seu certificado autoassinado. Clique em Procurar para abrir o certificado na sua máquina local.
Seu certificado não pode exceder 10 KB e deve estar no formato PEM (
.pem
,.cer
ou.crt
). Se você deixar este campo em branco, o Cloud Build vai usar um certificado do conjunto padrão de certificados.Na seção Serviço de diretório de serviços, selecione o local do seu serviço. Aceite o ID do projeto preenchido ou especifique outro projeto.
Selecione o projeto do seu serviço. Você pode aceitar o projeto predefinido, escolher Em outro projeto para procurar ou Digitar manualmente.
Se você escolher insira as seguintes informações:
Project: insira ou selecione o ID do projeto Google Cloud no menu suspenso.
Região: esse campo pré-seleciona a região da sua conexão. A região especificada para o serviço precisa corresponder à região associada à conexão.
Namespace: selecione o namespace do serviço.
Serviço: selecione o nome do serviço no seu namespace.
Na seção Tokens de acesso HTTP, insira as seguintes informações:
Token de acesso de administrador: insira o token com o acesso de escopo de administrador do repositório. Esse token é usado para conectar e desconectar repositórios.
Token de acesso de leitura: insira o token com o acesso de escopo leitura do repositório. Os gatilhos do Cloud Build usam esse token para acessar o código-fonte em repositórios.
Clique em Conectar.
Depois de clicar no botão Conectar, seus tokens de acesso pessoal são armazenados com segurança no Secret Manager. Depois de se conectar ao host do Bitbucket Data Center, o Cloud Build cria um segredo de webhook para você. Você pode conferir e gerenciar seus segredos na página Secret Manager.
gcloud
Crie um secret de webhook no Secret Manager executando o comando abaixo, em que WEBHOOK_SECRET é o nome que você quer dar ao secret de webhook:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-
Se você armazenar os segredos em um projeto Google Cloud diferente daquele que pretende usar para criar uma conexão de host, execute o comando a seguir para conceder ao projeto acesso ao agente de serviço do 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"
Em que:
- PROJECT_ID é o ID do Google Cloud projeto.
Agora você pode conectar o host do Bitbucket Data Center ao Cloud Build.
Execute o comando a seguir para criar uma conexão do Bitbucket Data Center:
gcloud builds connections create bitbucket-data-center 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 é o nome da conexão.
- HOST_URI é o URI da sua instância do Bitbucket Data Center.
- PROJECT_ID é o Google Cloud ID do projeto.
- REGION é a região da sua conexão.
- ADMIN_TOKEN é o nome do token com escopo de administrador do repositório.
- READ_TOKEN é o nome do token com escopo de leitura do repositório.
- SECRET_VERSION é a versão do secret.
- WEBHOOK_SECRET é o secret do webhook.
Terraform
É possível conectar o host do Bitbucket Data Center 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 do Bitbucket Data Center.
// 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_data_center_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 ] }
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 escopo
repository:admin
. - 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.
- BITBUCKET_URI é o URI da sua instância do Bitbucket Data Center.
A seguir
- Saiba como conectar um repositório do Bitbucket Data Center.
- Saiba como realizar implantações azul-verde no Compute Engine.