Tutorial: Einen CodeBuild -gehosteten GitHub Actions-Runner konfigurieren - AWS CodeBuild

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Einen CodeBuild -gehosteten GitHub Actions-Runner konfigurieren

Dieses Tutorial zeigt Ihnen, wie Sie Ihre CodeBuild Projekte für die Ausführung GitHub von Actions-Jobs konfigurieren. Weitere Informationen zur Verwendung von GitHub Actions mit CodeBuild finden Sie unterTutorial: Einen CodeBuild -gehosteten GitHub Actions-Runner konfigurieren.

Um dieses Tutorial abzuschließen, müssen Sie zunächst:

  • Stellen Sie eine Connect mit einem persönlichen Zugriffstoken, einem Secrets Manager Manager-Secret, einer OAuth App oder einer GitHub App her. Wenn Sie eine Verbindung mit einer OAuth App herstellen möchten, müssen Sie dazu die CodeBuild Konsole verwenden. Wenn Sie ein persönliches Zugriffstoken erstellen möchten, können Sie entweder die CodeBuild Konsole verwenden oder die ImportSourceCredentials API. Weitere Anweisungen finden Sie unterGitHub und GitHub Enterprise Server-Zugriff in CodeBuild.

  • Connect CodeBuild zu Ihrem GitHub Konto her. Dazu können Sie einen der folgenden Schritte ausführen:

    • Sie können in GitHub der Konsole einen Quellanbieter hinzufügen. Sie können eine Verbindung entweder mit einem persönlichen Zugriffstoken, einem Secrets Manager Manager-Secret, einer OAuth App oder einer GitHub App herstellen. Detaillierte Anweisungen finden Sie unter GitHub und GitHub Enterprise Server-Zugriff in CodeBuild.

    • Sie können Ihre GitHub Anmeldeinformationen über den importieren ImportSourceCredentials API. Dies ist nur mit einem persönlichen Zugriffstoken möglich. Wenn Sie eine Verbindung über eine OAuth App herstellen, müssen Sie die Verbindung stattdessen über die Konsole herstellen. Detaillierte Anweisungen finden Sie unter GitHub Mit einem Zugriffstoken Connect (CLI) .

    Anmerkung

    Dies ist nur erforderlich, wenn Sie noch keine Verbindung GitHub zu Ihrem Konto hergestellt haben.

Schritt 1: Erstellen Sie ein CodeBuild Projekt mit einem Webhook

In diesem Schritt erstellen Sie ein CodeBuild Projekt mit einem Webhook und überprüfen es in der GitHub Konsole. Sie können GitHub Enterprise auch als Quellanbieter wählen. Weitere Informationen zum Erstellen eines Webhooks in GitHub Enterprise finden Sie unterGitHub manuelle Webhooks.

So erstellen Sie ein CodeBuild Projekt mit einem Webhook
  1. Öffnen Sie die AWS CodeBuild Konsole unter https://console.aws.amazon.com/codesuite/codebuild/home.

  2. Erstellen Sie ein Build-Projekt. Weitere Informationen finden Sie unter Erstellen Sie ein Build-Projekt (Konsole) und Ausführen eines Build (Konsole).

    • In Source (Quelle):

      • Wählen Sie als Quellanbieter. GitHub

      • Wählen Sie unter Repository die Option Repository in meinem GitHub Konto aus.

      • Geben Sie für Repository URL einhttps://github.com/user-name/repository-name.

      Anmerkung

      Standardmäßig empfängt Ihr Projekt nur WORKFLOW_JOB_QUEUED Ereignisse für ein einzelnes Repository. Wenn Sie Ereignisse für alle Repositorys innerhalb einer Organisation oder eines Unternehmens erhalten möchten, finden Sie weitere Informationen unterGitHub globale Webhooks und organisatorische Webhooks.

    • Unter Webhook-Ereignisse der Primärquelle:

      • Wählen Sie für Webhook — optional die Option Jedes Mal neu erstellen, wenn eine Codeänderung in dieses Repository übertragen wird.

      • Wählen Sie als Ereignistyp WORKFLOW _ JOB _ QUEUED aus. Sobald diese Option aktiviert ist, werden Builds nur noch durch GitHubAktions-Workflow-Job-Ereignisse ausgelöst.

        Anmerkung

        CodeBuild verarbeitet GitHub Aktions-Workflow-Job-Ereignisse nur, wenn ein Webhook Filtergruppen enthält, die den WORKFLOW_ JOB _ QUEUED -Ereignisfilter enthalten.

        Erstellen Sie die Konfiguration so, dass sie nur durch GitHub Aktions-Workflow-Job-Ereignisse ausgelöst wird.
    • In Environment (Umgebung):

      • Wählen Sie ein unterstütztes Umgebungs-Image und Compute aus. Beachten Sie, dass Sie die Möglichkeit haben, die Image- und Instanzeinstellungen zu überschreiben, indem Sie in Ihrem GitHub Aktionen-Workflow ein Label verwendenYAML. Weitere Informationen finden Sie unter Schritt 2: Aktualisieren Sie Ihren GitHub Aktionen-Workflow YAML

    • In Buildspec (Build-Spezifikation):

      • Beachten Sie, dass Ihre Buildspec ignoriert wird, sofern sie nicht als buildspec-override:true Label hinzugefügt wird. Stattdessen CodeBuild wird es überschrieben, um Befehle zu verwenden, die den selbst gehosteten Runner einrichten.

  3. Fahren Sie mit den Standardwerten fort und wählen Sie dann Build-Projekt erstellen.

  4. Öffnen Sie die GitHub Konsole unter, https://github.com/user-name/repository-name/settings/hooks um zu überprüfen, ob ein Webhook erstellt wurde und für die Übermittlung von Workflow-Auftragsereignissen aktiviert ist.

