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 GitLab

Nesta página, explicamos como invocar versões no GitLab 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 GitLab, você precisará criar uma chave SSH para autenticar sua conexão com o GitLab. Ao criar um gatilho sem um repositório associado e acessar seu código em um sistema de gerenciamento de código-fonte externo, como o GitLab, será necessário recuperar sua chave SSH na sua configuração de 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 GitLab, você precisará recuperar uma chave SSH na sua 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 GitLab, em que gitlab.com é o URL do seu repositório do GitLab:

    ssh-keygen -t rsa -b 4096 -N '' -C gitlab.com -f id_gitlab
    

    O comando cria uma nova chave SSH em working-dir/id_gitlab 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 GitLab

Você precisará ativar o acesso SSH no seu GitLab 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 GitLab. Para saber como usar o SSH com o GitLab, consulte Chaves do GitLab e SSH (em inglês).

Como adicionar sua chave de acesso SSH pública no GitLab

Para proteger as operações que outros sistemas realizam nos seus repositórios gerenciados no GitLab, você precisará adicionar sua chave de acesso SSH pública ao GitLab. Para saber como adicionar sua chave, consulte Adicionar uma chave SSH à sua conta do GitLab.

Como criar e armazenar suas credenciais no Gerenciador de secrets

Quando você cria uma chave SSH, é criado um arquivo id_gitlab 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 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_gitlab*

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 GitLab 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 GitLab, consulte Como criar um webhook no GitLab (em inglês).

    • 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 gitlab.com > /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@gitlab.com/GITLAB_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:

      • GITLAB_REPO é o caminho do seu repositório do GitLab.
      • 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.ref)
      _TO_SHA $(body.after)

      Para visualizar o payload associado a eventos do GitLab, consulte a página de documentação do GitLab em Eventos.

    • 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 GitLab, siga estas etapas:

     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 GitLab

Para que o GitLab faça solicitações ao Cloud Build, você precisará criar um webhook no GitLab seguindo as instruções descritas na documentação do GitLab para Webhooks.

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

A seguir