En este tutorial, se muestra cómo configurar los proyectos de CodeBuild para ejecutar trabajos de GitHub Actions. Para obtener más información sobre cómo usar GitHub Actions con CodeBuild, consulte Tutorial: Configuración de un ejecutor de GitHub Actions alojado en CodeBuild.
Para completar este tutorial, primero debe:
-
Conéctese con un token de acceso personal, un secreto de Secrets Manager, una aplicación OAuth o una aplicación GitHub. Si quiere conectarse con una aplicación OAuth, debe usar la consola CodeBuild para ello. Si quiere crear un token de acceso personal, puede usar la consola de CodeBuild o la API ImportSourceCredentials. Para obtener instrucciones adicionales, consulte Acceso a GitHub y GitHub Enterprise Server en CodeBuild.
-
Conecte CodeBuild a su cuenta de GitHub. Para ello, puede hacer una de las acciones siguientes:
-
Es posible agregar GitHub como proveedor de fuentes en la consola. Puede conectarse con un token de acceso personal, un secreto de Secrets Manager, una aplicación OAuth o una aplicación GitHub. Para obtener instrucciones, consulte Acceso a GitHub y GitHub Enterprise Server en CodeBuild.
-
Puede importar sus credenciales de GitHub a través de la API ImportSourceCredentials. Esto solo se puede hacer con un token de acceso personal. Si se conecta mediante una aplicación OAuth, debe usar la consola. Para obtener instrucciones, consulte Conectarse a GitHub con un token de acceso (CLI) .
nota
Esto solo es necesario hacerlo si no se ha conectado a GitHub para su cuenta.
-
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 GitHub. También puede elegir GitHub Enterprise como proveedor de origen. Para obtener más información acerca de cómo crear un webhook en GitHub Enterprise, consulte Webhooks manuales de GitHub.
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 Source provider (Proveedor de código fuente), elija GitHub.
-
En Repositorio, elija Repositorio en mi cuenta de GitHub.
-
En URL de repositorio, especifique
https://github.com/
user-name
/repository-name
nota
De forma predeterminada, el proyecto únicamente recibirá eventos
WORKFLOW_JOB_QUEUED
para un solo repositorio. Si quiere recibir eventos para todos los repositorios de una organización o empresa, consulte Webhooks de organización y globales de GitHub. -
-
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 flujo de trabajo de GitHub Actions.
nota
CodeBuild solo procesará los eventos de trabajos de flujo de trabajo de GitHub Actions 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 del flujo de trabajo de GitHub Actions. Para obtener más información, consulte Paso 2: Actualizar el YAML del flujo de trabajo de GitHub Actions
-
-
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 autoalojado.
-
-
-
Continúe con los valores predeterminados y, a continuación, elija Crear el proyecto de compilación.
-
Abra la consola de GitHub en
https://github.com/
para verificar que se haya creado un webhook y que está habilitado para entregar eventos de trabajos de flujo de trabajo.user-name
/repository-name
/settings/hooks
Paso 2: Actualizar el YAML del flujo de trabajo de GitHub Actions
En este paso, se va a actualizar el archivo YAML del flujo de trabajo de GitHub Actions en GitHub
Actualización del YAML del flujo de trabajo de GitHub Actions
Desplácese hasta GitHub
runs-on
-
Puede especificar el nombre del proyecto y el ID de ejecución, en cuyo caso la compilación usará 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 del trabajo de GitHub Actions 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. Al proporcionar el ID de ejecución, CodeBuild asignará su compilación a ejecuciones de flujo de trabajo específicas y la detendrá cuando se cancele la ejecución del flujo de trabajo. Para obtener más información, consulte el contexto de
github
. runs-on: codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }}nota
Asegúrese de que el valor de
<project-name>
coincida con el nombre del proyecto que ha creado en el paso anterior. Si no coincide, CodeBuild no procesará el webhook y el flujo de trabajo de GitHub Actions puede dejar de responder.A continuación se muestra un ejemplo de YAML de flujo de trabajo de GitHub Actions:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} steps: - run: echo "Hello World!"
-
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 GitHub Actions 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. Para anular la configuración del entorno para una compilación de computación de EC2 de CodeBuild o Lambda, utilice la siguiente sintaxis:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - image:<environment-type>
-<image-identifier>
- instance-size:<instance-size>
A continuación se muestra un ejemplo de YAML de flujo de trabajo de GitHub Actions:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
-
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:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>
Para anular tanto la flota como la imagen utilizadas para la compilación, utilice la sintaxis siguiente:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>
- image:<environment-type>
-<image-identifier>
A continuación se muestra un ejemplo de YAML de flujo de trabajo de GitHub Actions:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
-
Para ejecutar sus trabajos de GitHub Actions en una imagen personalizada, puede configurar una imagen personalizada en el proyecto de CodeBuild y evitar 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.
-
Como opción, puede proporcionar etiquetas distintas a las admitidas por CodeBuild. Estas etiquetas se ignorarán para el fin de anular los atributos de la compilación, pero no provocarán un error de la solicitud de webhook. Por ejemplo, agregar
testLabel
como etiqueta no impedirá que la compilación se ejecute.
nota
Si una dependencia proporcionada por los ejecutores alojados en GitHub no está disponible en el entorno de CodeBuild, puede instalar la dependencia mediante GitHub Actions en la ejecución del flujo de trabajo. Por ejemplo, puede usar la acción setup-python
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 GitHub Actions autoalojada. Para ejecutar comandos buildspec durante la compilación, se puede agregar buildspec-override:true
como sufijo a la etiqueta:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - buildspec-override:true
Con este comando, CodeBuild creará una carpeta llamada actions-runner
en la carpeta de origen principal del contenedor. Cuando el ejecutor de GitHub Actions se inicie durante la fase BUILD
, este se ejecutará en el directorio actions-runner
.
Existen varias limitaciones al usar una anulación de buildspec en una compilación de GitHub Actions autoalojada:
-
CodeBuild no ejecutará comandos buildspec durante la fase
BUILD
, ya que el ejecutor autoalojado 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 autoalojado y el trabajo del flujo de trabajo de GitHub Actions 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 autoalojado de GitHub.
Paso 3: Revisar los resultados
Siempre que se ejecuta un flujo de trabajo de GitHub Actions, CodeBuild recibe los eventos del trabajo del flujo de trabajo a través del webhook. Para cada trabajo del flujo de trabajo, CodeBuild inicia una compilación para utilizar un ejecutor efímero de GitHub Actions. Este es responsable de ejecutar un único trabajo del flujo de trabajo. 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 flujo de trabajo, navegue hasta su repositorio en GitHub, elija Actions, elija el flujo de trabajo que desee y, a continuación, seleccione el elemento Job específico para el que le gustaría revisar los registros.
Puede revisar las etiquetas solicitadas en el registro mientras el trabajo espera a que lo seleccione un ejecutor autoalojado en CodeBuild.

