Conectar-se a um host do Bitbucket Server

Nesta página, explicamos como se conectar a um host do servidor Bitbucket ao Cloud Build.

Antes de começar

  • Ative as APIs Cloud Build, Secret Manager, and Compute Engine.

    Ative as APIs

Como configurar

Antes de conectar o host do Bitbucket Server, você precisa conseguir uma chave de API para autenticar e aceitar eventos de entrada do Bitbucket Server. Além disso, é necessário conceder permissões do IAM no projeto do Google Cloud para criar tokens de acesso pessoal no Bitbucket Server, criar webhooks e recuperar dados do repositório.

Como conseguir uma chave de API

Para conectar seu host e autenticar eventos de webhook de entrada, você precisa de uma chave de API.

Para gerar uma chave de API:

  1. Abra a página Credenciais no Console do Google Cloud:

    Abra a página Credenciais

  2. Clique em Criar credenciais.

  3. Clique em Chave de API.

    Você vai ver uma caixa de diálogo com a chave de API criada. Anote a sua chave de API.

  4. Se quiser restringir a chave para aplicativos de produto, clique em Restringir chave para concluir as etapas adicionais para protegê-la. Caso contrário, clique em Fechar.

    Para saber como restringir sua chave, consulte Como aplicar restrições de chave de API.

Permissões do IAM obrigatórias

Para conectar o host do Bitbucket Server, conceda o papel Editor do Cloud Build (roles/cloudbuild.builds.editor) e o Proprietário das integrações do Cloud Build (cloudbuild.integrations.owner) à sua conta de usuário.

Para adicionar os papéis necessários à conta de usuário, consulte Como configurar o acesso aos recursos do Cloud Build. Para saber mais sobre os papéis do IAM associados ao Cloud Build, consulte Papéis e permissões do IAM.

Como criar tokens de acesso pessoal

É necessário criar dois tokens de acesso pessoal no Bitbucket Server para executar as seguintes tarefas:

Esses tokens de acesso pessoal são as permissões mínimas necessárias. Talvez seja necessário configurar outras permissões no servidor do Bitbucket conforme necessário. Por exemplo, é possível selecionar a conta do servidor do Bitbucket para ter acesso somente a um subconjunto dos repositórios na sua instância do Bitbucket Server e permitir um controle mais refinado sobre o que está disponível no Cloud Build.

Depois de criar os tokens de acesso pessoal, salve os valores deles com segurança para se conectar ao repositório do Bitbucket Server.

Como se conectar a um host do Bitbucket Server

Console

