GitHub-Problembenachrichtigungen konfigurieren

Cloud Build kann Sie über Build-Updates informieren, indem Benachrichtigungen an ausgewählte Kanäle gesendet werden. Auf dieser Seite wird erläutert, wie Sie Benachrichtigungen mit dem GitHub Issues-Notifier konfigurieren.

Hinweis

  • Aktivieren Sie die Cloud Build API, Compute Engine API, Cloud Run API, Pub/Sub API und Secret Manager API, falls sie noch nicht aktiviert sind.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

    APIs aktivieren

GitHub-Problembenachrichtigungen konfigurieren

Im folgenden Abschnitt wird erläutert, wie Sie GitHub-Problembenachrichtigungen manuell mit dem GitHub Issues-Notifier konfigurieren. Wenn Sie stattdessen die Konfiguration automatisieren möchten, finden Sie weitere Informationen unter Konfiguration für Benachrichtigungen automatisieren.

So konfigurieren Sie GitHub Issues:

  1. Erstellen Sie ein persönliches GitHub-Zugriffstoken:

    1. Rufen Sie die GitHub-Einstellungen auf, um ein neues Token zu erstellen.
    2. Wählen Sie den Bereich repo aus.

    3. Klicken Sie auf Token generieren.

  2. GitHub-Token in Secret Manager speichern:

    1. Öffnen Sie in der Google Cloud Console die Seite „Secret Manager“:

      Zur Seite "Secret Manager"

    2. Klicken Sie auf Secret erstellen.

    3. Geben Sie einen Namen für das Secret ein.

    4. Fügen Sie unter Secret-Wert Ihr GitHub-Token hinzu.

    5. Klicken Sie zum Speichern Ihres Secrets auf Secret erstellen.

  3. Ihr Cloud Run-Dienstkonto hat möglicherweise die Rolle Editor für Ihr Projekt, aber diese Rolle reicht nicht aus, um auf Ihr Secret in Secret Manager zuzugreifen. So gewähren Sie Ihrem Cloud Run-Dienstkonto Zugriff auf Ihr Secret:

    1. Rufen Sie in der Google Cloud Console die IAM-Seite auf:

      Seite "IAM" öffnen

    2. Suchen Sie das Compute Engine-Standarddienstkonto, das mit Ihrem Projekt verknüpft ist:

      Ihr Compute Engine-Standarddienstkonto sieht in etwa so aus:

      project-number-compute@developer.gserviceaccount.com
      

      Notieren Sie sich das Compute Engine-Standarddienstkonto.

    3. Öffnen Sie in der Google Cloud Console die Seite „Secret Manager“:

      Zur Seite "Secret Manager"

    4. Klicken Sie auf den Namen des Secrets, das das Secret für Ihr GitHub-Token enthält.

    5. Klicken Sie im Tab Berechtigungen auf Mitglied hinzufügen.

    6. Fügen Sie das Compute Engine-Standarddienstkonto, das mit Ihrem Projekt verknüpft ist, als Mitglied hinzu.

    7. Wählen Sie die Berechtigung Zugriffsfunktion für Secret Manager-Secret als Rolle aus.

    8. Klicken Sie auf Speichern.

  4. Gewähren Sie Ihrem Cloud Run-Dienstkonto die Berechtigung zum Lesen aus Cloud Storage-Buckets:

    1. Rufen Sie in der Google Cloud Console die IAM-Seite auf:

      Seite "IAM" öffnen

    2. Suchen Sie das Compute Engine-Standarddienstkonto, das mit Ihrem Projekt verknüpft ist:

      Ihr Compute Engine-Standarddienstkonto sieht in etwa so aus:

      project-number-compute@developer.gserviceaccount.com
      
    3. Klicken Sie in der Zeile mit Ihrem Compute Engine-Standarddienstkonto auf das Stiftsymbol. Der Tab Bearbeitungszugriff wird angezeigt.

    4. Klicken Sie auf Weitere Rolle hinzufügen.

    5. Fügen Sie die folgende Rolle hinzu:

      • Storage-Objekt-Betrachter
    6. Klicken Sie auf Speichern.

  5. Schreiben Sie eine Vorlagenkonfigurationsdatei, um das Format zu beschreiben, das erstellte GitHub-Issues haben sollen:

    In der folgenden Beispielkonfigurationsdatei für Vorlagen verwenden die Felder title und body Substitutionsvariablen aus dem Build:

    {
        "title": "Build {{.Build.BuildTriggerId}}: {{.Build.Status}}",
        "body": "[{{.Build.ProjectId}}] {{.Build.BuildTriggerId}} status: **{{.Build.Status}}**\n\n[View Logs]({{.Build.LogUrl}})"
    }
    

    Das Beispiel finden Sie in der Konfigurationsdatei für Vorlagen für den GitHub Issues-Notifier.

    Zusätzliche Felder können über die verfügbaren Body-Parameter des GitHub API-Endpunkt zum Erstellen eines Problems festgelegt werden.

  6. Schreiben Sie eine Notifier-Konfigurationsdatei, um Ihren GitHub Issues-Notifier zu konfigurieren und nach Build-Ereignissen zu filtern:

    In der folgenden Konfigurationsdatei für Notifier wird im Feld filter die Option Common Expression Language mit der verfügbaren Variable build verwendet, um Build-Ereignisse mit dem Status SUCCESS zu filtern:

    apiVersion: cloud-build-notifiers/v1
    kind: GitHubIssuesNotifier
    metadata:
      name: example-githubissues-notifier
    spec:
      notification:
        filter: build.status == Build.Status.FAILURE
        template:
          type: golang
          uri: gs://BUCKET_NAME/TEMPLATE_FILE_NAME
        delivery:
          githubToken:
            secretRef: github-token
          githubRepo: MY_USER/MY_REPO
      secrets:
      - name: github-token
        value: projects/PROJECT_ID/secrets/SECRET_NAME/versions/latest
    

    Wobei:

    • githubToken ist die Konfigurationsvariable, die in diesem Beispiel verwendet wird, um auf das in Secret Manager gespeicherte GitHub-Token zu verweisen. Der hier angegebene Variablenname sollte dem Feld name unter secrets entsprechen.
    • BUCKET_NAME ist der Name des Buckets.
    • TEMPLATE_FILE_NAME ist der Name Ihrer Vorlagendatei.
    • MY_USER/MY_REPO ist der Name des Repositorys, für das Probleme erstellt werden.
    • PROJECT_ID ist die ID des Google Cloud -Projekts.
    • SECRET_NAME ist der Name Ihres Secrets, das Ihr GitHub-Token enthält.

    Das Beispiel finden Sie in der Konfigurationsdatei für Notifier für den GitHub Issues-Notifier.

    Weitere Felder, nach denen Sie filtern können, finden Sie in der Ressource Build. Weitere Filterbeispiele finden Sie unter CEL zum Filtern von Build-Ereignissen verwenden.

  7. Laden Sie die Konfigurationsdatei und die Vorlagendatei für Benachrichtigungen in einen Cloud Storage-Bucket hoch:

    1. Wenn Sie keinen Cloud Storage-Bucket haben, führen Sie den folgenden Befehl aus, um einen Bucket zu erstellen. Ersetzen Sie dabei BUCKET_NAME durch den Namen, den Sie Ihrem Bucket geben möchten. Beachten Sie die Anforderungen für die Namensgebung.

      gcloud storage buckets create gs://BUCKET_NAME/
      
    2. Laden Sie die Konfigurationsdatei für den Notifier und die Vorlagendatei in Ihren Bucket hoch:

      gcloud storage cp CONFIG_FILE_NAME gs://BUCKET_NAME/CONFIG_FILE_NAME
      
      gcloud storage cp TEMPLATE_FILE_NAME gs://BUCKET_NAME/TEMPLATE_FILE_NAME
      

      Wobei:

      • BUCKET_NAME ist der Name des Buckets.
      • CONFIG_FILE_NAME ist der Name Ihrer Konfigurationsdatei.
      • TEMPLATE_FILE_NAME ist der Name Ihrer Vorlagendatei.
  8. Stellen Sie den Notifier in Cloud Run bereit.

     gcloud run deploy SERVICE_NAME \
       --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/githubissues:latest \
       --no-allow-unauthenticated \
       --update-env-vars=CONFIG_PATH=CONFIG_PATH,PROJECT_ID=PROJECT_ID
    

    Hierbei gilt:

    • SERVICE_NAME ist der Name des Cloud Run-Dienstes, in dem Sie das Image bereitstellen.
    • CONFIG_PATH ist der Pfad zur Konfigurationsdatei für den GitHub Issues-Notifier gs://BUCKET_NAME/CONFIG_FILE_NAME.
    • PROJECT_ID ist die ID des Google Cloud -Projekts.

    Mit dem Befehl gcloud run deploy wird die neueste Version des gehosteten Images aus der Artifact Registry von Cloud Build abgerufen. Cloud Build unterstützt Notifier-Images neun Monate lang. Nach neun Monaten löscht Cloud Build die Image-Version. Wenn Sie eine frühere Image-Version verwenden möchten, müssen Sie die vollständige semantische Version des Image-Tags im Attribut image Ihres gcloud run deploy-Befehls angeben. Ältere Image-Versionen und Tags finden Sie in Artifact Registry.

  9. Erstellen Sie ein Dienstkonto, das die Pub/Sub-Abonnementidentität darstellen soll:

    gcloud iam service-accounts create SUB_IDENTITY_SERVICE_ACCOUNT \
      --display-name "SUB_IDENTITY_SERVICE_ACCOUNT_DISPLAY_NAME"
    

    Wobei:

    • SUB_IDENTITY_SERVICE_ACCOUNT ist ein Name für das Dienstkonto.

    • SUB_IDENTITY_SERVICE_ACCOUNT_DISPLAY_NAME ist ein Anzeigename für das Dienstkonto.

  10. Erteilen Sie dem Dienstkonto der Identität Ihres Pub/Sub-Abos die erforderlichen Berechtigungen zum Erstellen von Authentifizierungstokens in IhremGoogle Cloud -Projekt.

    gcloud iam service-accounts add-iam-policy-binding \
        SUB_IDENTITY_SERVICE_ACCOUNT@PROJECT_ID.iiam.gserviceaccount.com \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

    Wobei:

    • PROJECT_ID ist die ID des Google Cloud -Projekts.

    • PROJECT_NUMBER ist Ihre Google Cloud Projektnummer.

  11. Weisen Sie dem SUB_IDENTITY_SERVICE_ACCOUNT-Dienstkonto die Cloud Run-Rolle Invoker zu:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
       --member=serviceAccount:SUB_IDENTITY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/run.invoker
    

    Wobei:

    • SERVICE_NAME ist der Name des Cloud Run-Dienstes, in dem Sie das Image bereitstellen.

    • PROJECT_ID ist die ID des Google Cloud -Projekts.

  12. Erstellen Sie das Thema cloud-builds, um Build-Aktualisierungsnachrichten für Ihren Notifier zu empfangen:

    gcloud pubsub topics create cloud-builds
    

    Sie können auch einen benutzerdefinierten Themennamen in Ihrer Build-Konfigurationsdatei definieren, damit Nachrichten stattdessen an das benutzerdefinierte Thema gesendet werden. In diesem Fall würden Sie ein Thema mit demselben benutzerdefinierten Namen erstellen:

    gcloud pubsub topics create topic-name
    

    Weitere Informationen finden Sie unter Pub/Sub-Themen für Build-Benachrichtigungen.

  13. Erstellen Sie einen Pub/Sub-Push-Abonnenten für Ihren Notifier:

     gcloud pubsub subscriptions create subscriber-id \
       --topic=cloud-builds \
       --push-endpoint=SERVICE_URL \
       --push-auth-service-account=SUB_IDENTITY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com

