Como criar repositórios hospedados no Bitbucket Cloud Bitbucket

Nesta página, explicamos como invocar builds no Bitbucket Cloud usando gatilhos de webhook.

Antes de começar

  • Ative as APIs Cloud Build and Secret Manager.

    Ative as APIs

  • Para usar os comandos gcloud nesta página, instale o SDK do Cloud.

Configuração

Antes de criar um gatilho de webhook para invocar versões no Bitbucket Cloud, você precisará criar uma chave SSH para autenticar sua conexão com o Bitbucket Cloud. Quando você cria um acionador sem um repositório associado e acessa o código em um sistema de gerenciamento de código-fonte externo, como o Bitbucket Cloud, será necessário recuperar sua chave SSH na configuração da versão in-line.

Nesta seção, você verá como criar e armazenar sua chave SSH antes de criar um gatilho de webhook.

Como criar uma chave SSH

Para acessar seu código no Bitbucket Cloud, você precisará recuperar uma chave SSH na configuração da versão in-line.

Para criar uma chave SSH:

  1. Abra uma janela de terminal.

  2. Crie um novo diretório chamado working-dir e navegue até ele:

    mkdir working-dir
    cd working-dir
    
  3. Crie uma nova chave do Cloud SSH no Bitbucket, em que bitbucket.org é o URL do repositório do Cloud Shell do Bitbucket:

    ssh-keygen -t rsa -b 4096 -N '' -C bitbucket.org -f id_bitbucket
    

    O comando cria uma nova chave SSH em working-dir/id_bitbucket sem uma senha longa para sua chave SSH. O Cloud Build não pode usar sua chave SSH se ela estiver protegida com uma senha longa.

Como adicionar sua chave de acesso SSH pública no Bitbucket Cloud

Para proteger as operações dos outros sistemas nos repositórios gerenciados no Bitbucket Cloud, você precisa adicionar a chave de acesso SSH pública no Bitbucket Cloud e conceder a chave.Leituras . Para saber como adicionar sua chave, consulte Adicionar chaves de acesso.

Como criar e armazenar suas credenciais no Gerenciador de secrets

Quando você cria uma chave SSH, é criado um arquivo id_bitbucket no seu ambiente local. Como esse arquivo contém informações confidenciais associadas à autenticação, é preciso armazená-lo no Gerenciador de secrets antes de usá-lo para invocar uma versão.

Além do segredo usado na criação de um gatilho de webhook, você também precisará criar um secret no Gerenciador de secrets para validar e autorizar eventos de webhook de entrada no Cloud Build.

Para criar e armazenar suas credenciais no Gerenciador de secrets:

  1. Acesse a página "Gerenciador de secrets" no Console do Cloud:

    Acessar a página "Gerenciador de secrets"

  2. Na página Gerenciador de secrets, clique em Criar secret.

  3. Na página Criar secret, em Nome, digite um nome para o secret.

  4. No campo Valor do secret, digite um nome para o secret ou faça o upload de um arquivo.

    Para fazer o upload do arquivo de chave SSH, clique em Fazer upload para incluir o arquivo working-dir/id_bitbucket.

  5. Deixe a seção Regiões inalterada.

  6. Clique no botão Criar secret para criar seu secret.

