In diesem Dokument wird beschrieben, wie Sie eine Cloud Deploy-Bereitstellung prüfen.
Sie können Cloud Deploy und Skaffold konfigurieren, um zu prüfen, ob eine Anwendung, die Sie auf einem beliebigen Ziel bereitgestellt haben, korrekt funktioniert. Die Überprüfung erfolgt mit Ihrem eigenen Test-Image. Sie konfigurieren Cloud Deploy und Skaffold so, dass diese Tests nach Abschluss der Bereitstellung ausgeführt werden.
Die Bereitstellungsprüfung wird standardmäßig in der Ausführungsumgebung von Cloud Deploy ausgeführt. Sie können sie aber auch so konfigurieren, dass sie auf demselben Cluster ausgeführt wird, in dem die Anwendung ausgeführt wird.
Wie funktioniert die Überprüfung der Bereitstellung?
Sie configure Skaffold für die Überprüfung.
Diese Konfiguration identifiziert das oder die Container-Images, die zum Ausführen von Tests verwendet werden sollen, und die spezifischen Befehle (z. B. Skript), die über dieses Container-Image ausgeführt werden sollen.
Sie configure ein oder mehrere Ziele in Ihrer Bereitstellungspipeline für die Überprüfung der Bereitstellung.
Diese Konfiguration ermöglicht die Überprüfung für Arbeitslasten, die für dieses Ziel bereitgestellt werden.
Nachdem ein Roll-out bereitgestellt wurde (
skaffold apply
), führt Cloud Deploy den Befehlskaffold verify
in der Cloud Deploy-Ausführungsumgebung aus.Bei Bereitstellungen in Google Kubernetes Engine und GKE Enterprise können Sie den Überprüfungscontainer optional auf demselben Cluster ausführen, in dem der Anwendungscontainer ausgeführt wird.
Skaffold ruft die in der
verify
-Stanza vonskaffold.yaml
angegebenen Tests auf, um sie für die bereitgestellte Anwendung auszuführen.Erfolg oder Misserfolg der ausgeführten Tests weist darauf hin, ob die Überprüfung erfolgreich war oder nicht.
Die erfolgreiche Bestätigung hängt vom Exit-Code des ausgeführten Containers ab.
0
zeigt an, dass der Vorgang erfolgreich war. Ein Exit-Code ungleich null weist auf einen Fehler hin. Damit das gewünschte Bestätigungsergebnis generiert wird, muss der Container mit dem entsprechenden Exit-Code beendet werden. Wenn im Rahmen der Überprüfung mehrere Container ausgeführt werden, müssen alle erfolgreich sein.Wenn die Überprüfung fehlschlägt, schlägt auch das Roll-out fehl.
Wenn eine Bereitstellung während der Prüfung fehlschlägt, können Sie dies durch Untersuchung des Roll-outs feststellen:
Sie können eine fehlgeschlagene Bestätigung ignore oder noch einmal versuchen.
Sie können einen laufenden Überprüfungsjob auch beenden.
Zur Überprüfung verwendete Komponenten
Die Ressource rollout enthält die folgenden Objekte, die die Überprüfung der Bereitstellung unterstützen:
Phase
Die Sammlung von Vorgängen (Jobs) in einem Roll-out, die logisch gruppiert sind, z. B. eine Bereitstellung oder eine Bereitstellung und Prüfung.
Job
Der spezifische Vorgang, der bei einem Roll-out ausgeführt werden soll, z. B. Bereitstellen oder Überprüfen.
Jobausführung
Die Jobausführung ist der Roll-out-Ressource untergeordnet und eine Instanz eines Jobs, z. B. eines Bereitstellungsversuchs.
Weitere Informationen zu Cloud Deploy-Ressourcen finden Sie unter Cloud Deploy-Dienstarchitektur.
Durch die Überprüfung der Bereitstellung generierte Benachrichtigungen
Cloud Deploy generiert Pub/Sub-Nachrichten und veröffentlicht sie für die folgenden Ereignisse:
Jobausführung erstellen, aktualisieren und löschen
Diese Benachrichtigungen werden im Thema
clouddeploy-resources
veröffentlicht und enthalten die folgenden Attribute:Resource
ResourceType
(JobRun
)Action
(Create
,Update
,Delete
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
Das folgende Beispiel zeigt eine Pub/Sub-Nachricht für eine Jobausführungserstellung, die im Thema clouddeploy-resources
veröffentlicht wird:
{
"ackId": "UAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRAGAE8CKF15MFcrQVh9Dz4NGXJ9YXRiWRIJBkUHeF9cEQ1iXE5EB0nq0KDVV1dKXxYGAExQeVhbHQVoWVh0Bnn7h5nK-8HjYwk9OqKarPdtO4PY2fNHZiI9XhJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FU0Q",
"message": {
"attributes": {
"Action": "Create",
"DeliveryPipelineId": "dv-pipeline",
"JobRunId": "634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
"Location": "us-central1",
"ProjectNumber": "253401481285",
"ReleaseId": "test-release-100",
"Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-100/rollouts/test-release-100-to-dev-0001/jobRuns/634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
"ResourceType": "JobRun",
"RolloutId": "test-release-100-to-dev-0001"
},
"messageId": "5572937706805411",
"publishTime": "2022-09-07T14:00:46.040Z"
}
},
Jobausführung „Start“, „Erfolgreich“ und „Fehlgeschlagen“
Diese Benachrichtigungen werden im Thema
clouddeploy-operations
veröffentlicht und enthalten die folgenden Attribute:Resource
ResourceType
(JobRun
)Action
(Start
,Succeed
,Failure
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
PhaseId
JobId
JobType
(Deploy
oderVerify
)
Das folgende Beispiel zeigt eine Pub/Sub-Nachricht für eine fehlgeschlagene Jobausführung, die im Thema clouddeploy-operations
veröffentlicht wird:
{
"ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUUBAgUBXx9cEFPdVhec2hRDRlyfWB9aVsbCAUXU3cJURsHaE5tdR-6xcvaS0NVb18UAgRFWndfXhMEblhfcy-fkK3HwvT9U0AvOemNgdZpe6jHiulvZiM9XxJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FUw",
"message": {
"attributes": {
"Action": "Failure",
"DeliveryPipelineId": "dv-pipeline",
"JobId": "verify",
"JobRunId": "b389224a-c259-4a00-ab75-c22e48bc3136",
"JobType": "Verify",
"Location": "us-central1",
"PhaseId": "stable",
"ProjectNumber": "253401481285",
"ReleaseId": "test-release-101",
"Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-101/rollouts/test-release-101-to-dev-0001/jobRuns/b389224a-c259-4a00-ab75-c22e48bc3136",
"ResourceType": "JobRun",
"RolloutId": "test-release-101-to-dev-0001",
"TargetId": "dev"
},
"messageId": "5573609905896436",
"publishTime": "2022-09-07T15:35:37.906Z"
}
},
Cloud Deploy für die Überprüfung der Bereitstellung konfigurieren
Wenn Sie die Überprüfung der Bereitstellung für ein Cloud Deploy-Ziel aktivieren, wird einem oder mehreren Zielen ein Attribut verify: true
in einer Bereitstellungspipeline hinzugefügt, wie im folgenden Beispiel gezeigt:
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-demo-app
description: main application pipeline
serialPipeline:
stages:
- targetId: dev
profiles: []
strategy:
standard:
verify: true
- targetId: prod
profiles: []
strategy:
standard:
verify: false
In dieser Konfiguration ist die Prüfung der Bereitstellung für das Ziel dev
aktiviert, aber nicht für das Ziel prod
. verify: false
entspricht dem Weglassen des Attributs verify
oder der gesamten strategy
-Stanza.
Der Überprüfungsvorgang wird in der eigenen Ausführungsumgebung ausgeführt.
Diese Ausführungsumgebung kann für VERIFY
genauso konfiguriert werden wie für RENDER
und DEPLOY
.
Skaffold für die Deployment-Überprüfung konfigurieren
Zum Aktivieren der Deployment-Überprüfung für ein Ziel ist eine verify
-Stanza in der Konfigurationsdatei skaffold.yaml
für Ihr Deployment erforderlich. Diese Konfiguration kann für ein bestimmtes Skaffold-Profil gelten, wenn Sie separate Profile pro Ziel verwenden.
Diese verify
-Stanza identifiziert einen Container, der für die Überprüfung ausgeführt werden soll, z. B. ein Integrationstest.
Das folgende Beispiel zeigt eine skaffold.yaml
mit einer verify
-Stanza:
apiVersion: skaffold/v3alpha1
kind: Config
build:
artifacts:
- image: integration-test
context: integration-test
manifests:
rawYaml:
- kubernetes.yaml
deploy:
kubectl: {}
verify:
- name: verify-integration-test
container:
name: integration-test
image: integration-test
command: ["./test-systems.sh"]
- name: verify-endpoint-test
container:
name: alpine
image: alpine
command: ["/bin/sh"]
args: ["-c", "wget #ENDPOINT_URL"]
Dieses einfache Beispiel zeigt eine verify
-Stanza, die einen zu verwendenden Container und ein Testskript zur Ausführung in diesem Container identifiziert.
#ENDPOINT_URL
ist in diesem Beispiel nur ein Platzhalter für Ihre Anwendungs-URL und keine verfügbare Cloud Deploy-Umgebungsvariable.
Überprüfungscontainer im Anwendungscluster ausführen
Die Bereitstellungsprüfung wird standardmäßig in der Ausführungsumgebung von Cloud Deploy ausgeführt. Sie können Skaffold auch so konfigurieren, dass der Verifizierungscontainer in demselben Cluster ausgeführt wird, auf dem Ihre Anwendung ausgeführt wird. Wenn Sie die Überprüfung im Cluster in skaffold.yaml
konfigurieren und die Überprüfung für ein Ziel aktivieren, wird sie automatisch im Cluster dieses Ziels ausgeführt.
Diese Funktion ist nur für Bereitstellungen in GKE und GKE Enterprise verfügbar, nicht für Cloud Run. Bereitstellungen in Cloud Run können nur in der Cloud Deploy-Ausführungsumgebung geprüft werden.
Für die Überprüfung im Cluster ist Skaffold-Version 2.3 oder höher erforderlich.
Wenn Sie den Überprüfungscontainer im Cluster ausführen möchten, fügen Sie in die Konfigurationsdatei skaffold.yaml
in der verify
-Stanza für den jeweiligen Überprüfungscontainer eine executionMode.kubernetesCluster
-Stanza ein:
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
Das folgende Beispiel zeigt eine Verifizierungs-Stanza, die executionMode
enthält, um den Verifizierungscontainer im Anwendungscluster aufzurufen:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
Die Stanza executionMode
ist optional. Wenn Sie sie weglassen, führt Skaffold den Überprüfungscontainer in der Cloud Deploy-Ausführungsumgebung aus.
Bestätigung wiederholen
Wenn ein Überprüfungsjob fehlschlägt, können Sie die Überprüfung wiederholen und eine neue Jobausführung erstellen:
gcloud deploy rollouts retry-job ROLLOUT_NAME \
--job-id=JOB_ID \
--phase-id=PHASE_ID \
--delivery-pipeline=PIPELINE_NAME \
--release=RELEASE_NAME \
--region=REGION
Wenn Sie die Überprüfung wiederholen, ändert sich der Status des Roll-outs von FAILED
in IN_PROGRESS
.
Sie können eine Überprüfung nur für ein Roll-out wiederholen, bei dem der Überprüfungsjob fehlgeschlagen ist.
Verfügbare Umgebungsvariablen
Cloud Deploy stellt die folgenden Umgebungsvariablen in der Ausführungsumgebung VERIFY
bereit, die Sie für Ihre Tests verwenden können:
ANTHOS_MEMBERSHIP
Für Ziele vom Typ
ANTHOS
der vollständig angegebene Ressourcenname der Anthos-Mitgliedschaft.CLOUD_RUN_LOCATION
Für Ziele vom Typ
RUN
die Region, in der der Cloud Run-Dienst bereitgestellt wird.CLOUD_RUN_PROJECT
Für Ziele vom Typ
RUN
das Projekt, in dem der Cloud Run-Dienst erstellt wurde.CLOUD_RUN_SERVICE
Für Ziele vom Typ
RUN
der Name des bereitgestellten Cloud Run-Dienstes.CLOUD_RUN_SERVICE_URLS
Für Ziele vom Typ
RUN
die URL oder URLs (durch Kommas getrennte Liste), die Endnutzer verwenden, um auf Ihren Dienst zuzugreifen. Sie finden diese in den Cloud Run-Dienstdetails Ihres Dienstes in der Google Cloud Console.CLOUD_RUN_REVISION
Für Ziele vom Typ
RUN
die spezifische Version des Cloud Run-Dienstes.GKE_CLUSTER
Für Ziele vom Typ
GKE
der vollständig angegebene Ressourcenname des Google Kubernetes Engine-Clusters, z. B.projects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
Der spezifische Laufzeittyp des Ziels.
GKE
,ANTHOS
oderRUN
.CLOUD_DEPLOY_LOCATION
Die Region, in der die Ausführungsumgebung ausgeführt wird.
CLOUD_DEPLOY_DELIVERY_PIPELINE
Die ID-Bereitstellungspipeline, die in der Ausführungsumgebung ausgeführt wird.
CLOUD_DEPLOY_TARGET
Die ID des Ziels, das in der Ausführungsumgebung ausgeführt wird.
CLOUD_DEPLOY_PROJECT
Die Projektnummer des Google Cloud-Projekts, in dem die Ausführungsumgebung ausgeführt wird.
CLOUD_DEPLOY_RELEASE
Die ID des Release, in dem die Überprüfung durchgeführt wird.
CLOUD_DEPLOY_ROLLOUT
Die ID des Roll-outs, das die zu überprüfenden Jobs enthält.
CLOUD_DEPLOY_JOB_RUN
Die ID der Jobausführung, die der aktuellen Ausführung des Jobs entspricht.
CLOUD_DEPLOY_PHASE
Die Phase im Roll-out, die den zu überprüfenden Job enthält.