Schritt 2: Aktualisieren Sie Ihren GitHub Aktionen-Workflow YAML

In diesem Schritt aktualisieren Sie Ihre GitHub YAML Actions-Workflow-Datei, um Ihre Build-Umgebung GitHubzu konfigurieren und selbst gehostete GitHub Actions-Runner darin CodeBuild zu verwenden. Weitere Informationen finden Sie unter Verwenden von Labels mit selbst gehosteten Runnern und. Label-Overrides werden mit dem Runner „-hosted Actions“ unterstützt CodeBuild GitHub

Aktualisieren Sie Ihren GitHub Aktionen-Workflow YAML

Navigieren Sie zu Ihrem GitHub Aktionsworkflow GitHubund aktualisieren Sie die runs-onEinstellungYAML, um Ihre Build-Umgebung zu konfigurieren. Dazu können Sie einen der folgenden Schritte ausführen:

  • Sie können den Projektnamen und die Run-ID angeben. In diesem Fall verwendet der Build Ihre bestehende Projektkonfiguration für die Berechnung, das Image, die Image-Version und die Instanzgröße. Der Projektname wird benötigt, um die zugehörigen AWS Einstellungen Ihres GitHub Actions-Jobs mit einem bestimmten CodeBuild Projekt zu verknüpfen. Durch die Aufnahme des Projektnamens in CodeBuild ist es möglichYAML, Jobs mit den richtigen Projekteinstellungen aufzurufen. Durch Angabe der Run-ID CodeBuild wird Ihr Build bestimmten Workflow-Ausführungen zugeordnet und der Build gestoppt, wenn der Workflow-Lauf abgebrochen wird. Weitere Informationen finden Sie unter githubKontext.

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

    Stellen Sie sicher, dass Ihr <project-name> entspricht dem Namen des Projekts, das Sie im vorherigen Schritt erstellt haben. Wenn er nicht übereinstimmt, CodeBuild wird der Webhook nicht verarbeitet und der GitHub Aktionsworkflow kann hängen bleiben.

    Im Folgenden finden Sie ein Beispiel für einen GitHub AktionsworkflowYAML:

    name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} steps: - run: echo "Hello World!"
  • Sie können auch Ihr Bild und Ihren Berechnungstyp im Label überschreiben. Eine Liste der verfügbaren Bilder finden Sie unter. Bilder berechnen, die mit dem Runner CodeBuild -hosted GitHub Actions unterstützt werden Der Berechnungstyp und das Bild in der Bezeichnung überschreiben die Umgebungseinstellungen in Ihrem Projekt. Verwenden Sie die folgende Syntax, um Ihre Umgebungseinstellungen für einen CodeBuild EC2 oder Lambda-Compute-Build zu überschreiben:

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

    Im Folgenden finden Sie ein Beispiel für einen GitHub Aktions-WorkflowYAML:

    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!"
  • Sie können die für Ihren Build verwendete Flotte im Label überschreiben. Dadurch werden die in Ihrem Projekt konfigurierten Flotteneinstellungen überschrieben, sodass die angegebene Flotte verwendet wird. Weitere Informationen finden Sie unter Führen Sie Builds auf Flotten mit reservierter Kapazität aus. Verwenden Sie die folgende Syntax, um Ihre Flotteneinstellungen für einen EC2 Amazon-Compute-Build zu überschreiben:

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

    Verwenden Sie die folgende Syntax, um sowohl die Flotte als auch das für den Build verwendete Image zu überschreiben:

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

    Im Folgenden finden Sie ein Beispiel für einen GitHub AktionsworkflowYAML:

    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!"
  • Um Ihre GitHub Actions-Jobs auf einem benutzerdefinierten Image auszuführen, können Sie ein benutzerdefiniertes Image in Ihrem CodeBuild Projekt konfigurieren und vermeiden, dass ein Image Override Label angegeben wird. CodeBuild verwendet das im Projekt konfigurierte Image, wenn kein Image Override-Label angegeben ist.

  • Optional können Sie Labels angeben, die nicht von den CodeBuild unterstützten Bezeichnungen abweichen. Diese Labels werden ignoriert, um die Attribute des Builds zu überschreiben, aber die Webhook-Anfrage schlägt nicht fehl. Das Hinzufügen testLabel als Label verhindert beispielsweise nicht, dass der Build ausgeführt wird.