Una vez que se haya completado el trabajo, podrá ver el registro de este.

Filtrado de eventos de webhook de GitHub Actions (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 flujo de trabajo de GitHub Actions con un nombre de flujo de trabajo que 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: GITHUB
Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION
Triggers:
Webhook: true
ScopeConfiguration:
Name: organization-name
FilterGroups:
- - Type: EVENT
Pattern: WORKFLOW_JOB_QUEUED
- Type: WORKFLOW_NAME
Pattern: \[CI-CodeBuild\]
Filtrado de eventos de webhook de GitHub Actions (AWS CDK)
La siguiente plantilla de AWS CDK 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 flujo de trabajo de GitHub Actions.
import { aws_codebuild as codebuild } from 'aws-cdk-lib';
import {EventAction, FilterGroup} from "aws-cdk-lib/aws-codebuild";
const source = codebuild.Source.gitHub({
owner: 'owner',
repo: 'repo',
webhook: true,
webhookFilters: [FilterGroup.inEventOf(EventAction.WORKFLOW_JOB_QUEUED)],
})
Filtrado de eventos de webhook de GitHub Actions (Terraform)
La siguiente plantilla de Terraform 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 flujo de trabajo de GitHub Actions.
resource "aws_codebuild_webhook" "example" {
project_name = aws_codebuild_project.example.name
build_type = "BUILD"
filter_group {
filter {
type = "EVENT"
pattern = "WORKFLOW_JOB_QUEUED"
}
}
}