Este tutorial mostra como configurar projetos do CodeBuild para executar trabalhos do pipeline de CI/CD do GitLab. Para obter mais informações sobre como usar o GitLab ou o GitLab Self-Managed com o CodeBuild, consulte Executores autogerenciados do GitLab no AWS CodeBuild.
Para concluir este tutorial, você deve primeiramente:
-
Conecte-se com uma aplicação OAuth usando CodeConnections. Observe que, ao se conectar a uma aplicação OAuth, você deve usar o console do CodeBuild para fazer isso. Para obter mais instruções, consulte Acesso ao GitLab no CodeBuild.
-
Conecte o CodeBuild à conta do GitLab. Para fazer isso, você pode adicionar o GitLab como provedor de origem no console. Para obter instruções, consulte Acesso ao GitLab no CodeBuild.
nota
Isso só precisará ser feito se você não tiver se conectado ao GitLab da sua conta.
Com esse recurso, o CodeBuild precisa de permissões adicionais, como
create_runner
emanage_runner
da aplicação OAuth do GitLab. Se houver CodeConnections existentes para uma conta específica do GitLab, ela não solicitará automaticamente atualizações de permissão. Para fazer isso, você pode acessar o console do CodeConnections e criar uma conexão fictícia com a mesma conta do GitLab para acionar a reautorização e obter as permissões adicionais. Com isso, todas as conexões existentes podem usar o recurso de execução. Depois de concluir, você poderá excluir a conexão fictícia.
Etapa 1: criar um projeto do CodeBuild com um webhook
Nesta etapa, você criará um projeto do CodeBuild com um webhook e o revisará no console do GitLab.
Para criar um projeto do CodeBuild com um webhook
-
Abra o console do AWS CodeBuild em https://console.aws.amazon.com/codesuite/codebuild/home
. -
Crie um projeto de compilação. Para obter informações, consulte Criar um projeto de compilação (console) e Executar uma compilação (console).
-
Em Origem:
-
Em Provedor de origem, escolha GitLab.
-
Em Credencial, selecione uma das seguintes opções:
-
Escolha Credencial de origem padrão. A conexão padrão aplica uma conexão padrão do GitLab em todos os projetos.
-
Escolha Credencial de origem personalizada. A conexão personalizada aplica uma conexão personalizada do GitLab que substitui as configurações padrão da conta.
nota
Se você ainda não criou uma conexão com o provedor, precisará criar uma conexão do GitLab. Para obter instruções, consulte Conectar o CodeBuild ao GitLab.
-
-
Em Repositório, escolha o nome do projeto no GitLab especificando o caminho do projeto com o namespace.
-
-
Em Eventos de webhook da origem principal:
-
Em Webhook - opcional, selecione Recompilar toda vez que uma alteração de código for enviada para este repositório.
-
Em Tipo de evento, selecione WORKFLOW_JOB_QUEUED. Depois que a opção for ativada, as compilações serão acionadas apenas pelos eventos de trabalhos do pipeline de CI/CD do GitLab.
nota
O CodeBuild processará somente eventos de trabalhos do pipeline de CI/CD do GitLab se um webhook tiver grupos de filtros contendo o filtro de eventos WORKFLOW_JOB_QUEUED.
-
-
Em Ambiente:
-
Escolha uma imagem de ambiente e computação compatíveis. Observe que você tem a opção de substituir as configurações de imagem e instância usando um rótulo no YAML do pipeline de CI/CD do GitLab. Para obter mais informações, consulte Etapa 2: criar um arquivo .gitlab-ci.yml no repositório.
-
-
Em Buildspec:
-
Observe que o buildspec será ignorado, a menos que
buildspec-override:true
seja adicionado como rótulo. Em vez disso, o CodeBuild o substituirá para usar comandos que configurarão o executor autogerenciado.
-
-
-
Continue com os valores padrão e escolha Criar projeto de compilação.
-
Abra o console do GitLab em
https://gitlab.com/
para verificar se um webhook foi criado e está habilitado para fornecer eventos de trabalhos de fluxo de trabalho.user-name
/repository-name
/-/hooks
Etapa 2: criar um arquivo .gitlab-ci.yml no repositório
Nesta etapa, você criará um arquivo .gitlab-ci.yml
no GitLab
Atualizar o YAML do pipeline de CI/CD do GitLab
Navegue até https://gitlab.com/
e crie um arquivo user-name
/project-name
/-/tree/branch-name
.gitlab-ci.yml
no repositório. Para configurar o ambiente de compilação, execute uma destas ações:
-
Você pode especificar o nome do projeto do CodeBuild. Nesse caso, a compilação usará a configuração de projeto existente para computação, imagem, versão da imagem e tamanho da instância. O nome do projeto é necessário para vincular as configurações relacionadas à AWS do trabalho do GitLab a um projeto específico do CodeBuild. Ao incluir o nome do projeto no YAML, o CodeBuild pode invocar trabalhos com as configurações corretas do projeto.
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
é necessário para mapear a compilação para execuções de trabalhos específicos do pipeline e interromper a compilação quando a execução do pipeline é cancelada.nota
Verifique se
<project-name>
corresponde ao nome do projeto criado no CodeBuild. Se não corresponder, o CodeBuild não processará o webhook e o pipeline de CI/CD do GitLab poderá travar.Veja abaixo um exemplo de um YAML do pipeline de CI/CD do GitLab:
workflow: name: HelloWorld stages: # List of stages for jobs, and their order of execution - build build-job: # This job runs in the build stage, which runs first. stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
-
Você também pode substituir a imagem e o tipo de computação na tag. Para obter uma lista das imagens disponíveis, consulte Imagens de computação compatíveis com o executor do GitLab hospedado pelo CodeBuild. O tipo de computação e a imagem no rótulo substituirão as configurações do ambiente no projeto. Para substituir as configurações de ambiente para uma compilação computacional do Amazon EC2, use a seguinte sintaxe:
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:<environment-type>
-<image-identifier>
- instance-size:<instance-size>
Veja abaixo um exemplo de um YAML do pipeline de CI/CD do GitLab:
stages: - build build-job: stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:arm-3.0 - instance-size:small
-
Você pode substituir a frota usada para a compilação na tag. Isso substituirá as configurações de frota definidas no projeto para usar a frota especificada. Para obter mais informações, consulte Executar compilações em frotas de capacidade reservada. Para substituir as configurações da frota para uma compilação computacional do Amazon EC2, use a seguinte sintaxe:
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name>
Para substituir a frota e a imagem usadas para a compilação, use a seguinte sintaxe:
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name>
- image:<environment-type>
-<image-identifier>
Veja abaixo um exemplo de um YAML do pipeline de CI/CD do GitLab:
stages: - build build-job: stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:myFleet - image:arm-3.0
-
Para executar trabalhos do pipeline de CI/CD do GitLab em uma imagem personalizada, você pode configurar uma imagem personalizada no projeto do CodeBuild e evitar fornecer um rótulo de substituição de imagem. O CodeBuild usará a imagem configurada no projeto se nenhum rótulo de substituição de imagem for fornecido.
Depois de confirmar suas alterações em .gitlab-ci.yml
, um pipeline do GitLab será acionado e build-job
enviará uma notificação de webhook que iniciará a compilação no CodeBuild.
Execute os comandos buildspec nas fases INSTALL, PRE_BUILD e POST_BUILD
Por padrão, o CodeBuild ignora qualquer comando buildspec ao executar uma compilação autogerenciada do GitLab. Para executar comandos buildspec durante a compilação, buildspec-override:true
pode ser adicionado como sufixo a tags
:
tags:
- codebuild-<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
- buildspec-override:true
Ao usar esse comando, o CodeBuild criará uma pasta chamada gitlab-runner
na pasta de origem principal do contêiner. Quando o executor do GitLab for iniciado durante a fase BUILD
, o executor será executado no diretório gitlab-runner
.
Há várias limitações ao usar uma substituição de buildspec em uma compilação autogerenciada do GitLab:
-
O CodeBuild não executará comandos buildspec durante a fase
BUILD
, pois o executor autogerenciado é executado na faseBUILD
. -
O CodeBuild não baixará nenhuma fonte primária ou secundária durante a fase
DOWNLOAD_SOURCE
. Se você tiver um arquivo buildspec configurado, somente esse arquivo será baixado da fonte primária do projeto. -
Se um comando de compilação falhar na fase
PRE_BUILD
ouINSTALL
, o CodeBuild não iniciará o executor autogerenciado e o trabalho do pipeline de CI/CD do GitLab precisará ser cancelado manualmente. -
O CodeBuild busca o token do executor durante a fase
DOWNLOAD_SOURCE
, que tem um tempo de expiração de uma hora. Se as fasesPRE_BUILD
ouINSTALL
excederem uma hora, o token do executor poderá expirar antes do início do executor autogerenciado do GitLab.
Etapa 3: revisar os resultados
Sempre que ocorre uma execução do pipeline de CI/CD do GitLab, o CodeBuild recebe os eventos de trabalho do pipeline de CI/CD por meio do webhook. Para cada trabalho no pipeline de CI/CD, o CodeBuild inicia uma compilação para executar um executor efêmero do GitLab. O executor é responsável por executar um único trabalho do pipeline de CI/CD. Depois que o trabalho for concluído, o executor e o processo de compilação associado serão encerrados imediatamente.
Para visualizar os logs de trabalhos do pipeline de CI/CD, navegue até o repositório no GitLab, escolha Compilação, Trabalhos e, em seguida, escolha o Trabalho específico do qual você gostaria de revisar os logs.
Você pode revisar os rótulos solicitados no log enquanto o trabalho está esperando para ser selecionado por um executor autogerenciado no CodeBuild.
Filtrar eventos de webhook do GitLab (AWS CloudFormation)
A seguinte parte formatada em YAML de um modelo do AWS CloudFormation cria um grupo de filtros que aciona uma compilação quando ela é avaliada como verdadeira. O grupo de filtros a seguir especifica uma solicitação de trabalho do pipeline de CI/CD do GitLab com um nome de pipeline de CI/CD correspondente à expressão regular \[CI-CodeBuild\]
.
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: MyProject
ServiceRole: service-role
Artifacts:
Type: NO_ARTIFACTS
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_SMALL
Image: aws/codebuild/standard:5.0
Source:
Type: GITLAB
Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION
Triggers:
Webhook: true
ScopeConfiguration:
Name: group-name
FilterGroups:
- - Type: EVENT
Pattern: WORKFLOW_JOB_QUEUED
- Type: WORKFLOW_NAME
Pattern: \[CI-CodeBuild\]