Para conectar seu host do Bitbucket Server ao Cloud Build usando o console do Google Cloud:

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

    Abrir a página Repositórios

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

  3. Clique em Conectar host.

  4. Selecione Servidor Bitbucket no menu suspenso.

    O painel Conectar host vai aparecer.

    Insira as informações a seguir para conectar sua instância do Bitbucket Server ao Cloud Build:

    • Região: selecione a região da sua conexão.

    • Nome: digite um nome para sua conexão.

    1. URL do host: o URL do host da sua instância do Bitbucket Server. Por exemplo, https://bbs.example-test.com:7990.

    2. Chave de API do Google Cloud: chave de API usada para autenticar suas credenciais.

    3. Certificado de CA: seu certificado autoassinado. O certificado não pode exceder 10 KB de tamanho e precisa estar no formato PEM (.pem, .cer ou .crt). Se esta seção for deixada em branco, será usado um conjunto padrão de certificados.

    4. Nome de usuário: seu nome de usuário da conta do Bitbucket Server. Essa conta precisa ter acesso de administrador aos repositórios que você quer conectar ao Cloud Build.

    5. Token de acesso de leitura: seu token de acesso pessoal da conta do Bitbucket Server com permissões de leitura.

    6. Token de acesso de administrador: seu token de acesso pessoal da conta do Bitbucket Server com permissões de administrador em projetos e repositórios.

    7. Em Tipo de rede, selecione uma das seguintes opções:

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

      2. Rede privada: selecione essa opção se a instância estiver hospedada em uma rede privada.

        1. Projeto: selecione o ID do projeto do Google Cloud.

        2. Rede: selecione sua rede no menu suspenso. Se você não criou uma rede, consulte Criar e gerenciar redes VPC para saber como criar uma rede.

        3. Intervalo de IP: insira o intervalo de IP interno que pode ser atribuído às VMs dentro do intervalo alocado de uma rede com peering.

          Para especificar o intervalo, use a notação de roteamento do roteamento entre domínios sem classe (CIDR) no formato STARTING_IP/SUBNET_PREFIX_SIZE. Por exemplo, 192.0.2.0/24 tem um comprimento de prefixo de 24. Os primeiros 24 bits do intervalo de IP são usados como a máscara de sub-rede (192.0.2.0), enquanto os possíveis endereços de hosts variam de 192.0.2.0 a 192.0.2.255.

          O valor do comprimento do prefixo não pode exceder /29. Se nenhum valor for especificado para o intervalo, um valor padrão /24 será atribuído automaticamente. Se nenhum valor for especificado para o tamanho do prefixo, os endereços IP serão atribuídos automaticamente dentro da rede VPC com peering. Se nenhum valor for especificado para o endereço IP, um intervalo dentro da rede VPC com peering será atribuído automaticamente a ele.

  5. Clique em Conectar host.

    Se a instância do Bitbucket Server estiver em uma rede com peering, a conexão do host pode levar vários minutos para ser concluída.

    Você será redirecionado para o painel Conectar repositório.

    Depois de criar uma conexão de host, seus tokens de acesso pessoal e o secret do webhook serão armazenados com segurança no Secret Manager. Confira e gerencie os secrets na página do Secret Manager.

gcloud

Para conectar seu host do Bitbucket Server ao Cloud Build usando comandos gcloud, é preciso executar o comando gcloud alpha builds enterprise-config bitbucketserver create no seu terminal. Ao contrário de conectar o host usando o console do Google Cloud, você precisará armazenar manualmente os tokens de acesso pessoal e o secret do webhook no Secret Manager antes de executar o seguinte comando:

gcloud alpha builds enterprise-config bitbucketserver create
    --name=BITBUCKET_SERVER_CONFIG_NAME \
    --user-name=USERNAME \
    --host-uri=HOST_URI \
    --admin-access-token-secret-version=ADMIN_ACCESS_TOKEN_SECRET_VERSION \
    --read-access-token-secret-version=READ_ACCESS_TOKEN_SECRET_VERSION \
    --webhook-secret-secret-version=WEBHOOK_SECRET_SECRET_VERSION \
    --api-key=API_KEY \
    --peered-network=PEERED_NETWORK \
    --peered-network-ip-range=PEERED_NETWORK_IP_RANGE \
    --ssl-ca-file=SSL_CA_FILE

Em que:

  • BITBUCKET_SERVER_CONFIG_NAME é o nome da configuração do servidor do Bitbucket.
  • USERNAME é seu nome de usuário do Bitbucket Server.
  • HOST_URI é o URI do host da instância do Bitbucket Server.
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION é o nome do recurso do token de acesso de administrador armazenado no Secret Manager. O formato esperado para secrets armazenados no Secret Manager é projects/${PROJECT_ID}/secrets/${SECRET_NAME}/versions/${VERSION_NUMBER}. Especifique latest como sua versão para usar a versão mais recente do secret. Isso se aplica a cada recurso armazenado no Secret Manager.
  • READ_ACCESS_TOKEN_SECRET_VERSION é o nome do recurso do token de acesso de leitura armazenado no Secret Manager.
  • WEBHOOK_SECRET_SECRET_VERSION é o nome do recurso do secret do webhook armazenado no Secret Manager.
  • API_KEY é a chave de API do Google Cloud;
  • [Opcional] PEERED_NETWORK é a rede VPC a ser conectada às instâncias do Bitbucket Server no local. Para saber mais, consulte Criar repositórios do Bitbucket Server em uma rede privada.

  • [Opcional] PEERED_NETWORK_IP_RANGE é o intervalo de IP interno ao qual as VMs podem ser atribuídas dentro do intervalo alocado de uma rede com peering.

  • SSL_CA_FILE é o caminho para um arquivo local que contém o certificado SSL a ser usado para solicitações ao Bitbucket Server. O certificado deve estar no formato PEM.

