Auf dieser Seite wird beschrieben, wie Sie Webhooks in Secure Source Manager einrichten.
Webhooks sind HTTP-Anfragen, die durch ein Ereignis in Secure Source Manager ausgelöst und an eine vom Nutzer angegebene URL gesendet werden.
Hinweis
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, damit Sie die nötigen Berechtigungen zum Erstellen von Webhooks haben:
-
Webhooks mit einem vertraulichen Abfragestring authentifizieren:
- Administrator von Secure Source Manager-Repositories (
roles/securesourcemanager.repoAdmin) für das Secure Source Manager-Repository - Auf Secure Source Manager-Instanzen zugreifende Person (
roles/securesourcemanager.instanceAccessor) in der Secure Source Manager-Instanz
- Administrator von Secure Source Manager-Repositories (
-
Webhooks mit Dienstkonto-Autorisierung authentifizieren:
- Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Dienstkonto des Secure Source Manager-Repositorys - SSM-Dienst-Agent (
roles/iam.serviceAccountTokenCreator) für das Dienstkonto des Secure Source Manager-Repositorys - Cloud Run Invoker (
roles/run.invoker) für den Zieldienst (nur erforderlich, wenn das Ziel Cloud Run ist)
- Dienstkontonutzer (
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Informationen zum Zuweisen von Secure Source Manager-Rollen finden Sie unter Zugriffssteuerung mit IAM und Nutzern Instanzzugriff gewähren.
Webhook einrichten
Console
- Rufen Sie in der Secure Source Manager-Weboberfläche das Repository auf, für das Sie einen Webhook erstellen möchten.
- Klicken Sie auf Einstellungen.
- Klicken Sie auf Webhooks und dann auf Webhook hinzufügen.
Geben Sie im Feld Hook-ID eine ID für den Webhook ein.
Geben Sie im Feld Ziel-URL die Webhook-URL ein. Wenn Sie beispielsweise einen Build in Jenkins auslösen möchten, können Sie einen Webhook-Trigger einrichten und dann die Jenkins-Trigger-URL hier eingeben, um den Build in Jenkins auszulösen.
Wählen Sie im Bereich Auslösen bei eine der folgenden Optionen aus:
- Push: Der Trigger wird ausgelöst, wenn ein Push an das Repository erfolgt.
- Pull-Anfrage-Status geändert: Wird ausgelöst, wenn sich der Status der Pull-Anfrage ändert.
Konfigurieren Sie die Webhook-Authentifizierung entweder mit einem vertraulichen Abfragestring oder mit der Dienstkonto-Authentifizierung:
Sensibler Abfragestring:
Ihr vertraulicher Abfragestring besteht aus den Werten
keyundsecretaus Ihrer Webhook-URL, einschließlich der Präfixekey=undsecret=. Wenn Sie die Autorisierung für vertrauliche Abfragestrings konfigurieren möchten, müssen Sie diese Werte aus Ihrer Webhook-URL entfernen und dem Feld Vertraulicher Abfragestring hinzufügen:- Löschen Sie
?aus Ihrer Webhook-URL. - Kopieren Sie den verbleibenden Teil der URL, der mit
key=beginnt. - Fügen Sie diesen Teil in das Feld Sensitiver Abfragestring ein.
- Löschen Sie denselben Teil aus Ihrer Webhook-URL.
Beispiel für eine URL:
https://cloudbuild.googleapis.com/v1/projects/my-project/triggers/test-trigger:webhook?key=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=My%20Secret%20Ihr vertraulicher Abfragestring wäre:
key=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=My%20Secret%20- Löschen Sie
Dienstkonto-Authentifizierung:
- Prüfen Sie, ob Ihr Repository ein Dienstkonto mit den IAM-Rollen hat, die für die Dienstkontoauthentifizierung unter Erforderliche Rollen definiert sind.
- Wählen Sie Dienstkontoauthentifizierung aktivieren aus.
Wenn Sie Push ausgewählt haben, können Sie im Feld Branch-Filter eine Zulassungsliste für Push-Ereignisse eingeben.
Im Feld Branch filter wird das Glob-Muster verwendet. Nur Vorgänge für die übereinstimmenden Zweige lösen einen Build-Trigger aus. Beispiel:
{main,dev}wird bei Push-Ereignissen für die Zweigemainunddevausgelöst. Wenn das Feld leer oder*ist, werden Push-Ereignisse für alle Zweige gemeldet. Informationen zur Syntax finden Sie in der glob-Dokumentation.Klicken Sie auf Add webhook (Webhook hinzufügen).
Der Webhook wird auf der Seite Webhooks angezeigt.
REST
Rufen Sie zum Erstellen eines Webhooks die Methode hooks.create auf, indem Sie eine POST-Anfrage an den hooks-Endpunkt senden. Sie können Ihren Webhook entweder mit einem vertraulichen Abfragestring oder mit der Dienstkonto-Authentifizierung authentifizieren.
Sensibler Abfragestring
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "targetUri": "https://${SERVICE_NAME}.app/webhook?key=${KEY}&secret=${SECRET}", "events": ["PUSH"] "sensitiveQueryString": "${SENSITIVE_QUERY_STRING_VALUE}" }' \ "https://securesourcemanager.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/repositories/${REPOSITORY}/hooks?hook_id=${HOOK_ID}"SENSITIVE_QUERY_STRING_VALUEsollte der Wert vonkeyundsecretin Ihrer Webhook-URL sein. Wenn IhrkeybeispielsweiseeitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngfund IhrsecretMySecretist, sollte IhrSENSITIVE_QUERY_STRING_VALUEkey=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=MySecretsein.Dienstkonto-Authentifizierung
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "targetUri": "https://${SERVICE_NAME}.app/webhook", "events": ["PUSH"], "serviceAccountAuth": true }' \ "https://securesourcemanager.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/repositories/${REPOSITORY}/hooks?hook_id=${HOOK_ID}"
Webhook testen
- Klicken Sie in Secure Source Manager auf der Seite Webhooks auf den Webhook, den Sie testen möchten.
Scrollen Sie zum Ende der Seite und klicken Sie auf Zustellung testen.
Der Zustellungswarteschlange wird ein Platzhaltertermin hinzugefügt. Es kann einige Sekunden dauern, bis sie im Zustellungsverlauf angezeigt wird.
Sie können auch einen
git-Befehl verwenden, um eine Pull-Anfrage zu pushen oder zusammenzuführen und den Webhook zu testen.Prüfen Sie den Status des ausgelösten Builds oder Ereignisses im Build-Verlauf des Dienstes, in dem Sie den Webhook-Trigger konfiguriert haben.
Nachdem Sie Ihre erste Testbereitstellung gesendet haben, können Sie sich auf der Webhook-Seite von Secure Source Manager im Bereich Letzte Bereitstellungen auch die Anfrage und Antwort für die Testbereitstellung ansehen.
Cloud Build-YAML-Variablen durch Nutzlastdaten ersetzen
Wenn Sie Webhooks verwenden, um eine Verbindung zu Cloud Build herzustellen, können Sie Cloud Build-YAML-Variablen durch Daten aus der Secure Source Manager-Webhook-Nutzlast ersetzen.
Klicken Sie auf der Seite Webhooks von Secure Source Manager im Bereich Letzte Übermittlungen auf die oberste Zeile.
Der Request-Header und der von der Webhook-Nutzlast gesendete Inhalt werden angezeigt.
Rufen Sie das Cloud Build-Dashboard auf und klicken Sie auf Trigger.
Klicken Sie auf den Trigger, den Sie konfigurieren möchten.
Klicken Sie im Bereich „Erweitert“ unter Ersetzungsvariablen auf + Variable hinzufügen.
Geben Sie den Namen und den Wert der Variablen ein. Das Wertpräfix ist
body.Wenn Sie beispielsweise
_REPO_URLdurch das Nutzlastdatenfeldrepository.clone_urlund_COMMIT_SHAdurch den SHA des letzten Commits in der Cloud Build-YAML-Datei ersetzen möchten, geben Sie die folgenden Namen und Werte ein:- Variable 1:
_REPO_URLWert 1:$(body.repository.clone_url) - Variable 2:
_COMMIT_SHAWert 2:$(body.after)
Die Cloud Build-YAML-Datei sieht in etwa so aus:
steps: - name: gcr.io/cloud-builders/git env: - '_REPO_URL=$_REPO_URL' - '_COMMIT_SHA=$_COMMIT_SHA' script: | #!/bin/sh git clone ${_REPO_URL} /workspace cd /workspace git reset --hard ${_COMMIT_SHA}- Variable 1: