1. Lernziele
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, die die Abfolge der Schritte für die Bereitstellung in diesen Zielen definiert.
Der Bereitstellungsablauf wird durch eine Cloud Build-Pipeline ausgelöst, die ein Cloud Deploy-Release erstellt und die Bereitstellung im Vorschaucluster durchführt. Nachdem Sie überprüft haben, dass die Bereitstellung in der Vorschau erfolgreich war und wie erwartet funktioniert, stufen Sie die Version manuell im Canary-Cluster hoch. Die Freigabe der Version im Prod-Cluster erfordert eine Genehmigung. Sie genehmigen die Prod-Pipeline in der Cloud Deploy-Benutzeroberfläche und führen dann die Freigabe durch.
Die Ziele dieser Anleitung können in die folgenden Schritte unterteilt werden:
- Arbeitsbereich vorbereiten
- Cloud Deploy-Ziele definieren
- Cloud Deploy-Pipeline definieren
- Release erstellen
- Bereitstellung hochstufen
- Produktionsrelease genehmigen
Einrichten der Umgebung im eigenen Tempo
- 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 ein Konto erstellen.
- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen Zeichenstring, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und kann nach der Festlegung nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen, die normalerweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die ID nicht gefällt, generieren Sie eine andere zufällige ID oder versuchen Sie, Ihre eigene zu verwenden und prüfen Sie, ob sie verfügbar ist. Nach dem Erstellen des Projekts wird es „eingefroren“. - Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Wenn Sie die Ressourcen herunterfahren möchten, damit keine Kosten über diese Anleitung hinaus anfallen, folgen Sie der Anleitung zum Bereinigen am Ende des Codelabs. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.
2. Plattformeinrichtung
Arbeitsbereich vorbereiten
Hier richten wir die Umgebung ein, die für die Ausführung dieser Anleitung erforderlich ist. Nach Abschluss dieses Schritts haben wir einen GKE-Cluster erstellt, in dem wir die Bereitstellungen ausführen können.
- gcloud config-Standardeinstellungen 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 im Verzeichnis „deploy“ mit dem folgenden Befehl in Cloud Shell eine Datei namens „preview.yaml“:
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 im Verzeichnis „deploy“ mit dem folgenden Befehl in Cloud Shell eine Datei namens „canary.yaml“:
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 im Verzeichnis „deploy“ mit dem folgenden Befehl in Cloud Shell eine Datei namens „prod.yaml“:
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, dass das Tag „requireApproval“ auf „true“ gesetzt ist. Die Promotion kann erst nach der Genehmigung auf das Produktionsziel angewendet werden. Sie benötigen die Rolle „roles/clouddeploy.approver“, um eine Version zu genehmigen.
- Bereitstellungsziele 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 der Einrichtung einer neuen App. Für jede neue Anwendung wird eine Bereitstellungspipeline konfiguriert.
Cloud Deploy-Pipeline definieren
- Erstellen Sie im Verzeichnis „deploy“ mit dem folgenden Befehl in Cloud Shell eine Datei namens „pipeline.yaml“:
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 enthält, für die diese Bereitstellungspipeline 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-Rendering beim Erstellen des Release.
- Pipeline anwenden
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Entwicklungsphase
Während der Entwicklung der Anwendungen werden Assets mithilfe automatisierter 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. Releasephase
Am Ende des CICD-Prozesses, in der Regel wenn der Code für die Produktion getaggt wurde, starten Sie den Release-Prozess durch Aufrufen des Befehls cloud deploy release
. Nachdem die Bereitstellung validiert und genehmigt wurde, verschieben Sie den Release in 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 sie in ein GitHub-Repository mit einer Beispiel-Go-Anwendung gepusht. Wir verwenden Cloud Deploy, um diese Anwendung zu veröffentlichen.
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 prüfen
Wenn ein Cloud Deploy-Release erstellt wird, wird er automatisch im ersten Ziel bereitgestellt, also in der Vorschau.
- Rufen Sie in der Google Cloud Console <Cloud Deploy> auf.
- Klicken Sie auf „sample-app“.
Auf diesem Bildschirm sehen Sie eine grafische Darstellung Ihrer Pipeline.
- Prüfen Sie, ob links im Vorschaufeld ein grüner Umriss zu sehen ist. Das bedeutet, dass der Release in dieser Umgebung bereitgestellt wurde.
- Optional können Sie unter „Release-Details“ im unteren Bereich des Bildschirms auf den Release-Namen klicken, um weitere Details zur Veröffentlichung aufzurufen.
- Prüfen Sie, ob die Anwendung mit dem Release erfolgreich bereitgestellt wurde. Führen Sie dazu den folgenden Befehl in der Cloud Shell aus:
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 oben rechts auf dem Bildschirm auf das Symbol für die Webvorschau.
- Wählen Sie „Vorschau auf Port 8080“ aus.
Daraufhin wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.
- Verwenden Sie
ctrl+c
im Terminal, um die Portweiterleitung zu beenden.
Release hochstufen
Nachdem Ihr Release im ersten Ziel (Vorabversion) in der Pipeline bereitgestellt wurde, können Sie ihn 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
Informationen zur Veröffentlichung prüfen
- Rufen Sie die Pipeline der Beispiel-App in der Google Cloud Console auf.
- Prüfen Sie, ob links neben dem Canary-Feld ein grüner Umriss 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 oben rechts auf dem Bildschirm auf das Symbol für die Webvorschau.
- Wählen Sie „Vorschau auf Port 8080“ aus.
Daraufhin wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.
- Verwenden Sie
ctrl+c
im Terminal, um die Portweiterleitung zu beenden.
Produktionsrelease genehmigen
Denken Sie daran, dass wir beim Erstellen des Produktionsziels über „prod.yaml“ das Tag „requireApproval“ auf „true“ festgelegt haben. Dadurch wird eine Genehmigung für die Werbung in der Produktion 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
- Rufen Sie die Pipeline der Beispiel-App in der Google Cloud Console auf.
- Beachten Sie die gelbe Anzeige „1 ausstehend“.
Diese Meldung gibt an, 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 der gelben Benachrichtigung 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 Pipelineseite der Beispiel-App zurück. Dort sehen Sie, dass die Veröffentlichung in der Produktion in Bearbeitung ist.
Produktionsrelease prüfen
Wie bei den anderen Umgebungen können Sie die Bereitstellung nach Abschluss wie unten beschrieben prüfen.
- Führen Sie in Cloud Shell den folgenden Befehl 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 oben rechts auf dem Bildschirm auf das Symbol für die Webvorschau.
- Wählen Sie „Vorschau auf Port 8080“ aus.
Daraufhin wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.
- Verwenden Sie
ctrl+c
im Terminal, um die Portweiterleitung zu beenden.