Dabei gilt: + SUBSCRIBER_ID ist der Name, den Sie dem Abo geben möchten. + SERVICE_URL ist die von Cloud Run generierte URL für den neuen Dienst. + PROJECT_ID ist die ID des Google Cloud -Projekts.

Note: By default, [subscriptions expire after 31 days of inactivity](/pubsub/docs/subscription-overview#lifecycle).
You can adjust or disable the expiration period by including the
[`--expiration-period` flag](/sdk/gcloud/reference/pubsub/subscriptions/create#--expiration-period)
when creating the subscription.

Benachrichtigungen sind nun für Ihr Cloud Build-Projekt eingerichtet. Wenn Sie das nächste Mal einen Build aufrufen, wird ein Problem für das definierte GitHub-Repository erstellt, wenn der Build dem von Ihnen konfigurierten Filter entspricht.

Build-Ereignisse mit CEL filtern

Cloud Build verwendet CEL mit der Variablen build für Felder in der Ressource Build, um auf Felder zuzugreifen, die mit Ihrem Build-Ereignis verknüpft sind, z. B. Ihre Trigger-ID, Image-Liste oder Ersatzwerte. Sie können den String filter verwenden, um Build-Ereignisse in Ihrer Build-Konfigurationsdatei mit einem Feld zu filtern, das in der Ressource Build aufgeführt ist. Die genaue Syntax für Ihr Feld finden Sie in der Datei cloudbuild.proto.

Nach Trigger-ID filtern

Wenn Sie nach Trigger-ID filtern möchten, geben Sie den Wert Ihrer Trigger-ID im Feld filter mit build.build_trigger_id an. Dabei ist trigger-id Ihre Trigger-ID als String:

filter: build.build_trigger_id == trigger-id

Nach Status filtern

Geben Sie im Feld filter mithilfe von build.status den Build-Status an, nach dem der Filter gefiltert werden soll.

Das folgende Beispiel zeigt, wie Sie Build-Ereignisse mit dem Status SUCCESS mithilfe des Felds filter filtern:

filter: build.status == Build.Status.SUCCESS

Sie können auch Builds mit unterschiedlichen Status filtern. Das folgende Beispiel zeigt, wie Build-Ereignisse mit dem Status SUCCESS, FAILURE oder TIMEOUT mit dem Feld filter gefiltert werden:

filter: build.status in [Build.Status.SUCCESS, Build.Status.FAILURE, Build.Status.TIMEOUT]

Weitere Statuswerte, nach denen Sie filtern können, finden Sie in der Referenz zu Build-Ressourcen unter Status.

Nach Tag filtern

Geben Sie zum Filtern nach Tag den Wert Ihres Tags im Feld filter mit build.tags ein, wobei tag-name der Name des Tags ist:

filter: tag-name in build.tags

Mit size können Sie nach der Anzahl der in Ihrem Build-Ereignis angegebenen Tags filtern. Im folgenden Beispiel filtert das Feld filter Build-Ereignisse, bei denen genau zwei Tags angegeben sind, wobei ein Tag als v1 angegeben ist:

filter: size(build.tags) == 2 && "v1" in build.tags

Nach Images filtern

Wenn Sie nach Bildern filtern möchten, geben Sie den Wert Ihres Bildes im Feld filter mit build.images an. Dabei ist image-name der vollständige Name Ihres Bildes, wie er in Artifact Registry aufgeführt ist, z. B. us-east1-docker.pkg.dev/my-project/docker-repo/image-one:

filter: image-name in build.images

Im folgenden Beispiel filtert filter Build-Ereignisse, bei denen entweder us-east1-docker.pkg.dev/my-project/docker-repo/image-one oder us-east1-docker.pkg.dev/my-project/docker-repo/image-two als Bildnamen angegeben sind:

filter: "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images || "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images

Nach Zeitraum filtern

Sie können Build-Ereignisse nach der Erstellungszeit, dem Beginn oder dem Ende eines Builds filtern. Geben Sie dazu in Ihrem Feld filter eine der folgenden Optionen an: build.create_time, build.start_time oder build.finish_time zurück.

Im folgenden Beispiel verwendet das Feld filter timestamp, um Build-Ereignisse mit einer Anfragezeit zu filtern, um den Build am 20. Juli 2020 um 6:00 Uhr zu erstellen:

filter: build.create_time == timestamp("2020-07-20:T06:00:00Z")

Sie können Build-Ereignisse auch nach Zeitvergleichen filtern. Im folgenden Beispiel verwendet das Feld filter timestamp, um Build-Ereignisse mit einer Startzeit zwischen dem 20. Juli 2020, 6:00 Uhr und dem 30. Juli 2020 um 6:00 Uhr zu filtern. , um die Option zu aktivieren.

filter: timestamp("2020-07-20:T06:00:00Z") >= build.start_time && build.start_time <= timestamp("2020-07-30:T06:00:00Z")

Weitere Informationen dazu, wie Zeitzonen in CEL ausgedrückt werden, finden Sie in der Sprachdefinition für Zeitzonen.

Zum Filtern nach der Dauer eines Builds können Sie duration verwenden, um Zeitstempel zu vergleichen. Im folgenden Beispiel verwendet das Feld filter duration, um Build-Ereignisse mit Builds zu filtern, die mindestens fünf Minuten lang ausgeführt werden:

filter: build.finish_time - build.start_time >= duration("5m")

Nach Substitution filtern

Sie können nach Ersetzung filtern, indem Sie die Ersetzungsvariable im Feld filter mit build.substitutions angeben. Im folgenden Beispiel werden im Feld filter Builds aufgeführt, die die Ersetzungsvariable substitution-variable enthalten. Außerdem wird geprüft, ob substitution-variable mit dem angegebenen substitution-value übereinstimmt:

filter: build.substitutions[substitution-variable] == substitution-value

Hierbei gilt:

  • substitution-variable ist der Name Ihrer Substitutionsvariablen.
  • substitution-value ist der Name Ihres Substitutionswerts.

Sie können auch nach Standardwerten für Ersetzungsvariablen filtern. Im folgenden Beispiel werden im Feld filter Builds mit dem Zweignamen master und Builds mit dem Repository-Namen github.com/user/my-example-repo aufgelistet. Die Standardsubstitutionsvariablen BRANCH_NAME und REPO_NAME werden als Schlüssel an build.substitutions übergeben:

filter: build.substitutions["BRANCH_NAME"] == "master" && build.substitutions["REPO_NAME"] == "github.com/user/my-example-repo"

Wenn Sie mithilfe von regulären Ausdrücken nach Strings filtern möchten, können Sie die integrierte Funktion matches verwenden. Im Beispiel unten werden mit dem Feld filter Builds mit dem Status FAILURE oder TIMEOUT gefiltert, die auch eine Build-Ersetzungsvariable TAG_NAME mit einem Wert haben, der dem regulären Ausdruck v{DIGIT}.{DIGIT}.{3 DIGITS}) entspricht.

filter: build.status in [Build.Status.FAILURE, Build.Status.TIMEOUT] && build.substitutions["TAG_NAME"].matches("^v\\d{1}\\.\\d{1}\\.\\d{3}$")

Eine Liste der Standardsubstitutionswerte finden Sie unter Standardsubstitutionen verwenden.

Nächste Schritte