Memverifikasi deployment Anda

Dokumen ini menjelaskan cara memverifikasi deployment Cloud Deploy.

Anda dapat mengonfigurasi Cloud Deploy dan Skaffold untuk memverifikasi bahwa aplikasi yang telah Anda deploy ke target mana pun berfungsi dengan benar. Verifikasi dilakukan menggunakan image pengujian Anda sendiri, lalu Anda mengonfigurasi Cloud Deploy dan Skaffold untuk menjalankan pengujian tersebut setelah deployment selesai.

Secara default, verifikasi deployment berjalan di lingkungan eksekusi Cloud Deploy, tetapi Anda juga dapat mengonfigurasinya untuk berjalan di cluster yang sama tempat aplikasi berjalan.

Bagaimana cara kerja verifikasi deployment?

  1. Anda dapat configure Skaffold untuk verifikasi.

    Konfigurasi ini mengidentifikasi image atau image container yang akan digunakan untuk menjalankan pengujian, dan perintah khusus (misalnya skrip) yang akan dijalankan dari image container tersebut.

  2. Anda dapat configure satu atau beberapa target di pipeline pengiriman untuk verifikasi deployment.

    Konfigurasi ini mengaktifkan verifikasi untuk workload yang di-deploy ke target tersebut.

  3. Setelah peluncuran di-deploy (skaffold apply), Cloud Deploy menjalankan perintah skaffold verify di lingkungan eksekusi Cloud Deploy.

    Untuk deployment ke Google Kubernetes Engine dan GKE Enterprise, Anda dapat memilih untuk menjalankan container verifikasi di cluster yang sama tempat container aplikasi dijalankan.

  4. Skaffold memanggil pengujian atau pengujian yang ditentukan dalam stanza verify dari skaffold.yaml Anda untuk dijalankan terhadap aplikasi yang di-deploy.

  5. Keberhasilan atau kegagalan pengujian yang dijalankan menunjukkan keberhasilan atau kegagalan verifikasi.

    • Keberhasilan verifikasi ditentukan oleh kode keluar penampung yang dieksekusi.

      0 menunjukkan keberhasilan. Kode keluar bukan nol menunjukkan kegagalan. Untuk membuat hasil verifikasi yang diinginkan, pastikan container keluar dengan kode keluar yang sesuai. Jika lebih dari satu penampung dijalankan sebagai bagian dari verifikasi, semuanya harus berhasil agar verifikasi berhasil.

    • Jika verifikasi gagal, peluncuran juga akan gagal.

    • Jika deployment gagal selama verifikasi, Anda dapat melihatnya dengan memeriksa peluncuran tersebut:

      Detail di konsol Google Cloud untuk peluncuran, termasuk status verifikasi

  6. Anda dapat ignore atau mencoba lagi verifikasi yang gagal.

    Anda juga dapat menghentikan tugas verifikasi yang sedang berlangsung.

Komponen yang digunakan untuk verifikasi

Resource rollout mencakup objek berikut, yang mendukung verifikasi deployment:

  • Fase

    Kumpulan operasi (tugas) dalam peluncuran yang dikelompokkan secara logis bersama, misalnya deployment atau deploy dan verifikasi.

  • Tugas

    Operasi tertentu yang akan dijalankan pada peluncuran, seperti men-deploy atau memverifikasi.

  • Tugas yang dijalankan

    Turunan resource peluncuran, tugas yang dijalankan adalah instance tugas, misalnya upaya untuk men-deploy.

Untuk mengetahui informasi selengkapnya tentang resource Cloud Deploy, lihat arsitektur layanan Cloud Deploy

Notifikasi yang dibuat oleh verifikasi deployment

Cloud Deploy menghasilkan pesan Pub/Sub dan memublikasikannya untuk peristiwa berikut:

  • Membuat, memperbarui, dan menghapus tugas

    Notifikasi ini dipublikasikan ke topik clouddeploy-resources, dan berisi atribut berikut:

    • Resource
    • ResourceType (JobRun)
    • Action (Create, Update, Delete)
    • ProjectNumber
    • Location
    • TargetId
    • DeliveryPipelineId
    • ReleaseId
    • RolloutId
    • JobRunId

Berikut adalah contoh pesan Pub/Sub untuk pembuatan tugas yang dipublikasikan, yang dipublikasikan ke topik 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"
    }
  },
  • Operasi tugas dimulai, berhasil, dan gagal

    Notifikasi ini dipublikasikan ke topik clouddeploy-operations, dan berisi atribut berikut:

    • Resource
    • ResourceType (JobRun)
    • Action (Start, Succeed, Failure)
    • ProjectNumber
    • Location
    • TargetId
    • DeliveryPipelineId
    • ReleaseId
    • RolloutId
    • JobRunId
    • PhaseId
    • JobId
    • JobType (Deploy atau Verify)

Berikut adalah contoh pesan Pub/Sub untuk tugas yang gagal dijalankan, yang dipublikasikan ke topik clouddeploy-operations:

{
    "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"
    }
  },

Mengonfigurasi Cloud Deploy untuk verifikasi deployment

Mengaktifkan verifikasi deployment untuk target Cloud Deploy terdiri dari penambahan properti verify: true ke target (atau beberapa target) tertentu dalam progres pipeline pengiriman, seperti yang ditunjukkan dalam contoh ini:

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

Dalam konfigurasi ini, verifikasi deployment diaktifkan pada target dev, tetapi tidak pada target prod. verify: false sama dengan menghapus properti verify atau seluruh stanza strategy.

Operasi verifikasi dijalankan dalam lingkungan eksekusi-nya sendiri. Lingkungan eksekusi ini dapat dikonfigurasi untuk VERIFY, sama seperti yang dapat dikonfigurasi untuk RENDER dan DEPLOY.

