Tutorial: Configuración de un ejecutor de GitHub Actions alojado en CodeBuild
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 de 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: creación de 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 Tipo de proyecto, seleccione Proyecto de ejecutor.
En Ejecutor:
-
En Proveedor de ejecutor, elija GitHub.
-
En Ubicación del ejecutor, seleccione Repositorio.
-
En URL del repositorio en Repositorio, elija https://github.com/user-name/repository-name.
nota
De forma predeterminada, el proyecto únicamente recibirá eventos
WORKFLOW_JOB_QUEUEDpara 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 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: actualización del 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:truecomo 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: actualización del 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 GitHubruns-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 ver una lista de imágenes seleccionadas. Para usar imágenes personalizadas, consulte Anulaciones de etiquetas admitidas con el ejecutor de GitHub Actions alojado en CodeBuild. 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 }} fleet:myFleet image:arm-3.0 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
testLabelcomo 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_BUILDoINSTALL, 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_BUILDoINSTALLduran más de una hora, el token del ejecutor puede caducar antes de que se inicie el ejecutor autoalojado de GitHub.
Paso 3: revisión de 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.
Opciones de configuración del ejecutor de GitHub Actions
Puede especificar las siguientes variables de entorno en la configuración del proyecto para modificar la configuración de instalación de los ejecutores autoalojados.
CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME-
CodeBuild registrará los ejecutores autoalojados con el nombre de la organización especificado como valor de esta variable de entorno. Para obtener más información sobre el registro de ejecutores en el nivel de organización y los permisos necesarios, consulte Creación de una configuración para un ejecutor justo a tiempo para una organización
. CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAME-
CodeBuild registrará los ejecutores autoalojados con el nombre de la empresa especificado como valor de esta variable de entorno. Para obtener más información sobre el registro de ejecutores en el nivel de empresa y los permisos necesarios, consulte Creación de una configuración para un ejecutor justo a tiempo para una empresa
. nota
De forma predeterminada, los ejecutores empresariales no están disponibles en los repositorios de la organización. Para que los ejecutores autoalojados recojan trabajos de flujos de trabajo, es posible que deba configurar los ajustes de acceso al grupo de ejecutores. Para obtener más información, consulte Adición de ejecutores de empresa a repositorios
. CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID-
CodeBuild registrará los ejecutores autoalojados con el ID entero del grupo de ejecutores almacenado como valor de esta variable de entorno. De forma predeterminada este valor es 1. Para obtener más información sobre los grupos de ejecutores autoalojados, consulte Administración del acceso a ejecutores autoalojados mediante grupos
. CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAMEPara configurar el registro de ejecutores de nivel de organización mediante un archivo YAML de flujo de trabajo de GitHub Actions, puede usar la siguiente sintaxis:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} organization-registration-name:myOrganization steps: - run: echo "Hello World!"CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAMEPara configurar el registro de ejecutores de nivel de empresa mediante un archivo YAML de flujo de trabajo de GitHub Actions, puede usar la siguiente sintaxis:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} enterprise-registration-name:myEnterprise steps: - run: echo "Hello World!"CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_IDPara configurar el registro de ejecutores con el ID específico del grupo de ejecutores mediante un archivo YAML de flujo de trabajo de GitHub Actions, puede usar la siguiente sintaxis:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} registration-group-id:3 steps: - run: echo "Hello World!"
Filtrado de eventos de webhook de GitHub Actions (CloudFormation)
La siguiente parte de una plantilla de 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 Scope: GITHUB_ORGANIZATION 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" } } }
Filtrado de eventos de webhook de GitHub Actions (AWS CLI)
Los siguientes comandos de la AWS CLI crean un proyecto de ejecutor de GitHub Actions autoalojado con un grupo de filtros de solicitudes de trabajo del flujo de trabajo de GitHub Actions que desencadena una compilación cuando se evalúa como true.
aws codebuild create-project \ --name <project name> \ --source "{\"type\":\"GITHUB\",\"location\":\"<repository location>\",\"buildspec\":\"\"}" \ --artifacts {"\"type\":\"NO_ARTIFACTS\""} \ --environment "{\"type\": \"LINUX_CONTAINER\",\"image\": \"aws/codebuild/amazonlinux-x86_64-standard:5.0\",\"computeType\": \"BUILD_GENERAL1_MEDIUM\"}" \ --service-role "<service role ARN>"
aws codebuild create-webhook \ --project-name <project name> \ --filter-groups "[[{\"type\":\"EVENT\",\"pattern\":\"WORKFLOW_JOB_QUEUED\"}]]"