API

Para conectar seu host do Bitbucket Server ao Cloud Build usando a API, use o modelo JSON a seguir. Ao contrário de conectar o host usando o console do Google Cloud, você precisa armazenar manualmente os tokens de acesso pessoal e o secret do webhook no Secret Manager antes de chamar a API:

  {
      "hostUri": "HOST_URI",
      "username": "USERNAME",
      "apiKey": "API_KEY",
      "secrets": {
        "adminAccessTokenVersionName": "ADMIN_ACCESS_TOKEN_SECRET_VERSION",
        "readAccessTokenVersionName": "READ_ACCESS_TOKEN_SECRET_VERSION",
        "webhookSecretVersionName": "WEBHOOK_SECRET_SECRET_VERSION",
      },
      "peeredNetwork": "PEERED_NETWORK",
      "peeredNetworkIpRange": "PEERED_NETWORK_IP_RANGE",
      "sslCa": "SSL_CERTIFICATE"
  }

Em que:

  • HOST_URI é o URI do host da instância do Bitbucket Server.
  • USERNAME é seu nome de usuário do Bitbucket Server.
  • API_KEY é a chave de API do Google Cloud;
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION é o nome do recurso do token de acesso de administrador armazenado no Secret Manager. Talvez seja necessário conceder o papel de Secret Manager à sua conta de serviço do Cloud Build, service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Para saber mais, consulte Como conceder o papel de Secret Manager à sua conta de serviço.

  • READ_ACCESS_TOKEN_SECRET_VERSION é o nome do recurso do token de acesso de leitura armazenado no Secret Manager.

  • WEBHOOK_SECRET_SECRET_VERSION é o nome do recurso do secret do webhook armazenado no Secret Manager.

  • [Opcional] PEERED_NETWORK é a rede VPC com a qual fazer peering para as instâncias do Bitbucket Server no local.

    É possível especificar o intervalo usando a notação de roteamento do roteamento entre domínios sem classe (CIDR) no formato STARTING_IP/SUBNET_PREFIX_SIZE. Por exemplo, 192.0.2.0/24 tem um comprimento de prefixo de 24. Os primeiros 24 bits do intervalo de IP são usados como a máscara de sub-rede (192.0.2.0), enquanto os possíveis endereços de hosts variam de 192.0.2.0 a 192.0.2.225.

  • [Opcional] PEERED_NETWORK_IP_RANGE é o intervalo de IP interno ao qual as VMs podem ser atribuídas dentro do intervalo alocado de uma rede com peering.

  • [Opcional] SSL_CERTIFICATE é o certificado SSL usado para as instâncias do Bitbucket Server no local.

Digite o seguinte comando curl no terminal:

  curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/bitbucketServerConfigs/?bitbucketServerConfigId=BITBUCKET_SERVER_CONFIG_NAME -d @config.json

Em que:

  • PROJECT_NUMBER é o número do projeto do Cloud.
  • PROJECT_ID é seu ID do projeto do Cloud.
  • REGION é a região associada à configuração do Bitbucket Server.
  • BITBUCKET_SERVER_CONFIG_NAME é o nome da configuração do servidor do Bitbucket.

Se a solicitação for concluída, o corpo da resposta incluirá uma instância de Operation.

Digite o seguinte comando curl no terminal:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

Em que:

  • PROJECT_NUMBER é o número do projeto do Cloud.
  • PROJECT_ID é seu ID do projeto do Cloud.
  • REGION é a região associada à configuração do Bitbucket Server.
  • OPERATION_ID é o ID da operação de criação da configuração do Bitbucket Server.

Talvez seja necessário continuar executando o comando da API GetOperation até que a resposta contenha done: true, o que indica que a operação foi concluída. Se a configuração do Bitbucket Server foi criada, você pode vê-la no campo response.value. Caso contrário, consulte o campo error para um relatório de erros detalhado.

A seguir