1. Ziele
In dieser Anleitung erstellen Sie drei GKE-Cluster mit den Namen „preview“, „canary“ und „prod“. Anschließend erstellen Sie für jeden Cluster ein Cloud Deploy-Ziel und eine Cloud Deploy-Pipeline, in der die Reihenfolge der Schritte für die Bereitstellung in diesen Zielen definiert wird.
Der Bereitstellungsablauf wird durch eine Cloud Build-Pipeline ausgelöst, die einen Cloud Deploy-Release erstellt und die Bereitstellung im Vorschaucluster ausführt. Nachdem Sie bestätigt haben, dass die Bereitstellung in der Vorschau erfolgreich war und wie erwartet funktioniert, stufen Sie die Version manuell im Canary-Cluster hoch. Die Promotion der Version im Produktionscluster erfordert eine Genehmigung. Sie genehmigen die Produktionspipeline in der Cloud Deploy-UI und führen dann die Promotion durch.
Die Ziele dieser Anleitung lassen sich in die folgenden Schritte unterteilen:
- Arbeitsbereich vorbereiten
- Cloud Deploy-Ziele definieren
- Cloud Deploy-Pipeline definieren
- Release erstellen
- Deployment hochstufen
- Produktionsrelease genehmigen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird und den Sie jederzeit aktualisieren können.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als
PROJECT_IDangegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Nachdem das Projekt erstellt wurde, wird es „eingefroren“. - Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit nach Abschluss dieses Codelabs keine Gebühren anfallen, folgen Sie den Bereinigungsanweisungen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.
2. Plattform einrichten
Arbeitsbereich vorbereiten
Hier richten wir die Umgebung ein, die zum Ausführen dieser Anleitung erforderlich ist. Nach Abschluss dieses Schritts haben wir einen GKE-Cluster erstellt, in dem wir die Deployments ausführen können.
- gcloud-Konfigurationsstandardeinstellungen festlegen
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Repository klonen
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Umgebungsvariablen festlegen
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- APIs aktivieren
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- GKE-Cluster erstellen
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
Cloud Deploy-Ziele definieren
- Erstellen Sie mit dem folgenden Befehl in Cloud Shell eine Datei mit dem Namen „preview.yaml“ im Bereitstellungsverzeichnis:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- Erstellen Sie mit dem folgenden Befehl in Cloud Shell eine Datei namens „canary.yaml“ im Bereitstellungsverzeichnis:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- Erstellen Sie mit dem folgenden Befehl in Cloud Shell eine Datei namens „prod.yaml“ im Bereitstellungsverzeichnis:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
Beachten Sie das Tag „requireApproval“, das auf „true“ gesetzt ist. Die Promotion in das Produktionsziel ist erst möglich, wenn die Genehmigung erteilt wurde. Sie benötigen die Rolle „roles/clouddeploy.approver“, um eine Version zu genehmigen.
- Deploy-Ziele erstellen
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3. App-Erstellung
Im Rahmen der Erstellung einer neuen Anwendung wird die CICD-Pipeline in der Regel so eingerichtet, dass automatische Builds, Integrationstests und Bereitstellungen durchgeführt werden. Die folgenden Schritte sind Teil des Einrichtungsprozesses für eine neue App. Für jede neue Anwendung wird eine Bereitstellungspipeline konfiguriert.
Cloud Deploy-Pipeline definieren
- Erstellen Sie mit dem folgenden Befehl in Cloud Shell eine Datei namens „pipeline.yaml“ im Bereitstellungsverzeichnis:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
Das serialPipeline-Tag enthält ein Tag namens „stages“, das eine Liste aller Ziele ist, für die diese Lieferpipeline konfiguriert wurde.
targetId gibt das spezifische Ziel an, das für diese Phase der Lieferpipeline verwendet werden soll. Der Wert ist das Attribut „metadata.name“ aus der Zieldefinition.
profiles ist eine Liste mit null oder mehr Skaffold-Profilnamen aus skaffold.yaml. Cloud Deploy verwendet das Profil mit „skaffold render“ beim Erstellen des Releases.
- Pipeline anwenden
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Entwicklungsphase
Während die Anwendungen entwickelt werden, werden Assets durch automatisierte CICD-Toolchains erstellt und gespeichert. Die folgenden Befehle werden ausgeführt, um die Anwendung mit Skaffold zu erstellen und Assets für die Bereitstellung mit Cloud Deploy zu speichern. Dieser Schritt wird von Ihrem CICD-Prozess für jeden Anwendungs-Build ausgeführt.
- Anwendung mit Skaffold erstellen und speichern
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. Release-Phase
Am Ende des CICD-Prozesses, in der Regel wenn der Code für die Produktion getaggt ist, starten Sie den Releaseprozess durch Aufrufen des Befehls cloud deploy release. Sobald die Bereitstellung validiert und genehmigt wurde, verschieben Sie den Release durch die verschiedenen Zielumgebungen, indem Sie die Aktion über automatisierte Prozesse oder manuelle Genehmigungen hochstufen und genehmigen.
Release erstellen
Wir haben in dieser Anleitung bereits Cloud Deploy-Dateien erstellt, um die Funktionsweise von Cloud Deploy zu verstehen. Für die Demo haben wir dieselben Cloud Deploy-Dateien erstellt und in ein GitHub-Repository mit einer Beispiel-Go-Anwendung übertragen. Wir verwenden Cloud Deploy, um das Release dieser Anwendung durchzuführen.
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
Release überprüfen
Wenn ein Cloud Deploy-Release erstellt wird, wird er automatisch im ersten Ziel (Vorschau) eingeführt.
- Rufen Sie <Cloud Deploy> in der Google Cloud Console auf.
- Klicken Sie auf „sample-app“.
Auf diesem Bildschirm sehen Sie eine grafische Darstellung Ihrer Pipeline.
- Prüfen Sie, ob sich auf der linken Seite des Vorschaufensters ein grüner Rahmen befindet. Das bedeutet, dass der Release in dieser Umgebung bereitgestellt wurde.
- Optional können Sie sich weitere Details zur Veröffentlichung ansehen, indem Sie im unteren Bereich des Bildschirms unter „Release Details“ (Release-Details) auf den Namen des Releases klicken.
- Prüfen Sie, ob die Anwendung mit dem Release erfolgreich bereitgestellt wurde, indem Sie den folgenden Befehl in Cloud Shell ausführen:
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Klicken Sie rechts oben auf dem Bildschirm auf das Symbol für die Webvorschau.
- „Vorschau auf Port 8080“ auswählen
Sie werden auf eine neue Seite weitergeleitet, auf der die Meldung „Hello World!“ angezeigt wird.
- Verwenden Sie
ctrl+cim Terminal, um die Portweiterleitung zu beenden.
Release hochstufen
Nachdem Ihr Release im ersten Ziel (Vorschau) in der Pipeline bereitgestellt wurde, können Sie es zum nächsten Ziel (Canary) hochstufen. Führen Sie den folgenden Befehl aus, um den Vorgang zu starten.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Release-Promotion überprüfen
- Pipeline für die Beispiel-App in der Google Cloud Console aufrufen
- Prüfen Sie, ob links neben dem Canary-Kästchen ein grüner Rahmen zu sehen ist. Das bedeutet, dass die Version in dieser Umgebung bereitgestellt wurde.
- Prüfen Sie, ob die Anwendung korrekt bereitgestellt wurde, indem Sie einen Tunnel zu ihr erstellen.
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Klicken Sie rechts oben auf dem Bildschirm auf das Symbol für die Webvorschau.
- „Vorschau auf Port 8080“ auswählen
Sie werden auf eine neue Seite weitergeleitet, auf der die Meldung „Hello World!“ angezeigt wird.
- Verwenden Sie
ctrl+cim Terminal, um die Portweiterleitung zu beenden.
Produktionsrelease genehmigen
Als wir das Produktionsziel über prod.yaml erstellt haben, haben wir das Tag „requireApproval“ auf „true“ gesetzt. Dadurch wird eine Genehmigung für die Hochstufung in der Produktionsumgebung erzwungen.
- Stufen Sie den Canary-Release mit dem folgenden Befehl zur Produktion hoch:
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Pipeline für die Beispiel-App in der Google Cloud Console aufrufen
- Beachten Sie die gelbe Anzeige mit dem Hinweis „1 ausstehend“.
Diese Meldung weist darauf hin, dass ein Release für die Bereitstellung in der Produktion in der Warteschlange steht, aber noch geprüft und genehmigt werden muss.
- Klicken Sie direkt unter dem gelben Hinweis auf die Schaltfläche „Überprüfen“.
- Klicken Sie auf dem nächsten Bildschirm noch einmal auf „Überprüfen“, um den Genehmigungsbildschirm für die Produktion aufzurufen.
- Optional können Sie sich die Änderungen im Manifest-Diff ansehen. In diesem Fall eine ganz neue Datei.
- Klicken Sie auf die Schaltfläche „Genehmigen“.
- Kehren Sie zur Pipeline-Seite der Beispiel-App zurück. Dort sehen Sie, dass die Veröffentlichung in der Produktion läuft.
Produktionsrelease überprüfen
Wie bei den anderen Umgebungen können Sie die Bereitstellung nach Abschluss mit den folgenden Schritten überprüfen.
- Führen Sie den folgenden Befehl in Cloud Shell aus, um die Portweiterleitung zu erstellen.
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Klicken Sie rechts oben auf dem Bildschirm auf das Symbol für die Webvorschau.
- „Vorschau auf Port 8080“ auswählen
Sie werden auf eine neue Seite weitergeleitet, auf der die Meldung „Hello World!“ angezeigt wird.
- Verwenden Sie
ctrl+cim Terminal, um die Portweiterleitung zu beenden.