View a markdown version of this page

Tutorial: configura un CodeBuild-hosted GitHub Actions runner - AWS CodeBuild

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: configura un CodeBuild-hosted GitHub Actions runner

Questo tutorial mostra come configurare i tuoi CodeBuild progetti per eseguire lavori GitHub Actions. Per ulteriori informazioni sull'utilizzo di GitHub Actions con, CodeBuild consultaTutorial: configura un CodeBuild-hosted GitHub Actions runner.

Per completare questo tutorial, è necessario innanzitutto:

  • Connettiti con un token di accesso personale, un segreto di Secrets Manager, un'app OAuth o GitHub un'app. Se desideri connetterti con un'app OAuth, devi utilizzare la CodeBuild console per farlo. Se desideri creare un token di accesso personale, puoi utilizzare la CodeBuild console o utilizzare l'ImportSourceCredentials API. Per ulteriori istruzioni, consulta GitHub e l'accesso a GitHub Enterprise Server in CodeBuild.

  • Connettiti CodeBuild al tuo GitHub account. A tale scopo, puoi effettuare una delle seguenti operazioni:

    Nota

    Questa operazione deve essere eseguita solo se non ti sei connesso al tuo GitHub account.

Passaggio 1: crea un CodeBuild progetto con un webhook

In questo passaggio, creerai un CodeBuild progetto con un webhook e lo esaminerai nella GitHub console. Puoi anche scegliere GitHub Enterprise come fornitore di origine. Per saperne di più sulla creazione di un webhook in GitHub Enterprise, consultaGitHub webhook manuali.

Per creare un CodeBuild progetto con un webhook
  1. Apri la AWS CodeBuild console all'indirizzo. https://console.aws.amazon.com/codesuite/codebuild/home

  2. Creare un progetto di compilazione. Per informazioni, consulta Creare un progetto di compilazione (console) e Esecuzione di una compilazione (console).

  3. In Tipo di progetto, scegli Progetto Runner.

    In Runner:

    1. Per il provider Runner, scegli. GitHub

    2. Per la posizione di Runner, scegli Repository.

    3. Per l'URL del repository in Repository, scegli. https://github.com/user-name/repository-name

    Nota

    Per impostazione predefinita, il progetto riceverà solo WORKFLOW_JOB_QUEUED eventi per un singolo repository. Se desideri ricevere eventi per tutti i repository all'interno di un'organizzazione o impresa, consulta. GitHub webhook globali e organizzativi

    • In Environment (Ambiente):

      • Scegli un'immagine dell'ambiente supportata ed esegui il calcolo. Nota che hai la possibilità di sovrascrivere le impostazioni dell'immagine e dell'istanza utilizzando un'etichetta nel tuo flusso di lavoro GitHub Actions YAML. Per ulteriori informazioni, consulta Passaggio 2: aggiorna il tuo flusso di lavoro GitHub Actions YAML

    • In Buildspec:

      • Nota che il tuo buildspec verrà ignorato a meno che non venga aggiunto come etichetta. buildspec-override:true Invece, lo CodeBuild sovrascriverà per utilizzare i comandi che configureranno il runner self-hosted.

  4. Continua con i valori predefiniti e quindi scegli Create build project.

  5. Apri la GitHub console all'indirizzo https://github.com/user-name/repository-name/settings/hooks per verificare che un webhook sia stato creato e sia abilitato a fornire eventi Workflow jobs.

Passaggio 2: aggiorna il tuo flusso di lavoro GitHub Actions YAML

In questo passaggio, aggiornerai il file YAML del flusso di lavoro di GitHub Actions GitHub per configurare l'ambiente di compilazione e utilizzare i runner ospitati autonomamente da GitHub Actions in. CodeBuild Per maggiori informazioni, consulta Usare le etichette con corridori ospitati autonomamente e. Le sostituzioni delle etichette sono supportate da Actions runner CodeBuild-hosted GitHub

Aggiorna il tuo flusso di lavoro GitHub Actions (YAML).

