Ajude a moldar o futuro da entrega de software e manifeste-se respondendo à pesquisa sobre o estado de DevOps 2202.

Como criar repositórios hospedados no Bitbucket do Bitbucket

Nesta página, explicamos como invocar builds no Bitbucket Server usando acionadores 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 do Bitbucket, será necessário criar uma chave SSH para autenticar sua conexão com o servidor do Bitbucket. 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 do servidor, é necessário recuperar a 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 Server, será necessário 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 SSH do Bitbucket no bucket, em queBITBUCKET_SERVER_HOST/REPOSITORY é o URL do seu repositório do Bitbucket Server:

    ssh-keygen -t rsa -b 4096 -N '' -C BITBUCKET_SERVER_HOST/REPOSITORY -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 ativar o acesso SSH no servidor Bitbucket

É necessário ativar o acesso SSH no servidor Bitbucket para permitir que os usuários no servidor adicionem as próprias chaves SSH e usem essas chaves para proteger as operações do Git entre o computador e a instância do servidor do Bitbucket. Para saber como usar o SSH com o Bitbucket Server, consulte Como ativar o acesso SSH aos repositórios Git no servidor do Bitbucket.

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

Para proteger as operações dos outros sistemas nos repositórios gerenciados no Bitbucket do Bitbucket, é necessário adicionar a chave de acesso SSH pública no servidor do Bitbucket e conceder a chave.Leituras . Para saber como adicionar sua chave, consulte Chaves de acesso SSH para uso do sistema.

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 Server 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 Server, consulte Como criar um webhook no servidor Bitbucket.

    • 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 Server usando sua 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 -p BITBUCKET_PORT BITBUCKET_HOST > /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'
          - 'ssh://BITBUCKET_HOST:BITBUCKET_PORT/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_HOST é o nome do host do repositório do Bitbucket.
      • BITBUCKET_PORT é a porta SSH do repositório do Bitbucket (geralmente 7999).
      • 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 do ambiente usado nesse 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.changes[0].refId)
      _TO_SHA $(body.changes[0].toHash)

      Para ver o payload associado a eventos do servidor do Bitbucket, consulte Payload do evento.

    • Filtros (opcional): é possível criar uma regra dentro de um gatilho que determina se ele acionará 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 Server, execute o comando gcloud alpha. No exemplo abaixo, o gatilho está configurado para responder a versões com uma ramificação correspondente a refs/heads/main com base no payload especificado, conforme definido pela variável de substituição, _BRANCH.

     gcloud alpha builds triggers create webhook \
       --name=TRIGGER_NAME \
       --repo=PATH_TO_REPO \
       --secret=PATH_TO_SECRET \
       --subtitutions=\
         _BRANCH='$(body.changes[0].refId)', TO_SHA='$(body.changes[0].refId)'
       --filter='_BRANCH == refs/heads/main'
       --inline-config=PATH_TO_INLINE_BUILD_CONFIG
       --branch=BRANCH_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;

Como criar um webhook no servidor Bitbucket

Para que o Bitbucket do servidor faça solicitações ao Cloud Build, será necessário criar um webhook no Bitbucket Server seguindo as instruções descritas em Como criar webhooks.

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