Menjalankan hook sebelum dan sesudah men-deploy

Dokumen ini menjelaskan cara menjalankan program atau operasi arbitrer sebelum dan/atau setelah Anda melakukan deployment.

Anda dapat mengonfigurasi Cloud Deploy dan Skaffold untuk menjalankan actions guna melakukan tindakan pra-deployment atau pasca-deployment, atau keduanya. Program-program ini, yang berjalan dengan cara ini, disebut "hooks". Hook pra-deployment dan pasca-deployment berjalan sebagai tugas pra-deployment dan pasca-deployment pada saat peluncuran.

Anda dapat mengonfigurasi setiap hook untuk dijalankan di lingkungan eksekusi Cloud Deploy yang ditentukan, tetapi jika men-deploy ke Google Kubernetes Engine, Anda dapat mengonfigurasinya secara opsional agar berjalan di cluster GKE tempat Anda men-deploy aplikasi.

Deploy hook diasumsikan sebagai idempoten. Jika tindakan tertentu dijalankan lebih dari sekali, tidak ada efek tambahan.

Bagaimana cara kerja hook deploy?

Berikut ini penjelasan mengenai langkah-langkah untuk mengonfigurasi hook deployment, serta proses Skaffold dan Cloud Deploy untuk menjalankan hook tersebut:

  1. Anda mengonfigurasi skaffold.yaml yang digunakan untuk rilis tertentu guna menyertakan customActions yang mengidentifikasi image atau image container yang akan digunakan untuk menjalankan hook, serta perintah atau skrip khusus yang akan dijalankan di setiap container.

  2. Anda mengonfigurasi hook di satu atau beberapa tahap dalam progres pipeline pengiriman, yang masing-masing merujuk ke salah satu customActions yang Anda konfigurasikan di skaffold.yaml.

  3. Sebelum tugas deploy peluncuran berjalan, Skaffold akan menjalankan perintah apa pun yang dikonfigurasi di skaffold.yaml yang dirujuk dalam stanza predeploy dalam progres pipeline.

    Hook predeploy selalu berjalan sebagai tugas pertama dalam fase.

  4. Setelah tugas deploy peluncuran berjalan, Cloud Deploy menjalankan perintah apa pun yang dikonfigurasi di skaffold.yaml yang direferensikan di stanza postdeploy dalam progres pipeline.

Hook deploy dijalankan di lingkungan eksekusi Cloud Deploy default, atau di lingkungan eksekusi alternatif yang ditentukan. Untuk deployment ke GKE dan GKE Enterprise, Anda dapat memilih untuk menjalankan hook pada cluster yang sama tempat aplikasi di-deploy.

Menggunakan hook deploy dengan deployment canary

Saat mengonfigurasi hook deployment untuk deployment canary, ada beberapa hal yang perlu diketahui:

  • Pada tahap pipeline pengiriman, konfigurasi hook (predeploy dan postdeploy) berada di bawah strategy.canary.canaryDeployment atau strategy.canary.customCanaryDeployment.phaseConfigs, bukan di bawah strategy.standard.

  • Untuk canary otomatis, hook predeploy dijalankan sebelum deployment pada fase pertama saja, dan hook postdeploy hanya dijalankan setelah deployment dalam fase terakhir (stabil).

Mengonfigurasi tindakan di Skaffold

Dalam file skaffold.yaml Anda, stanza customActions menggunakan satu atau beberapa customActions stanza, yang dikonfigurasi sebagai berikut:

customActions
- name: ACTION_NAME
  containers:
  - name: CONTAINER_NAME
    image: IMAGE
    command: [COMMANDS_TO_RUN]
    args: [LIST_OF_ARGS]

Dalam stanza customerActions ini:

  • ACTION_NAME

    Nama untuk tindakan ini. Nama ini bisa berupa apa pun yang Anda inginkan, tetapi harus unik dalam skaffold.yaml ini. Ini adalah nama yang akan direferensikan dari tindakan pra-dan pasca-deployment yang ditentukan dalam tahap pipeline pengiriman.

  • CONTAINER_NAME

    Adalah nama untuk penampung tertentu. Nama ini dapat berupa apa pun yang Anda inginkan, tetapi harus unik dalam skaffold.yaml ini.

  • IMAGE

    Merupakan nama image container tempat perintah Anda akan dijalankan.

  • COMMANDS_TO_RUN

    Adalah daftar entrypoint yang akan dijalankan pada container tersebut. "/bin/sh" adalah perintah umum yang ditetapkan di sini, untuk memanggil shell, dan Anda harus menyertakan perintah untuk dijalankan di shell tersebut dalam argumen.

  • LIST_OF_ARGS

    Adalah daftar argumen yang akan diberikan ke perintah. Daftar ini adalah daftar yang dipisahkan koma, dengan setiap argumen dalam tanda kutip. Jika COMMAND_TO_RUN Anda adalah "/bin/sh", maka salah satu argumen di sini adalah "-c", dan argumen lainnya adalah seluruh perintah yang ingin Anda jalankan di shell yang Anda panggil.

    Berikut contohnya:

    command: ["/bin/sh"]
    args: ["-c", `echo "This command ran!"`]
    

