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 instalou uma instância do data center do Bitbucket, consulte Instale o data center do Bitbucket para ver as instruções.
Para usar os comandos do
gcloud
nesta página, instale a Google Cloud CLI.
Permissões do IAM obrigatórias
- Para receber as permissões necessárias para conectar seu data center do Bitbucket
host, peça ao administrador para conceder a você
Administrador de conexão do Cloud Build
(
roles/cloudbuild.connectionAdmin
) Papel do IAM 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 e 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 mais sobre outros papéis do IAM necessários antes da conexão com o host.
Conectar-se a um host do Bitbucket Data Center
Antes de criar uma conexão de host para sua instância do data center do Bitbucket, crie tokens de acesso pessoais no Data Center do Bitbucket as seguintes 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 data center do Bitbucket ao Cloud Build:
Abra a página Repositórios no console do Google Cloud.
Você verá a página Repositórios.
Na parte de cima da página, selecione a guia 2a geração.
No seletor de projetos, na barra superior, escolha 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 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. Você deve especificar um na mesma 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 esta opção se a instância puder ser acessada usando a Internet pública.
Rede privada: selecione esta opção caso sua instância esteja hospedada em um uma rede privada virtual.
AC Certificate: 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 esse 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 pré-preenchido, escolha Em outro projeto para procurar ou selecione Inserir manualmente.
Se você escolher digite as seguintes informações:
Projeto: insira ou selecione o ID do projeto do 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 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 administrador do repositório. Esse token é usado para conectar e desconectar repositórios.
Token de acesso de leitura: insira o token com o escopo de leitura do repositório. acesso. 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 serão armazenados com segurança no Secret Manager. Depois de se conectar ao Host do data center do Bitbucket, o Cloud Build cria um webhook secreta em seu nome. É possível consultar e gerenciar os secrets no Secret Manager página.
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 do Google Cloud diferente daquele que pretende usar para criar uma conexão de host, execute o comando abaixo 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 projeto no Google Cloud.
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 ID do projeto do Google Cloud.
- REGION é a região; para sua conexão.
- ADMIN_TOKEN é o nome do seu token com escopo do repository admin.
- READ_TOKEN é o nome do token com o escopo 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 Terraform do Google.
- 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 ID do projeto do Google Cloud.
- PROJECT_NUMBER é seu projeto do Google Cloud número
- 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.