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, die Sie für ein beliebiges Ziel bereitgestellt haben, funktionieren wie vorgesehen. Die Überprüfung erfolgt mit Ihrem eigenen Test-Image und Sie konfigurieren Cloud Deploy und Skaffold zum Ausführen dieser Tests nach der Bereitstellung beendet.
Standardmäßig wird die Deployment-Überprüfung in Cloud Deploy ausgeführt Ausführungsumgebung, Sie können aber auch konfigurieren Sie es so, dass es im selben Cluster ausgeführt wird. wo die Anwendung ausgeführt wird.
Wie funktioniert die Bereitstellungsüberprüfung?
Sie konfigurieren Skaffold für die Überprüfung.
In dieser Konfiguration werden das oder die Container-Images für die Ausführung von Tests und die spezifischen Befehle (z. B. ein Script) angegeben, die über dieses Container-Image ausgeführt werden sollen.
Sie konfigurieren ein oder mehrere Ziele in Ihrer Bereitstellungspipeline für die Bereitstellungsüberprüfung.
Mit dieser Konfiguration wird die Überprüfung für Arbeitslasten aktiviert, die auf diesem 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 der Google Kubernetes Engine und GKE Enterprise können Sie den Bestätigungscontainer optional in demselben Cluster ausführen, in dem der Anwendungscontainer ausgeführt wird.
Skaffold ruft die im
verify
-Abschnitt Ihrerskaffold.yaml
angegebenen Tests auf, um sie für die bereitgestellte Anwendung auszuführen.Erfolg oder Misserfolg der ausgeführten Tests weist auf Erfolg oder Misserfolg der Überprüfung hin.
Ob die Überprüfung erfolgreich war, wird durch den Exit-Code des ausgeführten Containers bestimmt.
0
zeigt eine erfolgreiche Ausführung an. Ein Exit-Code ungleich null weist auf einen Fehler hin. Damit das gewünschte Überprüfungsergebnis generiert wird, muss der Container mit dem entsprechenden Exit-Code beendet werden. Wenn im Rahmen der Überprüfung mehr als ein Container ausgeführt wird, müssen alle erfolgreich sein, damit die Überprüfung erfolgen kann.Wenn die Bestätigung fehlschlägt, schlägt auch der Roll-out fehl.
Wenn eine Bereitstellung während der Überprüfung fehlschlägt, können Sie dies sehen, indem Sie die Einführung:
Sie können eine fehlgeschlagene Bestätigung ignorieren oder noch einmal versuchen.
Sie können auch beenden einen laufenden Überprüfungsjob.
Für die Überprüfung verwendete Komponenten
Die rollout-Ressource enthält die folgenden Objekten, die die Deployment-Überprüfung unterstützen:
Phase
Die Sammlung von Vorgängen (Jobs) in einem Roll-out, die logisch gruppiert sind z. B. Bereitstellung oder Bereitstellung und Überprüfung.
Job
Der spezifische Vorgang, der bei einem Roll-out ausgeführt werden soll, z. B. „Bereitstellen“ oder „Prüfen“.
Jobausführung
Die Jobausführung ist eine untergeordnete Ressource der Roll-out-Ressource und eine Instanz eines Jobs, z. B. ein Bereitstellungsversuch.
Weitere Informationen zu Cloud Deploy-Ressourcen finden Sie unter Cloud Deploy-Dienstarchitektur.
Von der Bereitstellungsüberprüfung generierte Benachrichtigungen
Cloud Deploy generiert Pub/Sub-Nachrichten und veröffentlicht sie für folgende Ereignisse:
Jobausführung erstellen, aktualisieren und löschen
Diese Benachrichtigungen werden im Thema
clouddeploy-resources
veröffentlicht und die folgenden Attribute enthalten: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ührung
erstellen, veröffentlicht im Thema clouddeploy-resources
:
{
"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 starten, erfolgreich und fehlgeschlagen
Diese Benachrichtigungen werden im Thema
clouddeploy-operations
veröffentlicht und die folgenden Attribute enthalten: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 einen fehlgeschlagenen Job
ausgeführt, im Thema clouddeploy-operations
veröffentlicht:
{
"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 Bereitstellungsüberprüfung konfigurieren
Wenn Sie die Bereitstellungsüberprüfung für ein Cloud Deploy-Ziel aktivieren möchten, fügen Sie einem bestimmten Ziel oder mehreren Zielen in einer Bereitstellungspipeline eine verify: true
-Property hinzu, wie in diesem 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 Überprüfung der Bereitstellung für das Ziel dev
aktiviert,
aber nicht auf das Ziel prod
. verify: false
entspricht dem Weglassen von
verify
-Property oder die gesamte strategy
-Stanza.
Der Überprüfungsvorgang wird in seiner eigenen Ausführungsumgebung ausgeführt.
Diese Ausführungsumgebung kann für VERIFY
auf die gleiche Weise konfiguriert werden
für RENDER
und DEPLOY
.
Skaffold für die Deployment-Überprüfung konfigurieren
Wenn Sie die Bereitstellungsüberprüfung für ein Ziel aktivieren möchten, ist in der skaffold.yaml
-Konfigurationsdatei für die Bereitstellung ein verify
-Abschnitt erforderlich. Diese Konfiguration
kann für ein bestimmtes Skaffold-Profil gelten, wenn Sie separate Profile pro
Ziel.
Diese verify
-Stanza identifiziert einen Container, der für die Überprüfung ausgeführt werden soll:
z. B. einen Integrationstest.
Das folgende Beispiel zeigt eine skaffold.yaml
-Datei mit einer verify
-Strophe:
apiVersion: skaffold/v4beta7
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
-Strophe, in der ein zu verwendender Container und ein Testscript angegeben werden, das in diesem Container ausgeführt werden soll.
#ENDPOINT_URL
ist in diesem Beispiel nur ein Platzhalter für die URL Ihrer Anwendung und keine verfügbare Cloud Deploy-Umgebungsvariable.
Bestätigungscontainer im Anwendungscluster ausführen
Standardmäßig wird die Deployment-Überprüfung in Cloud Deploy ausgeführt
Ausführungsumgebung aus. Sie können Skaffold auch so konfigurieren, dass der Bestätigungscontainer in demselben Cluster ausgeführt wird, in dem Ihre Anwendung ausgeführt wird. Wenn Sie die clusterinterne Überprüfung in
skaffold.yaml
und aktivieren Sie die Überprüfung für ein Ziel, 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. Bei Bereitstellungen in Cloud Run kann die Überprüfung nur in der Cloud Deploy-Ausführungsumgebung ausgeführt werden.
Clusterinterne Überprüfung erfordert Skaffold-Version 2.3 oder höher.
Fügen Sie zum Ausführen des Überprüfungscontainers im Cluster Folgendes ein:
executionMode.kubernetesCluster
Stanza in Ihrer skaffold.yaml
-Konfiguration
-Datei in der verify
-Stanza für den jeweiligen Bestätigungscontainer an:
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
Im Folgenden finden Sie ein Beispiel für eine Stanza, die executionMode
enthält, um
Rufen Sie den Verifizierungscontainer im Anwendungscluster auf:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
Die executionMode
-Stanza ist optional. Wenn Sie sie weglassen, führt Skaffold den
Überprüfungscontainer in der Cloud Deploy-Ausführungsumgebung
Bestätigung wiederholen
Wenn ein Überprüfungsjob fehlschlägt, können Sie die Überprüfung noch einmal ausführen, indem Sie einen neuen Job 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 noch einmal versuchen, ändert sich der Status des Roll-outs von FAILED
in IN_PROGRESS
.
Sie können die Bestätigung nur für ein Roll-out wiederholen, dessen Prüfjob fehlgeschlagen ist.
Verfügbare Umgebungsvariablen
Cloud Deploy stellt die folgende Umgebung bereit und fügt sie ein
Variablen in der Ausführungsumgebung von VERIFY
die Sie für Ihre Tests verwenden können:
ANTHOS_MEMBERSHIP
Bei Zielen vom Typ
ANTHOS
ist dies der vollständig angegebene Ressourcenname der Anthos-Mitgliedschaft.CLOUD_RUN_LOCATION
Bei Zielen vom Typ
RUN
ist die Region, in der sich der Cloud Run-Dienst befindet. bereitgestellt wird.CLOUD_RUN_PROJECT
Für Ziele vom Typ
RUN
ist das Projekt, in dem Cloud Run Dienst erstellt wurde.CLOUD_RUN_SERVICE
Für Ziele vom Typ
RUN
ist der vollständig angegebene Ressourcenname der bereitgestellten Cloud Run-Dienst, z. B.projects/p/locations/us-central1/services/dev
.CLOUD_RUN_SERVICE_URLS
Für Ziele vom Typ
RUN
die URL oder URLs (durch Kommas getrennte Liste), über die Endnutzer auf Ihren Dienst zugreifen. Diese finden Sie in der Details zum Cloud Run-Dienst für Ihren Dienst im Google Cloud ConsoleCLOUD_RUN_REVISION
Für Ziele vom Typ
RUN
die spezifische Version von Cloud Run Service.GKE_CLUSTER
Bei Zielen vom Typ
GKE
ist dies 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. Entweder
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 von 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 der Version, in der die Überprüfung ausgefü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 der Job.
CLOUD_DEPLOY_PHASE
Die Phase im Roll-out, die den Job zur Überprüfung enthält.
Parameter als Umgebungsvariablen bereitstellen
Zusätzlich zu den in diesem Abschnitt aufgeführten Umgebungsvariablen Cloud Deploy kann beliebige Werte an Ihre benutzerdefinierten Container übergeben Parameter bereitstellen, die Sie festgelegt haben.