Conecte-se a um host de data center do Bitbucket

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.

    Enable the 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.

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:

  1. Faça login na sua instância do Bitbucket Data Center.

  2. Siga as instruções para criar tokens de acesso HTTP para sua conta de usuário.

    1. Crie um token de acesso com o escopo repository admin para usar na conexão e desconexão de repositórios.

    2. 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:

  1. Abra a página Repositórios no console do Google Cloud.

    Abrir a página Repositórios

    Você verá a página Repositórios.

  2. Na parte de cima da página, selecione a guia 2a geração.

  3. No seletor de projetos, na barra superior, escolha seu projeto do Google Cloud.

  4. Clique em Criar conexão de host para conectar um novo host ao Cloud Build.

  5. No painel à esquerda, selecione Bitbucket como o provedor de origem.

  6. Na seção Configurar conexão, digite as seguintes informações:

    1. 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.

    2. Nome: insira um nome para a conexão.

  7. Na seção Detalhes do host, selecione ou insira as seguintes informações:

    1. Host do Bitbucket: selecione Data center do Bitbucket como host.

    2. URL do host: insira o URL do host do Bitbucket Data Center.

  8. Na seção Rede, selecione uma das seguintes opções:

    1. Internet pública: selecione esta opção se a instância puder ser acessada usando a Internet pública.

    2. Rede privada: selecione esta opção caso sua instância esteja hospedada em um uma rede privada virtual.

      1. 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.

      2. 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.

        1. 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.

        2. Namespace: selecione o namespace do serviço.

        3. Serviço: selecione o nome do serviço no namespace.

  9. Na seção Tokens de acesso HTTP, insira as seguintes informações:

    1. 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.

    2. 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.

  10. 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

  1. Armazene seus tokens no Secret Manager.

  2. 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=-
    
  3. 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.

  1. 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