Untuk mempelajari tindakan kustom Skaffold lebih lanjut, lihat dokumentasi Skaffold.

Mengonfigurasi pipeline untuk mereferensikan tindakan

Untuk menyelesaikan konfigurasi hook deploy, Anda perlu mengonfigurasi pipeline pengiriman agar mereferensikan tindakan kustom yang Anda tentukan dalam file skaffold.yaml. Tindakan pra-dan pasca-deployment dikonfigurasi dalam satu atau beberapa tahap tertentu pada progres pipeline.

Berikut cara mengonfigurasi hook sebelum dan sesudah deployment dalam tahap pipeline saat menggunakan strategi deployment standard:

serialPipeline:
  stages:
  - targetId: hooks-staging
    profiles: []
    strategy:
      standard:
        predeploy:
          actions: ["PREDEPLOY-ACTION"]
        postdeploy:
          actions: ["POSTDEPLOY-ACTION"]

Dalam yaml ini:

  • PREDEPLOY_ACTION

    Sama dengan ACTION_NAME yang Anda gunakan di skaffold.yaml untuk menentukan tindakan kustom yang ingin Anda jalankan sebelum men-deploy.

  • POSTDEPLOY_ACTION

    Sama dengan ACTION_NAME yang Anda gunakan di skaffold.yaml untuk menentukan tindakan kustom yang ingin Anda jalankan setelah men-deploy.

Anda dapat menentukan lebih dari satu tindakan untuk predeploy dan postdeploy, yang dipisahkan dengan koma. Jika lebih dari satu tindakan ditentukan, tindakan tersebut akan dijalankan secara berurutan, sesuai urutan yang ditentukan. Tugas (pra-deployment atau pasca-deployment) gagal pada tindakan pertama yang gagal, dan tindakan lainnya tidak akan dijalankan.

Secara default, jika Anda menjalankan lebih dari satu penampung, secara paralel, dan tugas gagal, kedua penampung akan dihentikan. Anda dapat mengonfigurasi perilaku ini menggunakan strategi kegagalan tindakan kustom Skaffold.

Menjalankan hook pada cluster aplikasi

Secara default, hook deploy berjalan di lingkungan eksekusi Cloud Deploy. Anda juga dapat mengonfigurasi Skaffold untuk menjalankan tindakan kustom tersebut di cluster yang sama tempat aplikasi Anda berjalan. Saat Anda mengonfigurasi tindakan kustom di skaffold.yaml dan mengaktifkannya pada tahap pipeline, tindakan tersebut akan berjalan secara otomatis 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 hook di lingkungan eksekusi Cloud Deploy.

Untuk menjalankan hook pada cluster, sertakan stanza executionMode.kubernetesCluster dalam file konfigurasi skaffold.yaml, di dalam stanza customActions untuk tindakan kustom tertentu:

customActions
- name: ACTION_NAME
  containers:
  - name: CONTAINER_NAME
    image: IMAGE
    command: [COMMANDS_TO_RUN]
    args: [LIST_OF_ARGS]
  executionMode:
    kubernetesCluster: {}

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

customActions:
- name: predeploy-action
  containers:
  - name: predeploy-echo
    image: ubuntu
    command: ["/bin/sh"]
    args: ["-c", 'echo "this is a predeploy action"' ]
  executionMode:
    kubernetesCluster: {}

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

Variabel lingkungan yang tersedia

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

  • 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. Untuk target kustom, kolom ini tidak akan ditetapkan.

  • CLOUD_DEPLOY_LOCATION

    Region yang berisi resource Cloud Deploy.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    ID pipeline pengiriman.

  • CLOUD_DEPLOY_TARGET

    ID target.

  • CLOUD_DEPLOY_PROJECT

    Project Google Cloud yang berisi resource Cloud Deploy.

  • CLOUD_DEPLOY_RELEASE

    ID rilis tempat hook akan dijalankan.

  • CLOUD_DEPLOY_ROLLOUT

    ID peluncuran yang berisi tugas untuk hook.

  • CLOUD_DEPLOY_JOB_RUN

    ID tugas run yang mewakili eksekusi tugas saat ini.

  • CLOUD_DEPLOY_PHASE

    Fase dalam peluncuran yang berisi tugas untuk hook.

Langkah selanjutnya