1. Zielsetzungen
In dieser Anleitung erstellen Sie drei GKE-Cluster mit den Namen „preview“, „Canary“ und „prod“. Erstellen Sie dann ein Cloud Deploy-Ziel für jeden Cluster und eine Cloud Deploy-Pipeline, die die Abfolge der Schritte für die Bereitstellung in diesen Zielen definiert.
Der Bereitstellungsablauf wird von einer Cloud Deploy-Pipeline ausgelöst, die einen Cloud Deploy-Release erstellt und das Deployment im Vorschaucluster ausführt. Nachdem Sie sich vergewissert haben, dass das Deployment in der Vorschau erfolgreich war und wie erwartet funktioniert, stufen Sie den Release im Canary-Cluster manuell hoch. Das Hochstufen des Release im Produktionscluster erfordert eine Genehmigung. Sie genehmigen die Produktionspipeline in der Cloud Deploy-UI und stufen sie hoch.
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
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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als
PROJECT_ID
identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde. - Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.
2. Plattformeinrichtung
Arbeitsbereich wird vorbereitet
Die zum Ausführen dieser Anleitung erforderliche Umgebung wird hier eingerichtet. Wenn dieser Schritt abgeschlossen ist, haben wir einen GKE-Cluster erstellt, in dem wir die Deployments ausführen können.
- Standardeinstellungen für gcloud-Konfigurationen 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 im Bereitstellungsverzeichnis „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 mit dem folgenden Befehl in Cloud Shell eine Datei im Bereitstellungsverzeichnis 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 mit dem folgenden Befehl in Cloud Shell eine Datei im Bereitstellungsverzeichnis „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 für das Tag "requireApproval" der Wert "true" festgelegt ist. Dies ermöglicht keine Hochstufung in das Produktionsziel, bis die Genehmigung erteilt wurde. Sie benötigen die Rolle „roles/clouddeploy.Approver“, um einen Release 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
Beim Erstellen einer neuen Anwendung wird die CICD-Pipeline in der Regel für automatische Builds, Integrationstests und Bereitstellungen eingerichtet. Die folgenden Schritte werden bei der Einrichtung einer neuen App berücksichtigt. Für jede neue Anwendung wird eine Bereitstellungspipeline konfiguriert.
Cloud Deploy-Pipeline definieren
- Erstellen Sie mit dem folgenden Befehl in Cloud Shell eine Datei im Bereitstellungsverzeichnis mit dem Namen „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 mit dem Namen „Stages“. Es handelt sich dabei um eine Liste aller Ziele, für die diese Bereitstellungspipeline gemäß Konfiguration bereitgestellt wird.
targetId
gibt das spezifische Ziel an, das für diese Phase der Bereitstellungspipeline verwendet werden soll. Der Wert ist die Eigenschaft metadata.name aus der Zieldefinition.
profiles
ist eine Liste von 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
Wenn die Anwendungen entwickelt werden, werden automatische 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. Veröffentlichungsphase
Am Ende des CICD-Prozesses, in der Regel, wenn der Code für die Produktion getaggt ist, initiieren Sie den Freigabeprozess, indem Sie den Befehl cloud deploy release
aufrufen. Sobald die Bereitstellung validiert und genehmigt wurde, verschieben Sie den Release durch die verschiedenen Zielumgebungen, indem Sie die Aktion durch automatisierte Prozesse oder manuelle Genehmigungen hochstufen und genehmigen.
Release erstellen
Wir haben in dieser Anleitung zuvor Cloud Deploy-Dateien erstellt, um die Funktionsweise von Cloud Deploy zu verstehen. Für die Demo haben wir dieselben Cloud Deploy-Dateien erstellt und mit einer Go-Beispielanwendung an ein GitHub-Repository übertragen. Für den Release dieser Anwendung verwenden wir Cloud Deploy.
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> auf in der Google Cloud Console
- Klicken Sie auf „sample-app“.
Auf diesem Bildschirm sehen Sie eine grafische Darstellung Ihrer Pipeline.
- Bestätigen Sie, dass links im Vorschaufeld ein grüner Umriss angezeigt wird. Das bedeutet, dass der Release in dieser Umgebung bereitgestellt wurde.
- Sie können zusätzliche Details zum Release prüfen. Klicken Sie dazu im unteren Bildschirmbereich unter „Release-Details“ auf den Release-Namen.
- Prüfen Sie, ob der Release die Anwendung erfolgreich bereitgestellt hat. Führen Sie dazu folgenden Befehl aus: cloushell
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 das Symbol für die Webvorschau.
- Wählen Sie „Vorschau auf Port 8080“ aus
Dadurch wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.
- Verwenden Sie
ctrl+c
im Terminal, um die Portweiterleitung zu beenden.
Release hochstufen
Nachdem der Release für das erste 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 Prozess zu starten.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Release-Promotion prüfen
- Rufen Sie in der Google Cloud Console die Pipeline sample-app auf.
- Bestätigen Sie, dass auf der linken Seite des Canary-Felds ein grüner Umriss angezeigt wird, was bedeutet, dass der Release in dieser Umgebung bereitgestellt wurde.
- Prüfen Sie, ob die Anwendung korrekt bereitgestellt wurde, indem Sie einen Tunnel zur Anwendung 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 das Symbol für die Webvorschau.
- Wählen Sie „Vorschau auf Port 8080“ aus
Dadurch wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.
- Verwenden Sie
ctrl+c
im Terminal, um die Portweiterleitung zu beenden.
Produktionsrelease genehmigen
Wie Sie wissen, haben wir beim Erstellen des prod-Ziels über prod.yaml das TagrequireApproval als true angegeben. Dadurch wird eine Genehmigung für das Angebot in der Produktion erzwungen.
- Stufen Sie den Canary-Release mit dem folgenden Befehl in die Produktion hoch
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Rufen Sie in der Google Cloud Console die Pipeline sample-app auf.
- Die gelbe Anzeige zeigt „1 ausstehend“ an.
Diese Meldung gibt an, dass sich ein Release zur Bereitstellung in der Produktion in der Warteschlange befindet, aber eine Überprüfung und Genehmigung erforderlich ist.
- Klicken Sie auf „Überprüfen“. direkt unter dem gelben Hinweis.
- Klicken Sie im nächsten Bildschirm auf „Überprüfen“. noch einmal, um auf den Genehmigungsbildschirm für die Produktion zuzugreifen
- Sehen Sie sich optional die Manifestdifferenz an, um die Änderungen zu überprüfen. In diesem Fall eine ganz neue Datei.
- Klicken Sie auf die Schaltfläche „Genehmigen“. Schaltfläche
- Kehren Sie zur Pipeline-Seite für die Beispiel-App zurück. Dort sehen Sie, wie der Release für die Produktion läuft.
Produktionsrelease prüfen
Wie in anderen Umgebungen können Sie die Bereitstellung nach Abschluss mithilfe der folgenden Schritte ü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 oben rechts auf das Symbol für die Webvorschau.
- Wählen Sie „Vorschau auf Port 8080“ aus
Dadurch wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.
- Verwenden Sie
ctrl+c
im Terminal, um die Portweiterleitung zu beenden.