Diese Anleitung funktioniert sowohl mit öffentlichen als auch mit privaten GitHub-Repositories. Beachten Sie, dass die Vorschauen selbst, falls sie verdeckt sind, öffentlich sind.
Ziele
- Cloud Run-Dienst erstellen
- Implementieren Sie die Versionsverwaltungsbasierte Continuous Integration auf GitHub.
- Zugriff auf Secrets über Secret Manager erstellen und verwalten
- Benutzerdefinierten Cloud Builder bereitstellen
- Cloud Build-Trigger zum Aufrufen von Builds für GitHub-Pull-Anfragen erstellen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Anleitung benötigen:
-
Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor
) -
Cloud Run-Administrator (
roles/run.admin
) -
Dienstkonten erstellen (
roles/iam.serviceAccountCreator
) -
Secret Manager-Administrator (
roles/secretmanager.admin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Codebeispiel abrufen
Der Einfachheit halber erstellen Sie für diese Anleitung ein neues GitHub-Repository mit der Kopie einer „Hello World“-Anwendung, die auf einer Vorlage basiert. Anschließend fügen Sie diesem Repository eine neue Datei mit der benutzerdefinierten Cloud Build-Konfiguration hinzu.
- Melden Sie sich bei GitHub an und rufen Sie das Vorlagen-Repository auf.
- Erstellen Sie mithilfe dieser Vorlage ein neues Repository durch Klicken auf „Diese Vorlage verwenden“.
- Benennen Sie Ihr Repository mit
helloworld-python
. - Wählen Sie für das Repository entweder "Öffentlich" oder "Privat" aus.
- Klicken Sie auf Repository aus Vorlage erstellen.
- Benennen Sie Ihr Repository mit
Erstellen Sie eine neue Cloud Build-Konfigurationsdatei im Repository (siehe vollständige Anleitung):
- Klicken Sie auf der Repository-Seite auf Datei hinzufügen > Neue Datei erstellen.
- Benennen Sie die neue Datei mit
cloudbuild.yaml
. Kopieren Sie den folgenden Code in die Datei
cloudbuild.yaml
:Behalten Sie die Standardauswahl „Commit direkt in den
main
-Zweig übernehmen“ bei.Klicken Sie auf Commit für neue Datei ausführen.
Dienst mit Build-Trigger bereitstellen
In dieser Anleitung wird gezeigt, wie Sie einen Build-Trigger einrichten, damit bei jeder Aktualisierung des Hauptzweigs Ihres Repositorys automatisch ein Build gestartet wird. Sie können Ihren Dienst auch manuell bereitstellen. Dazu rufen Sie jedes Mal Cloud Build auf, wenn Sie eine Änderung bereitstellen möchten.
In dieser Anleitung verwenden Sie die Datei cloudbuild.yaml
für das Deployment eines Beispieldienstes namens myservice
.
Weisen Sie dem Cloud Build-Dienstkonto die Rollen „Cloud Run-Administrator“ und „Dienstkontonutzer“ zu (siehe vollständige Anleitung):
Rufen Sie in der Google Cloud Console die Cloud Build-Seite mit den Kontoeinstellungen auf.
Aktivieren Sie die Rolle „Cloud Run-Administrator“.
Klicken Sie im Dialogfeld zur Bestätigung auf Zugriff auf alle Dienstkonten gewähren.
Verbinden Sie Ihr GitHub-Konto mit Cloud Build (siehe vollständige Anleitung):
Rufen Sie in der Google Cloud Console die Seite "Cloud Build-Trigger" auf.
Klicken Sie auf Repository verbinden.
Wählen Sie GitHub (Cloud Build-GitHub-Anwendung) als Quelle aus und folgen Sie den Dialogfeldern für die Authentifizierung und Autorisierung.
Wählen Sie das Repository "GITHUB_USER_NAME/helloworld-python" aus.
Klicken Sie auf Repository verbinden.
Klicken Sie unter "Trigger erstellen (optional)" auf Trigger erstellen.
Erstellen Sie einen Cloud Build-Trigger (siehe vollständige Anleitung):
- Klicken Sie auf der Seite „Cloud Build-Trigger“ auf Trigger erstellen.
- Geben Sie die folgenden Informationen ein:
- Name:
prod-deploy
- Ereignis: Push zum Branch
- Quell-Repository: "GITHUB_USER_NAME/helloworld-python"
- Quellzweig:
^main$
- Build-Konfiguration: Cloud Build-Konfigurationsdatei (YAML oder JSON)
- Speicherort der Cloud Build-Konfigurationsdatei:
cloudbuild.yaml
- Name:
- Klicken Sie auf Erstellen.
Führen Sie den neuen Trigger manuell aus:
- Klicken Sie in der neuen Triggerliste auf Ausführen.
- Bestätigen Sie im Pop-up-Fenster den Zweignamen (
main
) und klicken Sie auf Trigger ausführen. - Prüfen Sie die Ausführung des Builds im Cloud Build-Verlauf.
- Warten Sie, bis der Build abgeschlossen ist.
Prüfen Sie, ob das Deployment erfolgreich war.
Wechseln Sie in der Google Cloud Console zur Seite Cloud Run.
Prüfen Sie, ob der Dienst ein grünes Häkchen für ein erfolgreiches Deployment aufweist.
Klicken Sie auf den Tab Überarbeitungen und prüfen Sie, ob der Dienst eine Überarbeitung hat, die 100 % des Traffics bereitstellt und mit „myservice-00001-“ beginnt.
Klicken Sie auf die URL des Dienstes und prüfen Sie, ob mit dem Dienst „Hello World!“ angezeigt wird.
Tokens und Konfigurationen erstellen
Der im vorherigen Abschnitt erstellte Trigger prod-deploy stellt den Dienst bereit, wenn eine Änderung per Push an den Hauptzweig übertragen wird. Sie erstellen jetzt einen zweiten Trigger, der immer dann ausgeführt wird, wenn in Ihrem Repository eine Pull-Anfrage erstellt oder aktualisiert wird.
Nachdem der neue Trigger eingerichtet wurde, wird die Vorschau bereitgestellt. Die Pull-Anfrage enthält aber keine Informationen zur Verknüpfung mit der Vorschau. Um diese Funktionalität einzurichten, müssen Sie folgende zusätzliche Konfigurationsschritte ausführen:
- GitHub-Token erstellen
- Dieses Token in Secret Manager speichern
- Benutzerdefiniertes Image für einen Schritt in Cloud Build erstellen
GitHub-Token erstellen und speichern
- Erstellen Sie ein GitHub-Token, um das Zurückschreiben in eine Pull-Anfrage zu ermöglichen (siehe vollständige Anleitung):
- Rufen Sie die Seite mit den Einstellungen für das persönliche GitHub-Zugriffstoken auf.
- Klicken Sie auf Neues Token erstellen.
- Geben Sie die folgenden Informationen ein:
- Hinweis:
preview-deploy
- Ablauf: 30 Tage
- Umfang:
- Für ein öffentliches Repository:
repo:status
("Status des Zugriffs-Commits") - Für ein privates Repository:
repo
("Vollständige Kontrolle über private Repositories")
- Für ein öffentliches Repository:
- Hinweis:
- Klicken Sie auf Token generieren.
- Kopieren Sie den Wert des generierten Tokens.
Speichern Sie das GitHub-Token in Secret Manager:
Wechseln Sie in der Google Cloud Console zur Seite Secret Manager.
Klicken Sie auf Secret erstellen.
Geben Sie die folgenden Informationen ein:
- Name:
github_token
. - Secret-Wert: Fügen Sie den aus GitHub kopierten Tokenwert ein.
- Name:
Klicken Sie auf Secret erstellen.
Erlauben Sie Cloud Build den Zugriff auf dieses Secret:
Rufen Sie in einem neuen Browsertab in der Google Cloud Console die Seite Cloud Build-Einstellungen auf.
Kopieren Sie den Wert unter „E-Mail-Adresse des Dienstkontos“.
- Die E-Mail-Adresse lautet
PROJECT_NUM@cloudbuild.gserviceaccount.com
.
- Die E-Mail-Adresse lautet
Kehren Sie zu Secret Manager zurück, klicken Sie auf den Tab Berechtigung und dann auf
Hinzufügen.- Neue Hauptkonten:
PROJECT_NUM@cloudbuild.gserviceaccount.com
- Rolle: Zugriffsperson für Secret Manager-Secret
- Neue Hauptkonten:
Klicken Sie auf Speichern.
GitHub empfiehlt, eine Ablaufzeit für persönliche Zugriffstokens festzulegen und E-Mail-Benachrichtigungen zu senden, wenn Tokens ablaufen. Wenn Sie weiterhin Bereitstellungsvorschauen verwenden, erstellen Sie eine neue Version von github_token
, wenn Sie Ihr Token neu generieren. Der Builder im nächsten Schritt ruft die neueste Version des Tokens ab, sodass die Vorschauen weiterhin funktionieren.
Neues Image für Cloud Build erstellen
Das Skript, das die Benachrichtigung „Deployment Preview“ in die Pull-Anfrage schreibt, befindet sich in den Python-Dokumentbeispielen. Statt dieses Skript in Ihren Quellcode aufzunehmen, können Sie es optional in einen Container innerhalb Ihres Projekts einbinden und diesen Container als Schritt in Ihrer Cloud Build-Konfiguration ausführen.
Die folgende Anleitung lässt sich entweder mit Cloud Shell oder mit Ihrem lokalen Computer ausführen, wenn Sie git
und das Google Cloud CLI installiert sowie konfiguriert haben. In der folgenden Anleitung werden beide Vorgehensweisen beschrieben.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Konfigurieren Sie die Google Cloud CLI so, dass Ihr Projekt verwendet wird. Ersetzen Sie dabei
PROJECT_ID
durch Ihre Projekt-ID: Wenn Sie Cloud Shell verwenden, müssen Sie möglicherweise die Google Cloud CLI autorisieren, um einen Google Cloud API-Aufruf durchzuführen. Klicken Sie auf Autorisieren, um diese Aktion fortzusetzen.export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID
- Erstellen Sie ein neues Container-Image:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples cd python-docs-samples/ gcloud builds submit --tag gcr.io/$PROJECT_ID/deployment-previews run/deployment-previews
- Prüfen Sie, ob der Container erstellt wurde:
gcloud container images list
- Entfernen Sie das geklonte Repository:
cd .. rm -rf python-docs-samples
Neue Cloud Build-Konfiguration hinzufügen
Ihr Repository enthält bereits eine Datei cloudbuild.yaml
, die in Ihrem Hauptzweig verwendet wird. Sie erstellen nun eine neue Konfiguration für diesen neuen Trigger.
Klicken Sie auf der GitHub-Repository-Seite auf Datei hinzufügen > Neue Datei erstellen.
- Benennen Sie die neue Datei mit
cloudbuild-preview.yaml
. - Kopieren Sie den folgenden Code und fügen Sie ihn der neuen Datei hinzu:
- Benennen Sie die neue Datei mit
Übernehmen Sie die Änderung in den Hauptzweig Ihres Repositorys.
Sekundären Trigger erstellen
Nachdem die grundlegenden Elemente vorhanden sind, erstellen Sie jetzt den neuen Trigger.
Erstellen Sie einen neuen Cloud Build-Trigger (siehe vollständige Anleitung):
Rufen Sie in der Google Cloud Console die Seite Cloud Build-Trigger auf.
Klicken Sie auf Trigger erstellen.
Geben Sie die folgenden Informationen ein:
- Name:
preview-deploy
- Ereignis: Pull-Anfrage
- Quell-Repository: "GITHUB_USER_NAME/helloworld-python"
- Basis-Branch:
^main$
- Kommentarsteuerung: Erforderlich, außer für Inhaber und Mitbearbeiter
- Für Inhaber des Repositorys werden Vorschauen automatisch auf der Basis der von ihnen erstellten Pull-Anfragen erstellt.
- Wenn Sie die Vorschau von Änderungen für alle Nutzer zulassen möchten, informieren Sie sich über die Sicherheitsanforderungen bei Auswahl von „Nicht erforderlich“.
- Konfiguration: Cloud Build-Konfigurationsdatei
- Speicherort der Cloud Build-Konfigurationsdatei:
cloudbuild-preview.yaml
- Name:
Klicken Sie auf Erstellen.
Erfolgreiche Trigger-Ausführung prüfen
Da dieser neue Trigger ausgelöst wird, wenn eine neue Pull-Anfrage erstellt wird, müssen Sie eine solche Anfrage erstellen, um diesen zu testen.
- Wechseln Sie dazu zu Ihrem Repository und nehmen Sie eine visuelle Änderung an
app.py
in einem neuen Zweig vor:- Rufen Sie
app.py
auf und klicken Sie auf das Stiftsymbol ( ). - Nehmen Sie eine Änderung vor. Ersetzen Sie z. B. „Hello“ durch „Greetings“.
- Wählen Sie Neuen Branch für diesen Commit erstellen und Pull-Anfrage starten aus und klicken Sie auf Änderung vorschlagen.
- Rufen Sie
Erstellen Sie eine neue Pull-Anfrage mit diesem Zweig.
Wenn der Trigger ordnungsgemäß konfiguriert wurde, wird kurz nach der Erstellung der Pull-Anfrage eine neue Prüfung angezeigt:
Der Name der Prüfung besteht aus dem Namen des Triggers und Ihrer Projekt-ID. Prüfen Sie die Ausführung des Builds. Klicken Sie dazu auf Details > Weitere Details in Google Cloud Build anzeigen.
Wenn Ihr Trigger fehlschlägt und Sie den Build noch einmal senden müssen oder wenn Sie eine weitere Änderung an der Pull-Anfrage vornehmen möchten, müssen Sie ein Commit für die Änderung im selben Zweig ausführen. Jedes neue Commit für eine Pull-Anfrage löst einen neuen Build aus.
Wenn der Trigger ausgeführt wurde, wird für die Pull-Anfrage eine neue Statusprüfung mit dem Namen Deployment Preview angezeigt. Das angezeigte Symbol ist Ihr Avatar, da Ihr Konto der Inhaber des verwendeten Tokens ist:
Klicken Sie auf Details, um die Vorschau aufzurufen. Die angezeigte URL entspricht der ursprünglichen Dienst-URL, hat jedoch das Präfix "pr-1---".
Hinweis: Wenn Sie die ursprüngliche Dienst-URL aufrufen, wird der ursprüngliche Inhalt angezeigt:
Sehen Sie sich die Überarbeitungsliste für Ihren Dienst an, um den Dienststatus in Cloud Run zu prüfen. Es gibt jetzt zwei Überarbeitungen, die Traffic bereitstellen: die ursprüngliche Version und die Vorschau:
Nehmen Sie weitere Änderungen an der Pull-Anfrage vor und fügen Sie dazu dem Zweig neue Commits hinzu. Bei jedem Commit wird der Trigger
preview-deploy
ausgelöst. Dadurch wird eine neue Überarbeitung des Dienstes erstellt und diese unter derselben URL verfügbar gemacht:Wenn Sie nun bereit sind, die Änderungen zusammenzuführen, klicken Sie auf Pull-Anfrage zusammenführen. Der ursprüngliche Trigger
prod-deploy
wird ausgeführt und die Änderungen aus der Pull-Anfrage werden in der ursprünglichen URL berücksichtigt:Die neue Überarbeitung stellt 100 % des Traffics zur Haupt-URL bereit. Die Vorschau-URL der Pull-Anfrage ist aber nach wie vor mit dem neuesten Commit für diese Pull-Anfrage verknüpft, sodass der Link weiterhin funktioniert:
Beschränkungen
Die Anzahl der Überarbeitungs-URLs, die erstellt werden können, ist begrenzt. Wenn Sie davon ausgehen, dass Ihr Repository mehr als 1.000 Pull-Anfragen enthält, sollten Sie einen Vorgang zum Bereinigen von Tags ausführen, wie in cloudbuild-cleanup.yaml
gezeigt.
Code verstehen
cloudbuild.yaml
Dieser Code basiert auf der Beispieldatei cloudbuild.yaml
, die von Cloud Build bereitgestellt wird, mit einer speziellen Aktualisierung: der vierte Schritt, der update-traffic
ausführt.
Durch die Konfigurationen in cloudbuild.yaml
werden Änderungen an der Trafficaufteilung vorgenommen.
Der Parameter --to-latest
bietet die gleiche Funktionalität wie das Kästchen Diese Überarbeitung sofort bereitstellen auf der Cloud Run-Seite. Dieser garantiert, dass die Überarbeitung des Dienstes sofort 100 % des Traffics bereitstellt.
cloudbuild-preview.yaml
Dieser Code entspricht cloudbuild.yaml
, enthält jedoch zusätzliche Schritte:
Nachdem Sie das Dienst-Image erstellt und per Push übertragen haben, stellt
cloudbuild-preview.yaml
den Dienst mit dem Flag--no-traffic
bereit. Dies führt dazu, dass diese Überarbeitung, auch wenn sie die neueste Überarbeitung ist, nicht für das Bereitstellen von Traffic verwendet wird.cloudbuild-preview.yaml
fügt ein benutzerdefiniertes Tag anhand der Pull-Anfragenummer hinzu. Das ist in diesem Fall ein String mit dem Präfix „pr-“ und der Nummer der Pull-Anfrage am Ende.An diesem Punkt funktioniert die Überarbeitungs-URL. Allerdings kann die Person, die die Pull-Anfrage gesendet hat, dies nicht feststellen. Cloud Build-Logs sind in GitHub selbst nicht sichtbar, sondern nur ein Link zu den Logs. Die Logs können nur von authentifizierten Nutzern des Cloud Build-Projekts mit den erforderlichen Berechtigungen eingesehen werden.
cloudbuild-preview.yaml
führt das Skriptcheck_status.py
mithilfe von integrierten Substitutionsparametern aus, die von Cloud Build bereitgestellt werden. Einige dieser Parameter stehen bei der Nutzung von GitHub-Repositories zur Verfügung, wie etwa die Pull-Anfragenummer, den Repository-Namen und das Commit-SHA.
Um diesen Trigger noch einmal auszuführen, senden Sie einen weiteren Commit nach GitHub. Dieser Trigger kann auf der Cloud Build-Seite der Console nicht noch einmal ausgeführt werden.
cloudbuild-cleanup.yaml
Dieser Code ist eine Alternative zu cloudbuild.yaml
mit zusätzlichen Bereinigungsfunktionen. Die ersten Schritte führen das Deployment aus und die Funktionalität soll dann so erweitert werden:
Ermitteln Sie mithilfe der Discovery API und den GitHub APIs, welche Tags des Dienstes für geschlossene Pull-Anfragen gelten. Es muss mindestens die zusammengeführte Pull-Anfrage vorhanden sein, die diesen Trigger auslöst.
Löschen Sie die ermittelten Tags.
check_status.py
Das Skript check_status.py
übernimmt die bereitgestellten Informationen zum Cloud Run-Dienst, zum GitHub-Repository sowie zum Commit und führt dann die folgenden Vorgänge aus:
- Rufen Sie den Dienstnamen, das Tag und die Überarbeitungs-URL mit dem Google API-Python-Client ab.
- Rufen Sie das GitHub-Token aus der von Secret Manager bereitgestellten Umgebungsvariable ab.
- Erstellen eines Status für das betreffende Commit durch Verknüpfen mit der abgerufenen Überarbeitungs-URL mithilfe der GitHub-Client-API für Python
Bereinigen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen. Löschen Sie außerdem die für die Anleitung erstellten GitHub-Konfigurationen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Anleitungsressourcen löschen
Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben:
- Rufen Sie die Cloud Run-Konsole auf.
- Wählen Sie den Eintrag „myservice“ aus und klicken Sie auf Löschen.
- Klicken Sie im Dialogfeld zur Bestätigung auf Löschen.
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
- Löschen Sie das Container-Image der Deployment-Vorschau mit dem Namen
gcr.io/PROJECT_ID/deployment-preview
aus Container Registry. - Löschen Sie das „Hello World“-Container-Image mit dem Namen
gcr.io/PROJECT_ID/helloworld
aus Container Registry. - Löschen Sie die Cloud Build-Trigger..
- Löschen Sie das Secret Manager-Secret.
- Löschen Sie das Container-Image der Deployment-Vorschau mit dem Namen
Konfigurationen der Anleitung löschen
Um die Konfigurationen in GitHub zu bereinigen, müssen Sie die Google Cloud Build-Anwendung aus GitHub entfernen:
- Rufen Sie die Einstellungen der GitHub-Anwendung auf.
- Klicken Sie in der Liste Google Cloud Build auf Konfigurieren.
- Klicken Sie im Abschnitt Gefahrenbereich auf Deinstallieren.
- Klicken Sie im Dialogfeld zur Bestätigung auf OK.
Löschen Sie außerdem das erstellte GitHub-Token:
- Rufen Sie die Seite mit den persönlichen GitHub-Zugriffstokens auf.
- Klicken Sie in der Liste preview-deploy auf Löschen.
- Klicken Sie im Dialogfeld zur Bestätigung auf Ich verstehe die Auswirkungen, dieses Token löschen.
Außerdem müssen Sie das GitHub-Repository löschen:
- Wechseln Sie zu Ihrem erstellten GitHub-Repository und klicken Sie auf den Tab „Einstellungen“.
- Klicken Sie im Abschnitt Gefahrenbereich auf Dieses Repository löschen.
- Geben Sie im Dialogfeld zur Bestätigung den vollständigen Namen des Repositorys ein und klicken Sie auf Ich verstehe die Auswirkungen, dieses Repository löschen.