Anmerkung

Wenn eine von GitHub -hosted runners bereitgestellte Abhängigkeit in der CodeBuild Umgebung nicht verfügbar ist, können Sie die Abhängigkeit mithilfe von GitHub Aktionen in Ihrer Workflow-Ausführung installieren. Sie können die setup-pythonAktion beispielsweise verwenden, um Python für Ihre Build-Umgebung zu installieren.

Führen Sie die Buildspec-Befehle in den Phasen INSTALLBUILD, PRE _ und _ aus POST BUILD

CodeBuild Ignoriert standardmäßig alle Buildspec-Befehle, wenn ein selbst gehosteter Actions-Build ausgeführt wird. GitHub Um Buildspec-Befehle während des Builds auszuführen, buildspec-override:true kann dem Label Folgendes als Suffix hinzugefügt werden:

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

Mit diesem Befehl CodeBuild wird ein Ordner mit dem Namen actions-runner im primären Quellordner des Containers erstellt. Wenn der GitHub Actions-Runner während der BUILD Phase gestartet wird, wird der Runner im actions-runner Verzeichnis ausgeführt.

Bei der Verwendung einer Buildspec-Überschreibung in einem selbst GitHub gehosteten Actions-Build gibt es mehrere Einschränkungen:

  • CodeBuild führt während der Phase keine Buildspec-Befehle aus, da der selbst gehostete Runner in der BUILD Phase ausgeführt wird. BUILD

  • CodeBuild lädt während der Phase keine Primär- oder Sekundärquellen herunter. DOWNLOAD_SOURCE Wenn Sie eine Buildspec-Datei konfiguriert haben, wird nur diese Datei von der Primärquelle des Projekts heruntergeladen.

  • Wenn ein Build-Befehl in der PRE_BUILD INSTALL Oder-Phase fehlschlägt, CodeBuild wird der selbst gehostete Runner nicht gestartet und der Workflow-Job „ GitHub Aktionen“ muss manuell abgebrochen werden.

  • CodeBuild ruft das Runner-Token während der DOWNLOAD_SOURCE Phase ab, die eine Ablaufzeit von einer Stunde hat. Wenn Ihre PRE_BUILD oder Ihre INSTALL Phasen eine Stunde überschreiten, läuft das Runner-Token möglicherweise ab, bevor der GitHub selbst gehostete Runner startet.

Schritt 3: Überprüfe deine Ergebnisse

Immer wenn ein GitHub Aktionsworkflow ausgeführt wird, CodeBuild werden die Workflow-Auftragsereignisse über den Webhook empfangen. CodeBuild Startet für jeden Job im Workflow einen Build, um einen kurzlebigen GitHub Actions-Runner auszuführen. Der Runner ist für die Ausführung eines einzelnen Workflow-Jobs verantwortlich. Sobald der Job abgeschlossen ist, werden der Runner und der zugehörige Build-Prozess sofort beendet.

Um Ihre Workflow-Job-Logs einzusehen, navigieren Sie zu Ihrem Repository in GitHub, wählen Sie Aktionen, wählen Sie den gewünschten Workflow und dann den spezifischen Job aus, für den Sie die Logs überprüfen möchten.

Sie können die angeforderten Labels im Protokoll überprüfen, während der Job darauf wartet, von einem selbst gehosteten Runner übernommen zu werden. CodeBuild

Das Protokoll des Jobs wird geladen.

Sobald der Job abgeschlossen ist, können Sie das Protokoll des Jobs einsehen.

Das Protokoll des Jobs.

GitHub Aktionen filtern Webhook-Ereignisse ()AWS CloudFormation

Der folgende YAML -formatierte Teil einer AWS CloudFormation Vorlage erstellt eine Filtergruppe, die einen Build auslöst, wenn sie als wahr ausgewertet wird. Die folgende Filtergruppe spezifiziert eine Workflow-Auftragsanforderung für GitHub Aktionen mit einem Workflow-Namen, der dem regulären Ausdruck entspricht. \[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\]

Webhook-Ereignisse für GitHub Aktionen filtern ()AWS CDK

Die folgende AWS CDK Vorlage erstellt eine Filtergruppe, die einen Build auslöst, wenn sie als wahr ausgewertet wird. Die folgende Filtergruppe spezifiziert eine Workflow-Auftragsanforderung für GitHub Aktionen.

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)], })

Webhook-Ereignisse für GitHub Aktionen filtern (Terraform)

Die folgende Terraform-Vorlage erstellt eine Filtergruppe, die einen Build auslöst, wenn sie als wahr ausgewertet wird. Die folgende Filtergruppe spezifiziert eine GitHub Aktions-Workflow-Jobanfrage.

resource "aws_codebuild_webhook" "example" { project_name = aws_codebuild_project.example.name build_type = "BUILD" filter_group { filter { type = "EVENT" pattern = "WORKFLOW_JOB_QUEUED" } } }