Depois de criar o secret, o Console do Google Cloud concederá automaticamente o papel secret do secret do Gerenciador de secrets à sua conta de serviço do Cloud Build, ${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Se esse papel não for exibido na sua conta de serviço, conclua as etapas a seguir descritas em Como conceder o papel do Gerenciador de secrets à conta de serviço.

Agora que você armazenou sua chave SSH, também será possível excluir a chave SSH do seu ambiente executando o seguinte comando:

rm id_bitbucket*

Agora você está pronto para criar seu gatilho de webhook.

Como criar gatilhos de webhook

Console

Para criar um gatilho de webhook que invoque builds do Bitbucket Cloud usando o Console do Google Cloud:

  1. Acesse a página Gatilhos:

    Abrir a página “Gatilhos de compilação”

  2. Selecione seu projeto na parte superior da página e clique em Abrir.

  3. Clique em Criar gatilho.

  4. Preencha as configurações de gatilho a seguir:

    • Nome: nome do gatilho.
    • Descrição (opcional): uma descrição do gatilho.
    • Evento: selecione Evento do webhook e configure seu acionador para iniciar versões em resposta a eventos de webhook de entrada.
    • URL do Webhook: use o URL do webhook para autenticar eventos de webhook de entrada.

      • Secret: você precisará de um secret para autenticar eventos de webhook de entrada. Você pode criar um novo secret ou usar um já existente.

        Para criar um novo secret:

        1. Selecione Criar nova.
        2. Clique em Criar secret.

          Você verá a caixa pop-up Criar uma chave secreta de webhook.

        3. No campo Nome do secret, insira um nome para o secret.

        4. Clique em Criar secret para salvar seu secret, que será criado e armazenado automaticamente no Gerenciador de secrets.

        Para usar um secret atual, faça o seguinte:

        1. Selecione Usar existente.
        2. No campo Secret, selecione o nome do secret que você quer usar no menu suspenso ou siga as instruções para adicionar um secret por código do recurso.
        3. No campo Versão do secret, selecione a versão do secret no menu suspenso.

      Depois de criar ou selecionar o secret, você verá uma visualização do URL de webhook. O URL conterá uma chave de API gerada pelo Cloud Build e pelo secret. Se o Cloud Build não conseguir recuperar sua chave de API, você poderá adicionar manualmente sua chave de API ao URL ou saber como conseguir uma chave de API se não tiver um ainda.

      É possível usar o URL para invocar um evento de webhook fazendo uma solicitação HTTP usando o método POST.

       https://cloudbuild.googleapis.com/v1/projects/${PROJECT_NAME}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY}&secret=${SECRET_VALUE}
      

      Para saber como usar o URL ao criar um webhook no Bitbucket Cloud, consulte Como criar um webhook no Bitbucket Cloud.

    • Source (opcional): o repositório a ser criado quando o gatilho webhook é executado. Deixe esse campo em branco. Neste exemplo, a configuração da compilação é uma configuração da versão in-line, portanto, a origem não é necessária.

    • Configuração: crie uma configuração de versão in-line no Console do Google Cloud.

      No exemplo a seguir, a configuração da versão in-line autentica sua conexão com o Bitbucket Cloud usando a chave SSH e acessa o repositório especificado. Depois, ele verifica a confirmação que invocou o webhook.

      steps:
      # first, setup SSH:
      # 1- save the SSH key from Secret Manager to a file
      # 2- add the host key to the known_hosts file
      - name: gcr.io/cloud-builders/git
        args:
          - '-c'
          - |
            echo "$$SSHKEY" > /root/.ssh/id_rsa
            chmod 400 /root/.ssh/id_rsa
            ssh-keyscan bitbucket.org > /root/.ssh/known_hosts
        entrypoint: bash
        secretEnv:
          - SSHKEY
        volumes:
          - name: ssh
            path: /root/.ssh
      # second, clone the repository
      - name: gcr.io/cloud-builders/git
        args:
          - clone
          - '-n'
          - 'git@bitbucket.org/BITBUCKET_REPO'
          - .
        volumes:
          - name: ssh
            path: /root/.ssh
      # third, checkout the specific commit that invoked this build
      - name: gcr.io/cloud-builders/git
        args:
          - checkout
          - $_TO_SHA
      availableSecrets:
        secretManager:
        - versionName: PATH_TO_SECRET_VERSION
          env: SSHKEY
      

      Em que:

      • BITBUCKET_REPO é o caminho do repositório do Bitbucket.
      • PATH_TO_SECRET_VERSION é o caminho para sua versão do secret conforme armazenado no Gerenciador de secrets. Esse é o secret que contém sua chave SSH. Por exemplo, projects/project-id/secrets/secret-name/versions/1
      • SSHKEY é o nome da variável de ambiente usada, neste caso, para armazenar o caminho para o secret.
    • Substituições (opcional): é possível definir variáveis de substituição específicas ao gatilho usando esse campo.

      Neste exemplo, digamos que você queira monitorar um nome de branch específico associado a um código de confirmação e, em seguida, mudar para esse nome de ramificação na definição da compilação. Para receber esses dados, crie variáveis de substituição usando vinculações de payload para salvar o nome do branch.

      Especifique as seguintes variáveis e valores abaixo:

      Nome da variável Valor da variável
      _BRANCH $(body.push.changes[0].new.name)
      _TO_SHA $(body.push.changes[0].new.target.hash)

      Para ver o payload associado a eventos do Bitbucket no Cloud, consulte Payloads de evento.

    • Filtros (opcional): é possível criar uma regra dentro de um gatilho que determina se o gatilho executará ou não uma compilação com base nas variáveis de substituição.

      Como você quer que o gatilho execute uma versão caso o nome da ramificação corresponda a main, é possível usar o operador "==" para verificar correspondências exatas. Também é possível usar a palavra-chave "correspondências" se você quiser corresponder por expressão regular.

      Especifique os seguintes filtros:

      • _BRANCH == refs/heads/main

      Para ver mais exemplos de sintaxe para filtragem que você pode aplicar aos gatilhos de webhook, consulte Como usar a CEL para filtrar eventos de versão.

  5. Clique em Criar para criar seu gatilho de compilação.

gcloud

Para criar um gatilho de webhook que invoque builds do Bitbucket Cloud:

     gcloud alpha builds triggers create webhook \
       --name=TRIGGER_NAME \
       --repo=PATH_TO_REPO \
       --secret=PATH_TO_SECRET \
       --substitutions=''
       --filter=''
       --inline-config=PATH_TO_INLINE_BUILD_CONFIG
       --branch=BRANCH_NAME # --tag=TAG_NAME

Em que:

  • TRIGGER_NAME é o nome do gatilho.
  • PATH_TO_REPO é o caminho para o repositório para invocar uma versão. Por exemplo, https://www.github.com/owner/repo.
  • PATH_TO_SECRET é o caminho para o secret conforme armazenado no Gerenciador de secrets. Por exemplo, projects/my-project/secrets/my-secret/versions/2.
  • PATH_TO_INLINE_BUILD_CONFIG é o caminho para sua configuração da versão in-line.

  • BRANCH_NAME é o nome do branch se você quiser definir o gatilho para criar em um branch;

  • TAG_NAME é o nome da tag se você quer definir o gatilho para ser criado em uma tag.

Como criar um webhook no Bitbucket Cloud

Para que o Bitbucket Cloud faça solicitações ao Cloud Build, você precisará criar um webhook no Bitbucket Cloud seguindo as instruções descritas em Criar e acionar um webhook .

Agora, cada vez que as atualizações do repositório corresponderem ao evento de acionador especificado no webhook, uma versão será invocada automaticamente pelos acionadores do webhook do Cloud Build.

A seguir