Mengonfigurasi Skaffold untuk verifikasi deployment

Mengaktifkan verifikasi deployment untuk target memerlukan stanza verify dalam file konfigurasi skaffold.yaml untuk deployment Anda. Konfigurasi ini dapat digunakan untuk profil Skaffold tertentu, jika Anda menggunakan profil terpisah per target.

Stanza verify ini mengidentifikasi penampung yang akan dijalankan untuk melakukan verifikasi, misalnya, pengujian integrasi.

Berikut adalah contoh skaffold.yaml yang menyertakan stanza verify:

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"]

Contoh sederhana ini menunjukkan stanza verify yang mengidentifikasi penampung yang akan digunakan dan skrip pengujian untuk dijalankan di penampung tersebut. #ENDPOINT_URL dalam contoh ini hanyalah placeholder untuk URL aplikasi Anda, dan bukan variabel lingkungan Cloud Deploy yang tersedia.

Menjalankan container verifikasi di cluster aplikasi

Secara default, verifikasi deployment berjalan di lingkungan eksekusi Cloud Deploy. Anda juga dapat mengonfigurasi Skaffold untuk menjalankan container verifikasi di cluster yang sama tempat aplikasi Anda berjalan. Jika Anda mengonfigurasi verifikasi dalam cluster di skaffold.yaml dan mengaktifkan verifikasi pada target, verifikasi akan otomatis berjalan di cluster target tersebut.

Kemampuan ini tersedia untuk deployment ke GKE dan GKE Enterprise saja, bukan untuk Cloud Run. Deployment ke Cloud Run hanya dapat menjalankan verifikasi di lingkungan eksekusi Cloud Deploy.

Verifikasi dalam cluster memerlukan Skaffold versi 2.3 atau yang lebih baru.

Untuk menjalankan penampung verifikasi di cluster, sertakan stanza executionMode.kubernetesCluster dalam file konfigurasi skaffold.yaml Anda, di dalam stanza verify untuk penampung verifikasi tertentu:

verify:
- name:
  container:
    name:
    image:
    command:
    args:
  executionMode:
    kubernetesCluster:

Berikut adalah contoh stanza verifikasi yang menyertakan executionMode untuk memanggil penampung verifikasi pada cluster aplikasi:

verify:
- name: integration-test-container
  container:
    name: integration-test-container
    image: integration-test-container
  executionMode:
    kubernetesCluster: {}

Stanza executionMode bersifat opsional, dan jika Anda menghilangkannya, Skaffold akan menjalankan container verifikasi di lingkungan eksekusi Cloud Deploy.

Coba verifikasi lagi

Jika tugas verifikasi gagal, Anda dapat mencoba kembali verifikasi tersebut, dan membuat tugas baru yang dijalankan:

gcloud deploy rollouts retry-job ROLLOUT_NAME \
             --job-id=JOB_ID \
             --phase-id=PHASE_ID \
             --delivery-pipeline=PIPELINE_NAME \
             --release=RELEASE_NAME \
             --region=REGION

Mencoba lagi verifikasi akan mengubah status peluncuran dari FAILED menjadi IN_PROGRESS.

Anda hanya dapat mencoba kembali verifikasi untuk peluncuran yang tugas verifikasinya gagal.

Variabel lingkungan yang tersedia

Cloud Deploy menyediakan dan mengisi variabel lingkungan berikut di lingkungan eksekusi VERIFY, yang dapat Anda gunakan untuk pengujian:

  • ANTHOS_MEMBERSHIP

    Untuk target jenis ANTHOS, nama resource yang ditentukan sepenuhnya dari keanggotaan Anthos.

  • CLOUD_RUN_LOCATION

    Untuk target jenis RUN, region tempat layanan Cloud Run di-deploy.

  • CLOUD_RUN_PROJECT

    Untuk target jenis RUN, project tempat layanan Cloud Run dibuat.

  • CLOUD_RUN_SERVICE

    Untuk target jenis RUN, nama layanan Cloud Run yang di-deploy.

  • CLOUD_RUN_SERVICE_URLS

    Untuk target jenis RUN, URL atau URL (daftar yang dipisahkan koma) yang akan digunakan pengguna akhir untuk mengakses layanan Anda. Anda dapat menemukannya dalam detail layanan Cloud Run untuk layanan Anda, di Konsol Google Cloud.

  • CLOUD_RUN_REVISION

    Untuk target jenis RUN, revisi khusus dari layanan Cloud Run.

  • GKE_CLUSTER

    Untuk target jenis GKE, nama resource yang ditentukan sepenuhnya dari cluster Google Kubernetes Engine, misalnya projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    Jenis runtime spesifik target. Berupa GKE, ANTHOS, atau RUN.

  • CLOUD_DEPLOY_LOCATION

    Region tempat lingkungan eksekusi berjalan.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    Pipeline pengiriman ID yang berjalan di lingkungan eksekusi.

  • CLOUD_DEPLOY_TARGET

    ID target lingkungan eksekusi yang berjalan.

  • CLOUD_DEPLOY_PROJECT

    Nomor project project Google Cloud tempat lingkungan eksekusi berjalan.

  • CLOUD_DEPLOY_RELEASE

    ID rilis tempat verifikasi akan dijalankan.

  • CLOUD_DEPLOY_ROLLOUT

    ID peluncuran yang berisi tugas untuk diverifikasi.

  • CLOUD_DEPLOY_JOB_RUN

    ID tugas run yang mewakili eksekusi tugas saat ini.

  • CLOUD_DEPLOY_PHASE

    Fase dalam peluncuran yang berisi tugas untuk diverifikasi.