Accedi GitHub e aggiorna l'runs-onimpostazione nel tuo flusso di lavoro GitHub Actions YAML per configurare il tuo ambiente di compilazione. A tale scopo, puoi effettuare una delle seguenti operazioni:

  • Puoi specificare il nome del progetto e l'ID di esecuzione, nel qual caso la build utilizzerà la configurazione del progetto esistente per il calcolo, l'immagine, la versione dell'immagine e le dimensioni dell'istanza. Il nome del progetto è necessario per collegare le impostazioni AWS relative del job GitHub Actions a un progetto specifico CodeBuild. Includendo il nome del progetto in YAML, CodeBuild è possibile richiamare lavori con le impostazioni di progetto corrette. Fornendo l'ID di esecuzione, CodeBuild associa la build a specifiche esecuzioni del flusso di lavoro e la interrompe quando l'esecuzione del flusso di lavoro viene annullata. Per ulteriori informazioni, consulta github contesto.

    runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
    Nota

    Assicurati che il tuo nome <project-name> corrisponda al nome del progetto che hai creato nel passaggio precedente. Se non corrisponde, non CodeBuild elaborerà il webhook e il flusso di lavoro GitHub Azioni potrebbe bloccarsi.

    Di seguito è riportato un esempio di flusso di lavoro GitHub Actions YAML:

    name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} steps: - run: echo "Hello World!"
  • Puoi anche sovrascrivere l'immagine e il tipo di calcolo nell'etichetta. Consulta Calcola le immagini supportate con Actions runner CodeBuild-hosted GitHub l'elenco delle immagini curate. Per l'utilizzo di immagini personalizzate, consultaLe sostituzioni delle etichette sono supportate da Actions runner CodeBuild-hosted GitHub. Il tipo di calcolo e l'immagine nell'etichetta sovrascriveranno le impostazioni dell'ambiente del progetto. Per sovrascrivere le impostazioni dell'ambiente per una build di elaborazione CodeBuild EC2 o Lambda, usa la seguente sintassi:

    runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} image:<environment-type>-<image-identifier> instance-size:<instance-size>

    Di seguito è riportato un esempio di flusso di lavoro GitHub Actions YAML:

    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!"
  • Puoi sovrascrivere il parco macchine utilizzato per la tua build nell'etichetta. Ciò sostituirà le impostazioni della flotta configurate nel progetto per utilizzare la flotta specificata. Per ulteriori informazioni, consulta Run si basa su flotte a capacità riservata. Per sovrascrivere le impostazioni del parco macchine per una build di calcolo Amazon EC2, utilizza la seguente sintassi:

    runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} fleet:<fleet-name>

    Per sovrascrivere sia la flotta che l'immagine utilizzate per la compilazione, utilizza la seguente sintassi:

    runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} fleet:<fleet-name> image:<environment-type>-<image-identifier>

    Di seguito è riportato un esempio di flusso di lavoro GitHub Actions YAML:

    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!"
  • Per eseguire i lavori GitHub Actions su un'immagine personalizzata, puoi configurare un'immagine personalizzata nel tuo CodeBuild progetto ed evitare di fornire un'etichetta di sostituzione dell'immagine. CodeBuild utilizzerà l'immagine configurata nel progetto se non viene fornita alcuna etichetta di sostituzione dell'immagine.

  • Facoltativamente, puoi fornire etichette diverse da quelle supportate CodeBuild . Queste etichette verranno ignorate allo scopo di sovrascrivere gli attributi della build, ma non daranno esito negativo alla richiesta del webhook. Ad esempio, l'aggiunta testLabel come etichetta non impedirà l'esecuzione della build.

Nota

Se una dipendenza fornita dai GitHub-hosted runner non è disponibile nell' CodeBuildambiente, puoi installarla utilizzando GitHub Actions nell'esecuzione del flusso di lavoro. Ad esempio, puoi usare l'setup-pythonazione per installare Python per il tuo ambiente di compilazione.

Esegui i comandi buildspec nelle fasi INSTALL, PRE_BUILD e POST_BUILD

Per impostazione predefinita, CodeBuild ignora qualsiasi comando buildspec durante l'esecuzione di una build Actions ospitata autonomamente. GitHub Per eseguire i comandi buildspec durante la compilazione, è buildspec-override:true possibile aggiungere come suffisso all'etichetta:

runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} buildspec-override:true

Usando questo comando, CodeBuild creerà una cartella chiamata actions-runner nella cartella di origine principale del contenitore. Quando il runner GitHub Actions si avvia durante la BUILD fase, il runner verrà eseguito nella actions-runner directory.

Esistono diverse limitazioni quando si utilizza un override buildspec in una build Actions ospitata autonomamente: GitHub

  • CodeBuild non eseguirà i comandi buildspec durante la BUILD fase, poiché il runner self-hosted viene eseguito durante la fase. BUILD

  • CodeBuild non scaricherà alcuna fonte primaria o secondaria durante la fase. DOWNLOAD_SOURCE Se hai configurato un file buildspec, solo quel file verrà scaricato dalla fonte primaria del progetto.

  • Se un comando di compilazione ha esito negativo nella INSTALL fase PRE_BUILD o, non CodeBuild verrà avviato il runner ospitato autonomamente e il processo del flusso di lavoro GitHub Actions deve essere annullato manualmente.

  • CodeBuild recupera il token runner durante la DOWNLOAD_SOURCE fase, che ha una scadenza di un'ora. Se le tue INSTALL fasi PRE_BUILD o le tue fasi superano un'ora, il token del runner potrebbe scadere prima dell'inizio del GitHub runner ospitato autonomamente.

