Dokumen ini menjelaskan cara menjalankan program atau operasi arbitrer sebelum atau setelah Anda men-deploy.
Anda dapat mengonfigurasi Cloud Deploy dan Skaffold untuk menjalankan tindakan guna melakukan tindakan pra-deployment atau tindakan pasca-deployment, atau keduanya. Program yang dijalankan dengan cara ini disebut "hook". Hook pra-deployment dan pasca-deployment berjalan sebagai tugas pra-deployment dan pasca-deployment pada peluncuran.
Anda dapat mengonfigurasi setiap hook untuk berjalan di lingkungan eksekusi Cloud Deploy yang ditentukan, tetapi jika Anda men-deploy ke Google Kubernetes Engine, Anda dapat secara opsional mengonfigurasinya untuk berjalan di cluster GKE tempat Anda men-deploy aplikasi.
Hook deployment diasumsikan bersifat idempoten. Jika tindakan tertentu dijalankan lebih dari sekali, tidak ada efek tambahan.
Bagaimana cara kerja hook deployment?
Berikut ini dijelaskan langkah-langkah untuk mengonfigurasi hook deployment, serta proses Skaffold dan Cloud Deploy untuk menjalankan hook tersebut:
Anda mengonfigurasi
skaffold.yamlyang digunakan untuk rilis tertentu agar menyertakancustomActionsyang mengidentifikasi image container yang akan digunakan untuk menjalankan hook, dan perintah atau skrip tertentu yang akan dijalankan di setiap container.Anda mengonfigurasi hook di satu atau beberapa tahap dalam progres pipeline pengiriman, yang masing-masing mereferensikan salah satu
customActionsyang Anda konfigurasi diskaffold.yaml.Sebelum tugas deployment peluncuran berjalan, Skaffold menjalankan perintah apa pun yang dikonfigurasi di
skaffold.yamlyang dirujuk dalam stanzapredeploydalam progres pipeline.Hook
predeployselalu berjalan sebagai tugas pertama dalam fase.Setelah tugas deployment peluncuran berjalan, Cloud Deploy menjalankan perintah apa pun yang dikonfigurasi di
skaffold.yamlyang dirujuk dalam stanzapostdeploydalam progres pipeline.
Hook deployment dijalankan di lingkungan eksekusi Cloud Deploy default, atau di lingkungan eksekusi alternatif yang ditentukan. Untuk deployment ke GKE, Anda dapat secara opsional menjalankan hook di cluster yang sama tempat aplikasi di-deploy.
Menggunakan hook deployment dengan deployment canary
Saat mengonfigurasi hook deployment untuk deployment canary, ada beberapa hal yang perlu diketahui:
Pada tahap pipeline pengiriman, konfigurasi hook (
predeploydanpostdeploy) berada di bagianstrategy.canary.canaryDeploymentataustrategy.canary.customCanaryDeployment.phaseConfigs, bukan di bagianstrategy.standard.Untuk canary otomatis, hook
predeployhanya dieksekusi sebelum deployment pada fase pertama, dan hookpostdeployhanya dieksekusi setelah deployment pada fase terakhir (stabil).
Mengonfigurasi tindakan di Skaffold
Dalam file skaffold.yaml, stanza customActions mengambil 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 bait customerActions ini:
ACTION_NAME
Adalah nama untuk tindakan ini. Nama ini dapat berupa apa pun yang Anda inginkan, tetapi harus unik dalam
skaffold.yamlini. Ini adalah nama yang akan dirujuk dari tindakan pra- dan pasca-deployment yang ditentukan dalam tahap pipeline pengiriman.CONTAINER_NAME
Adalah nama untuk penampung tertentu. Anda dapat memberi nama apa pun, tetapi harus unik dalam
skaffold.yamlini.IMAGE
Adalah nama image container tempat perintah Anda akan dieksekusi.
COMMANDS_TO_RUN
Adalah daftar titik entri yang akan dijalankan di penampung tersebut.
"/bin/sh"adalah perintah umum yang dapat ditentukan di sini, untuk memanggil shell, dan Anda akan menyertakan perintah yang akan dijalankan di shell tersebut dalam args.LIST_OF_ARGS
Adalah daftar argumen yang akan diberikan ke perintah. 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 lebih lanjut tindakan kustom Skaffold, lihat dokumentasi Skaffold.
Mengonfigurasi pipeline untuk mereferensikan tindakan
Untuk menyelesaikan konfigurasi hook deployment,
Anda mengonfigurasi pipeline pengiriman untuk mereferensikan tindakan kustom yang Anda tentukan
dalam file skaffold.yaml. Tindakan sebelum dan sesudah deployment dikonfigurasi dalam satu atau beberapa tahap tertentu dalam progresi pipeline.
Berikut cara mengonfigurasi hook pra-dan pasca-deployment di 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.yamluntuk menentukan tindakan kustom yang ingin Anda jalankan sebelum men-deploy.POSTDEPLOY_ACTION
Sama dengan ACTION_NAME yang Anda gunakan di
skaffold.yamluntuk 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 dieksekusi secara berurutan, sesuai urutan penentuannya. Pekerjaan (sebelum atau sesudah deployment) gagal pada tindakan pertama yang gagal, dan tindakan yang tersisa tidak dijalankan.
Secara default, jika Anda menjalankan lebih dari satu container secara paralel, dan tugas gagal, kedua container akan dihentikan. Anda dapat mengonfigurasi perilaku ini menggunakan strategi kegagalan tindakan kustom Skaffold.
Jalankan hook di cluster aplikasi
Secara default, hook deployment 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 di tahap pipeline, tindakan akan berjalan
secara otomatis di cluster target tersebut.
Kemampuan ini hanya tersedia untuk deployment ke GKE, bukan untuk Cloud Run. Deployment ke Cloud Run hanya dapat menjalankan hook di lingkungan eksekusi Cloud Deploy.
Untuk menjalankan hook di 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 container hook di 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 menghapusnya, 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:
ANTHOS_MEMBERSHIPUntuk target jenis
ANTHOS, nama resource yang sepenuhnya ditentukan dari keanggotaan cluster terpasang GKE.CLOUD_RUN_LOCATIONUntuk target jenis
RUN, region tempat layanan Cloud Run di-deploy.CLOUD_RUN_PROJECTUntuk target jenis
RUN, project tempat layanan Cloud Run dibuat.CLOUD_RUN_SERVICEUntuk target jenis
RUN, nama layanan Cloud Run yang di-deploy.CLOUD_RUN_SERVICE_URLSUntuk target jenis
RUN, URL atau URL (daftar yang dipisahkan koma) yang akan digunakan pengguna akhir untuk mengakses layanan Anda. Anda dapat menemukannya di detail layanan Cloud Run untuk layanan Anda, di konsolGoogle Cloud .CLOUD_RUN_REVISIONUntuk target jenis
RUN, revisi spesifik layanan Cloud Run.GKE_CLUSTERUntuk target jenis
GKE, nama resource yang sepenuhnya ditentukan dari cluster Google Kubernetes Engine, misalnyaprojects/p/locations/us-central1/clusters/dev.TARGET_TYPEJenis runtime spesifik target.
GKE,ANTHOS, atauRUN. Untuk target kustom, kolom ini tidak akan ditetapkan.CLOUD_DEPLOY_LOCATIONRegion yang berisi resource Cloud Deploy.
CLOUD_DEPLOY_DELIVERY_PIPELINEID pipeline pengiriman.
CLOUD_DEPLOY_TARGETID target.
CLOUD_DEPLOY_PROJECTGoogle Cloud Nomor project untuk project yang berisi resource Cloud Deploy.
CLOUD_DEPLOY_PROJECT_IDProject ID Google Cloud untuk project.
CLOUD_DEPLOY_RELEASEID rilis tempat hook akan berjalan.
CLOUD_DEPLOY_ROLLOUTID peluncuran yang berisi tugas untuk hook.
CLOUD_DEPLOY_JOB_RUNID operasi tugas yang merepresentasikan eksekusi tugas saat ini.
CLOUD_DEPLOY_PHASEFase dalam peluncuran yang berisi tugas untuk hook.
Men-deploy parameter sebagai variabel lingkungan
Selain variabel lingkungan yang tercantum di bagian ini, Cloud Deploy dapat meneruskan parameter deployment yang telah Anda tetapkan ke container kustom Anda.
Langkah berikutnya
Coba panduan memulai: Menjalankan hook sebelum dan setelah men-deploy.
Pelajari lebih lanjut Skaffold.