1. Tujuan
Dalam tutorial ini, Anda akan membuat tiga cluster GKE bernama pratinjau, canary, dan produksi. Kemudian, buat target Cloud Deploy yang sesuai dengan setiap cluster dan pipeline Cloud Deploy yang akan menentukan urutan langkah untuk melakukan deployment di target tersebut.
Alur deployment akan dipicu oleh pipeline cloudbuild yang akan membuat rilis Cloud Deploy dan melakukan deployment di cluster pratinjau. Setelah memverifikasi bahwa deployment dalam pratinjau berhasil dan berfungsi seperti yang diharapkan, Anda akan mempromosikan rilis secara manual di cluster canary. Promosi rilis di cluster produksi akan memerlukan persetujuan. Anda akan menyetujui pipeline produksi di UI Cloud Deploy dan akhirnya mempromosikannya.
Tujuan tutorial ini dapat dibagi menjadi langkah-langkah berikut:
- Menyiapkan ruang kerja
- Menentukan target Cloud Deploy
- Menentukan pipeline Cloud Deploy
- Membuat Rilis
- Mempromosikan deployment
- Menyetujui rilis produksi
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
- Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai
PROJECT_ID
). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat. - Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
2. Penyiapan Platform
Menyiapkan ruang kerja
Kita akan menyiapkan lingkungan yang diperlukan untuk menjalankan tutorial ini. Setelah langkah ini selesai, kita akan memiliki cluster GKE yang dibuat tempat kita dapat menjalankan deployment.
- Menetapkan setelan default konfigurasi gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Clone Repo
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Menetapkan variabel lingkungan
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- Aktifkan API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- Membuat cluster GKE
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
Menentukan Target Cloud Deploy
- Buat file di direktori deployment bernama preview.yaml dengan perintah berikut di cloudshell:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- Buat file di direktori deployment bernama canary.yaml dengan perintah berikut di cloudshell:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- Buat file di direktori deploy bernama prod.yaml dengan perintah berikut di cloudshell:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
Perhatikan tag requireApproval yang disetel ke true. Hal ini tidak akan mengizinkan promosi ke target produksi hingga persetujuan diberikan. Anda memerlukan peran roles/clouddeploy.approver untuk menyetujui rilis.
- Membuat Target Deployment
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3. Pembuatan Aplikasi
Sebagai bagian dari pembuatan aplikasi baru, pipeline CICD biasanya disiapkan untuk melakukan build otomatis, pengujian integrasi, dan deployment. Langkah-langkah berikut dianggap sebagai bagian dari proses penyiapan untuk aplikasi baru. Setiap aplikasi baru akan memiliki pipeline deployment yang dikonfigurasi.
Menentukan pipeline Cloud Deploy
- Buat file di direktori deployment bernama pipeline.yaml dengan perintah berikut di cloudshell:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
Tag serialPipeline
berisi tag bernama stages yang merupakan daftar semua target tempat pipeline pengiriman ini dikonfigurasi untuk di-deploy.
targetId
mengidentifikasi target spesifik yang akan digunakan untuk tahap pipeline pengiriman ini. Nilainya adalah properti metadata.name dari definisi target.
profiles
adalah daftar nama profil Skaffold nol atau lebih, dari skaffold.yaml. Cloud Deploy menggunakan profil dengan rendering skaffold saat membuat rilis.
- Terapkan Pipeline
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Fase Pengembangan
Saat aplikasi dikembangkan, toolchain CICD otomatis akan mem-build dan menyimpan aset. Perintah berikut dijalankan untuk mem-build aplikasi menggunakan skaffold dan menyimpan aset untuk deployment dengan Cloud Deploy. Langkah ini akan dilakukan oleh proses CICD Anda untuk setiap build aplikasi.
- Mem-build dan menyimpan aplikasi dengan skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. Fase Rilis
Di akhir proses CICD, biasanya saat kode diberi Tag untuk produksi, Anda akan memulai proses rilis dengan memanggil perintah cloud deploy release
. Kemudian, setelah deployment divalidasi dan disetujui, Anda akan memindahkan rilis melalui berbagai lingkungan target dengan mempromosikan dan menyetujui tindakan melalui proses otomatis atau persetujuan manual.
Membuat rilis
Kita telah membuat file Cloud Deploy di tutorial ini sebelumnya untuk mendapatkan pemahaman tentang cara kerja Cloud Deploy. Untuk tujuan demo, kami telah membuat file Cloud Deploy yang sama dan mendorongnya ke repo github dengan aplikasi go contoh dan kami akan menggunakan Cloud Deploy untuk melakukan rilis aplikasi tersebut.
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
Meninjau rilis
Saat rilis Cloud Deploy dibuat, rilis tersebut akan otomatis diluncurkan di target pertama yang merupakan pratinjau.
- Buka <Cloud Deploy> di konsol Google Cloud
- Klik "sample-app"
Di layar ini, Anda akan melihat representasi grafis pipeline.
- Konfirmasi garis batas hijau di sisi kiri kotak pratinjau yang berarti rilis telah di-deploy ke lingkungan tersebut.
- Tinjau detail tambahan tentang rilis secara opsional dengan mengklik nama rilis di bagian Detail Rilis di bagian bawah layar
- Pastikan rilis berhasil men-deploy aplikasi, jalankan perintah berikut di cloudshell
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Klik ikon pratinjau web di kanan atas layar.
- Pilih Pratinjau di port 8080
Tindakan ini akan mengarahkan Anda ke halaman baru yang menampilkan pesan "Hello World!"
- Gunakan
ctrl+c
di terminal untuk mengakhiri penerusan port.
Mempromosikan rilis
Setelah rilis di-deploy ke target pertama (pratinjau) dalam pipeline, Anda dapat mempromosikannya ke target berikutnya (canary). Jalankan perintah berikut untuk memulai prosesnya.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Meninjau promosi rilis
- Buka pipeline aplikasi contoh di konsol Google Cloud
- Pastikan ada garis batas hijau di sisi kiri kotak Canary yang berarti rilis telah di-deploy ke lingkungan tersebut.
- Verifikasi bahwa aplikasi di-deploy dengan benar dengan membuat tunnel ke aplikasi tersebut
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Klik ikon pratinjau web di kanan atas layar.
- Pilih Pratinjau di port 8080
Tindakan ini akan mengarahkan Anda ke halaman baru yang menampilkan pesan "Hello World!"
- Gunakan
ctrl+c
di terminal untuk mengakhiri penerusan port.
Menyetujui rilis produksi
Ingat saat membuat target produksi melalui prod.yaml, kita menentukan tag requireApproval sebagai true. Tindakan ini akan memaksa persyaratan persetujuan untuk promosi dalam produksi.
- Promosikan rilis canary ke produksi dengan perintah berikut
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Buka pipeline aplikasi contoh di konsol Google Cloud
- Perhatikan indikator kuning yang mencantumkan "1 tertunda".
Pesan ini menunjukkan bahwa ada rilis yang diantrekan untuk di-deploy ke produksi, tetapi memerlukan peninjauan dan persetujuan.
- Klik tombol "Tinjau" tepat di bawah pemberitahuan kuning.
- Di layar berikutnya, klik "Tinjau" lagi untuk mengakses layar persetujuan produksi
- Jika ingin, tinjau Perbedaan Manifes untuk meninjau perubahan. Dalam hal ini, file baru.
- Klik tombol "Setujui"
- Kembali ke halaman pipeline aplikasi contoh tempat Anda akan melihat rilis ke produksi yang sedang berlangsung.
Meninjau rilis produksi
Seperti lingkungan lainnya, Anda dapat meninjau deployment setelah selesai menggunakan langkah-langkah di bawah.
- Jalankan perintah berikut di cloudshell untuk membuat port-forward
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Klik ikon pratinjau web di kanan atas layar.
- Pilih Pratinjau di port 8080
Tindakan ini akan mengarahkan Anda ke halaman baru yang menampilkan pesan "Hello World!"
- Gunakan
ctrl+c
di terminal untuk mengakhiri penerusan port.