Fase 3: Rivedi i risultati

Ogni volta che si verifica l'esecuzione di un workflow GitHub Actions, CodeBuild riceverebbe gli eventi relativi al job del workflow tramite il webhook. Per ogni processo del flusso di lavoro, CodeBuild avvia una build per eseguire un Actions runner temporaneo. GitHub Il runner è responsabile dell'esecuzione di un singolo processo del flusso di lavoro. Una volta completato il lavoro, il corridore e il processo di compilazione associato verranno immediatamente interrotti.

Per visualizzare i registri dei processi del flusso di lavoro, accedi al tuo repository in GitHub, scegli Azioni, scegli il flusso di lavoro desiderato, quindi scegli il lavoro specifico per il quale desideri esaminare i log.

Puoi rivedere le etichette richieste nel registro mentre il lavoro è in attesa di essere ritirato da un runner in hosting autonomo. CodeBuild

Caricamento del registro del lavoro.

Una volta completato il lavoro, sarà possibile visualizzare il registro del lavoro.

Il registro del lavoro.

GitHub Opzioni di configurazione di Actions Runner

È possibile specificare le seguenti variabili di ambiente nella configurazione del progetto per modificare la configurazione di configurazione dei runner ospitati autonomamente.

CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME

CodeBuild registrerà i corridori ospitati autonomamente con il nome dell'organizzazione specificato come valore di questa variabile di ambiente. Per ulteriori informazioni sulla registrazione dei corridori a livello di organizzazione e sulle autorizzazioni necessarie, vedi Create configuration for a just-in-time runner for an organization.

CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAME

CodeBuild registrerà i corridori ospitati autonomamente con il nome aziendale specificato come valore di questa variabile di ambiente. Per ulteriori informazioni sulla registrazione dei runner a livello aziendale e sulle autorizzazioni necessarie, vedi Create configuration for a just-in-time runner for an Enterprise.

Nota

Per impostazione predefinita, i runner aziendali non sono disponibili negli archivi dell'organizzazione. Per consentire ai runner ospitati autonomamente di accettare i lavori del flusso di lavoro, potrebbe essere necessario configurare le impostazioni di accesso del gruppo di corridori. Per ulteriori informazioni, consulta Rendere i runner aziendali disponibili nei repository.

CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID

CodeBuild registrerà i corridori ospitati autonomamente con l'ID intero del gruppo di corridori memorizzato come valore di questa variabile di ambiente. Per impostazione predefinita, questo valore è 1. Per ulteriori informazioni sui gruppi di corridori ospitati autonomamente, vedi Gestione dell'accesso ai corridori ospitati autonomamente utilizzando i gruppi.

CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME

Per configurare la registrazione dei corridori a livello di organizzazione utilizzando il file YAML del flusso di lavoro GitHub Actions, puoi utilizzare la seguente sintassi:

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_NAME

Per configurare la registrazione dei runner di livello aziendale utilizzando il file YAML del flusso di lavoro GitHub Actions, puoi utilizzare la seguente sintassi:

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_ID

Per configurare la registrazione dei corridori con un ID di gruppo di corridori specifico utilizzando il file YAML del flusso di lavoro GitHub Actions, puoi utilizzare la seguente sintassi:

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!"

GitHub Filtra: azioni, eventi webhook (CloudFormation)

La YAML-formatted parte seguente di un CloudFormation modello crea un gruppo di filtri che attiva una build quando la valutazione è vera. Il seguente gruppo di filtri specifica una richiesta di lavoro del flusso di lavoro GitHub Actions con un nome di flusso di lavoro corrispondente all'espressione regolare. \[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\]

Filtra gli GitHub eventi webhook di Actions (AWS CDK)

Il AWS CDK modello seguente crea un gruppo di filtri che attiva una build quando la valutazione è vera. Il seguente gruppo di filtri specifica una richiesta di lavoro del flusso di lavoro 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)], })

Filtra gli eventi webhook di GitHub Actions (Terraform)

Il seguente modello Terraform crea un gruppo di filtri che attiva una build quando risulta vera. Il seguente gruppo di filtri specifica una richiesta di lavoro del flusso di lavoro 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" } } }

Filtra gli GitHub eventi webhook di Actions (AWS CLI)

AWS CLI I comandi seguenti creano un progetto GitHub Actions runner ospitato autonomamente con un gruppo di filtri per le richieste di lavoro del flusso di lavoro di GitHub Actions che attiva una build quando risulta vera.

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\"}]]"