1. Tujuan
Dalam tutorial ini, Anda akan membuat tiga cluster GKE bernama Preview, canary, dan prod. Kemudian, buat target Cloud Deploy yang sesuai dengan setiap cluster dan pipeline Cloud Deploy yang akan menentukan urutan langkah untuk melakukan deployment pada target tersebut.
Alur deployment akan dipicu oleh pipeline cloudbuild yang akan membuat rilis Cloud Deploy dan melakukan deployment di cluster pratinjau. Setelah memastikan 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 harus menyetujui pipeline produksi di UI Cloud Deploy, dan pada akhirnya mempromosikannya.
Tujuan tutorial ini dapat dibagi menjadi langkah-langkah berikut:
- Menyiapkan ruang kerja Anda
- 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 Anda
Kita akan menyiapkan lingkungan di sini sesuai kebutuhan untuk menjalankan tutorial ini. Setelah langkah ini selesai, kita akan membuat cluster GKE tempat deployment dapat dijalankan.
- Menetapkan default konfigurasi gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Meng-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 deploy 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 deploy 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 requiredApproval yang ditetapkan ke true. Hal ini tidak akan mengizinkan promosi ke target produk hingga persetujuan diberikan. Anda memerlukan peran Role/clouddeploy.agreementr untuk menyetujui rilis.
- Membuat Target Deploy
`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 telah dikonfigurasi.
Menentukan pipeline Cloud Deploy
- Buat file di direktori deploy 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 stage yang merupakan daftar semua target tempat pipeline pengiriman ini dikonfigurasi untuk di-deploy.
targetId
mengidentifikasi target spesifik yang akan digunakan untuk tahap pipeline penayangan ini. Nilainya adalah properti metadata.name dari definisi target.
profiles
adalah daftar nol atau beberapa nama profil Skaffold, dari skaffold.yaml. Cloud Deploy menggunakan profil dengan render skaffold saat membuat rilis.
- Menerapkan Pipeline
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Fase Pengembangan
Saat aplikasi dikembangkan, toolchain CICD otomatis akan membangun dan menyimpan aset. Perintah berikut dijalankan untuk membangun aplikasi menggunakan skaffold dan menyimpan aset untuk deployment dengan Cloud Deploy. Langkah ini akan dilakukan oleh proses CICD Anda untuk setiap build aplikasi.
- Membangun 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
. Setelah deployment divalidasi dan disetujui, Anda akan memindahkan rilis ke 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 agar dapat memahami cara kerja Cloud Deploy. Untuk tujuan demo, kami telah membuat file Cloud Deploy yang sama dan memasukkannya ke repositori github dengan contoh aplikasi go dan kami akan menggunakan Cloud Deploy untuk merilis 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}"
Tinjau rilis
Saat dibuat, rilis Cloud Deploy akan otomatis diluncurkan di target pertama yang sedang dipratinjau.
- Buka <Cloud Deploy> di konsol Google Cloud
- Klik "sample-app"
Di layar ini, Anda akan melihat representasi grafis pipeline Anda.
- Pastikan garis batas hijau di sisi kiri kotak pratinjau menunjukkan bahwa rilis telah di-deploy ke lingkungan tersebut.
- Jika perlu, tinjau detail tambahan tentang rilis dengan mengklik nama rilis di bagian Detail Rilis di bagian bawah layar.
- Pastikan rilis berhasil men-deploy aplikasi, jalankan perintah berikut secara tertutup
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 Preview pada port 8080
Tindakan ini akan membawa Anda ke halaman baru yang menampilkan pesan "Hello World!" (Halo Dunia)
- 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 proses.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Meninjau promosi rilis
- Buka pipeline sample-app di Konsol Google Cloud
- Konfirmasi garis batas hijau di sisi kiri kotak Canary yang berarti bahwa rilis telah di-deploy ke lingkungan tersebut.
- Memverifikasi bahwa aplikasi telah 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 Preview pada port 8080
Tindakan ini akan membawa Anda ke halaman baru yang menampilkan pesan "Hello World!" (Halo Dunia)
- Gunakan
ctrl+c
di terminal untuk mengakhiri penerusan port.
Menyetujui rilis produksi
Ingat, saat membuat target prod melalui prod.yaml, kami menentukan bahwa tag requireApproval sebagai true. Hal ini akan memaksa persyaratan persetujuan untuk promosi di produksi.
- Promosikan rilis terbatas ke produksi dengan perintah berikut
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Buka pipeline sample-app di Konsol Google Cloud
- Perhatikan indikator kuning yang menunjukkan "1 tertunda".
Pesan ini menunjukkan ada rilis yang diantrekan untuk di-deploy ke produksi, tetapi memerlukan peninjauan dan persetujuan.
- Klik "Tinjau" tepat di bawah pemberitahuan berwarna kuning.
- Pada layar berikutnya, klik "Tinjau" lagi untuk mengakses layar persetujuan untuk produksi
- Jika perlu, tinjau Perbedaan Manifes untuk meninjau perubahan. Dalam hal ini adalah file yang sama sekali baru.
- Klik "Setujui" tombol
- 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 saat 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 Preview pada port 8080
Tindakan ini akan membawa Anda ke halaman baru yang menampilkan pesan "Hello World!" (Halo Dunia)
- Gunakan
ctrl+c
di terminal untuk mengakhiri penerusan port.