En este tutorial, se muestra cómo configurar los proyectos de CodeBuild para ejecutar trabajos de canalización de CI/CD de GitLab. Para obtener más información sobre el uso de GitLab o GitLab Self Managed con CodeBuild, consulte Ejecutores de GitLab autoadministrados en AWS CodeBuild.
Para completar este tutorial, primero debe:
-
Conéctese con una aplicación OAuth mediante CodeConnections. Tenga en cuenta que, al conectarse con una app OAuth, debe usar la consola de CodeBuild. Para obtener instrucciones adicionales, consulte Acceso a GitLab en CodeBuild.
-
Conecte CodeBuild a su cuenta de GitLab. Para ello, puede agregar GitLab como proveedor de origen en la consola. Para obtener instrucciones, consulte Acceso a GitLab en CodeBuild.
nota
Esto solo es necesario hacerlo si no se ha conectado a GitLab para su cuenta.
Con esta característica, CodeBuild necesita permisos adicionales, como
create_runner
ymanage_runner
de la aplicación OAuth de GitLab. Si existen elementos CodeConnections para una cuenta de GitLab concreta, no solicita las actualizaciones de permisos de forma automática. Para ello, puede ir a la consola de CodeConnections y crear una conexión ficticia con la misma cuenta de GitLab para desencadenar la reautorización y obtener los permisos adicionales. De esta forma, todas las conexiones existentes pueden utilizar la característica del ejecutor. Una vez que se finalice, puede eliminar la conexión ficticia.
Paso 1: Crear un proyecto de CodeBuild con un webhook
En este paso, va a crear un proyecto de CodeBuild con un webhook y lo revisará en la consola de GitLab.
Para crear un proyecto de CodeBuild con un webhook
-
Abra la consola de AWS CodeBuild en https://console.aws.amazon.com/codesuite/codebuild/home
. -
Cree un proyecto de compilación. Para obtener más información, consulte Creación de un proyecto de compilación (consola) y Ejecutar una compilación (consola).
-
En Source (Código fuente):
-
En Proveedor de origen, elija GitLab.
-
En Credencial, elija una de las opciones siguientes:
-
Elija Credencial de origen predeterminada. La conexión predeterminada aplica una conexión de GitLab predeterminada en todos los proyectos.
-
Elija Credencial de origen personalizada. La conexión personalizada aplica una conexión de GitLab personalizada que anula la configuración predeterminada de su cuenta.
nota
Si aún no ha creado una conexión con su proveedor, deberá crear una conexión de GitLab. Para obtener instrucciones, consulte Conexión de CodeBuild a GitLab.
-
-
En Repositorio, elija el nombre de su proyecto en GitLab y, para ello, especifique la ruta del proyecto con el espacio de nombres.
-
-
En Eventos de webhook de origen principal:
-
En Webhook (opcional), seleccione Rebuild every time a code change is pushed to this repository.
-
En Tipo de evento, seleccione WORKFLOW_JOB_QUEUED. Una vez habilitada esta opción, las compilaciones solo se desencadenarán mediante eventos de trabajos de canalización de CI/CD de GitLab.
nota
CodeBuild solo procesará los eventos de trabajos de canalización de CI/CD de GitLab si un webhook tiene grupos de filtros que contengan el filtro de eventos WORKFLOW_JOB_QUEUED.
-
-
En Environment (Entorno):
-
Elija una Imagen del entorno y una Computación compatibles. Tenga en cuenta que tiene la opción de anular la configuración de imagen e instancia mediante una etiqueta en el YAML de la canalización de CI/CD de GitLab. Para obtener más información, consulte Paso 2: Crear un archivo .gitlab-ci.yml en el repositorio.
-
-
En Buildspec:
-
Tenga en cuenta que su especificación de compilación se ignorará a menos que se agregue
buildspec-override:true
como etiqueta. En su lugar, CodeBuild la anulará para usar comandos que configurarán el ejecutor autoadministrado.
-
-
-
Continúe con los valores predeterminados y, a continuación, elija Crear el proyecto de compilación.
-
Abra la consola de GitLab en
https://gitlab.com/
para comprobar que se ha creado un webhook y que está habilitado para entregar eventos Workflow jobs.user-name
/repository-name
/-/hooks
Paso 2: Crear un archivo .gitlab-ci.yml en el repositorio
En este paso, va a crear un archivo .gitlab-ci.yml
en GitLab
Actualización del YAML de canalización de CI/CD de GitLab
Desplácese a https://gitlab.com/
y cree un archivo user-name
/project-name
/-/tree/branch-name
.gitlab-ci.yml
en su repositorio. Para configurar el entorno de compilación, realice una de las siguientes acciones:
-
Puede especificar el nombre del proyecto de CodeBuild, en cuyo caso la compilación utilizará la configuración de proyecto existente para la computación, la imagen, la versión de la imagen y el tamaño de la instancia. El nombre del proyecto es necesario para vincular la configuración relacionada con AWS de su trabajo de GitLab a un proyecto de CodeBuild específico. Al incluir el nombre del proyecto en el YAML, CodeBuild puede invocar trabajos con la configuración de proyecto correcta.
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
es necesario para asignar la compilación a ejecuciones específicas de trabajos de canalización y detener la compilación cuando se cancele la ejecución de la canalización.nota
Asegúrese de que el valor de
<project-name>
coincida con el nombre del proyecto que ha creado en CodeBuild. Si no coincide, CodeBuild no procesará el webhook y la canalización de CI/CD de GitLab puede dejar de responder.El siguiente es un ejemplo de YAML de canalización de CI/CD de 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
-
También puede anular el tipo de computación e imagen en la etiqueta. Consulte Imágenes de computación compatibles con el ejecutor de GitLab alojado en CodeBuild para obtener una lista de las imágenes disponibles. El tipo de computación y la imagen de la etiqueta anularán la configuración del entorno en el proyecto. Si quiere anular la configuración del entorno para una compilación de computación de Amazon EC2, utilice la sintaxis siguiente:
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:<environment-type>
-<image-identifier>
- instance-size:<instance-size>
El siguiente es un ejemplo de YAML de canalización de CI/CD de 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
-
Puede anular la flota utilizada para su compilación en la etiqueta. Al hacerlo, se anularán los valores de flota configurados en el proyecto para usar la flota especificada. Para obtener más información, consulte Ejecución de compilaciones en flotas de capacidad reservada. Si quiere anular la configuración de la flota para una compilación de computación de Amazon EC2, utilice la siguiente sintaxis:
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name>
Para anular tanto la flota como la imagen utilizadas para la compilación, utilice la sintaxis siguiente:
tags: - codebuild-
<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name>
- image:<environment-type>
-<image-identifier>
El siguiente es un ejemplo de YAML de canalización de CI/CD de 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 ejecutar sus trabajos de canalización de CI/CD de GitLab en una imagen personalizada, puede configurar una imagen personalizada en su proyecto de CodeBuild y evitar tener que proporcionar una etiqueta de anulación de imagen. CodeBuild usará la imagen configurada en el proyecto si no se proporciona ninguna etiqueta de anulación de imagen.
Tras confirmar los cambios en .gitlab-ci.yml
, se desencadenará una canalización de GitLab y build-job
enviará una notificación de webhook que iniciará su compilación en CodeBuild.
Ejecución de comandos buildspec durante las fases INSTALL, PRE_BUILD y POST_BUILD
De forma predeterminada, CodeBuild ignora cualquier comando buildspec al ejecutar una compilación de GitLab autoadministrada. Para ejecutar comandos buildspec durante la compilación, se puede agregar buildspec-override:true
como sufijo a tags
:
tags:
- codebuild-<codebuild-project-name>
-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
- buildspec-override:true
Con este comando, CodeBuild creará una carpeta llamada gitlab-runner
en la carpeta de origen principal del contenedor. Cuando el ejecutor de GitLab se inicia durante la fase BUILD
, el ejecutor se activará en el directorio gitlab-runner
.
Existen varias limitaciones al usar una anulación de buildspec en una compilación de GitLab autoadministrada:
-
CodeBuild no ejecutará comandos buildspec durante la fase
BUILD
, ya que el ejecutor autoadministrado se ejecuta en la faseBUILD
. -
CodeBuild no descargará ningún origen principal o secundario durante la fase
DOWNLOAD_SOURCE
. Si ha configurado un archivo buildspec, solo se descargará ese archivo del origen principal del proyecto. -
Si un comando de compilación genera un error en la fase
PRE_BUILD
oINSTALL
, CodeBuild no iniciará el ejecutor autoadministrado y el trabajo de canalización de CI/CD de GitLab deberá cancelarse de forma manual. -
CodeBuild obtiene el token del ejecutor durante la fase
DOWNLOAD_SOURCE
, que tiene un tiempo de vencimiento de una hora. Si las fasesPRE_BUILD
oINSTALL
duran más de una hora, el token del ejecutor puede caducar antes de que se inicie el ejecutor autoadministrado de GitLab.
Paso 3: Revisar los resultados
Siempre que se ejecute una canalización de CI/CD de GitLab, CodeBuild recibirá los eventos de trabajo de la canalización de CI/CD a través del webhook. Para cada trabajo de la canalización de CI/CD, CodeBuild inicia una compilación para utilizar un ejecutor efímero de GitLab. El ejecutor es responsable de ejecutar un único trabajo de canalización de CI/CD. Una vez que se complete el trabajo, el ejecutor y el proceso de compilación asociado finalizarán de forma inmediata.
Para ver los registros de los trabajos de canalización de CI/CD, navegue hasta el repositorio en GitLab, elija Build, Jobs y, a continuación, elija el elemento Job específico para el que quiera revisar los registros.
Puede revisar las etiquetas solicitadas en el registro mientras el trabajo espera a que lo seleccione un ejecutor autoadministrado en CodeBuild.
Filtrado de eventos de webhook en GitLab (AWS CloudFormation)
La siguiente parte de una plantilla de AWS CloudFormation con formato YAML crea un grupo de filtros que desencadena una compilación cuando se evalúa como true. El siguiente grupo de filtros especifica una solicitud de trabajo de canalización de CI/CD de GitLab cuyo nombre de canalización de CI/CD coincide con la expresión 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\]