Mit Cloud Deploy freigeben

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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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.

  1. Standardeinstellungen für gcloud-Konfigurationen festlegen

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. 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

  1. Umgebungsvariablen festlegen

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. APIs aktivieren

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. 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

  1. 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.
  1. 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

  1. 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.

  1. 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

  1. 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.

  1. 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.

  1. 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.

  1. Rufen Sie <Cloud Deploy> auf in der Google Cloud Console
  2. Klicken Sie auf „sample-app“.

Auf diesem Bildschirm sehen Sie eine grafische Darstellung Ihrer Pipeline.

  1. Bestätigen Sie, dass links im Vorschaufeld ein grüner Umriss angezeigt wird. Das bedeutet, dass der Release in dieser Umgebung bereitgestellt wurde.
  2. Sie können zusätzliche Details zum Release prüfen. Klicken Sie dazu im unteren Bildschirmbereich unter „Release-Details“ auf den Release-Namen.
  3. 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

  1. Klicken Sie oben rechts auf das Symbol für die Webvorschau.
  2. Wählen Sie „Vorschau auf Port 8080“ aus

Dadurch wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.

  1. 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

  1. Rufen Sie in der Google Cloud Console die Pipeline sample-app auf.
  2. 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.
  3. 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

  1. Klicken Sie oben rechts auf das Symbol für die Webvorschau.
  2. Wählen Sie „Vorschau auf Port 8080“ aus

Dadurch wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.

  1. 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.

  1. 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

  1. Rufen Sie in der Google Cloud Console die Pipeline sample-app auf.
  2. 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.

  1. Klicken Sie auf „Überprüfen“. direkt unter dem gelben Hinweis.
  2. Klicken Sie im nächsten Bildschirm auf „Überprüfen“. noch einmal, um auf den Genehmigungsbildschirm für die Produktion zuzugreifen
  3. Sehen Sie sich optional die Manifestdifferenz an, um die Änderungen zu überprüfen. In diesem Fall eine ganz neue Datei.
  4. Klicken Sie auf die Schaltfläche „Genehmigen“. Schaltfläche
  5. 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.

  1. 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

  1. Klicken Sie oben rechts auf das Symbol für die Webvorschau.
  2. Wählen Sie „Vorschau auf Port 8080“ aus

Dadurch wird eine neue Seite mit der Meldung „Hello World!“ angezeigt.

  1. Verwenden Sie ctrl+c im Terminal, um die Portweiterleitung zu beenden.