Dokumen ini menunjukkan cara mengimplementasikan pipeline deployment untuk Cloud Run yang menerapkan progres kode dari cabang developer ke produksi dengan pengujian canary otomatis dan pengelolaan traffic berbasis persentase. Dokumen ini ditujukan bagi administrator platform yang bertanggung jawab untuk membuat dan mengelola pipeline CI/CD. Dokumen ini mengasumsikan bahwa Anda memiliki pemahaman dasar tentang konsep Git, Cloud Run, dan pipeline CI/CD.
Dengan Cloud Run, Anda dapat men-deploy dan menjalankan aplikasi dengan sedikit biaya tambahan atau upaya. Banyak organisasi menggunakan pipeline rilis yang kuat untuk memindahkan kode ke dalam produksi. Cloud Run menyediakan kemampuan pengelolaan traffic unik yang memungkinkan Anda menerapkan teknik pengelolaan rilis lanjutan dengan sedikit upaya.
Tujuan
- Membuat layanan Cloud Run
- Mengaktifkan cabang developer
- Mengimplementasikan pengujian canary
- Meluncurkan produk ke produksi dengan aman
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Mempersiapkan lingkungan Anda
Di Cloud Shell, buat variabel lingkungan untuk digunakan dalam tutorial ini:
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Mengaktifkan API berikut:
- Resource Manager
- GKE
- Cloud Build
- Container Registry
- Cloud Run
gcloud services enable \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ secretmanager.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ run.googleapis.com
Memberikan peran Cloud Run Admin (
roles/run.admin
) ke akun layanan Cloud Buildgcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:[email protected] \ --role=roles/run.admin
Memberikan peran Pengguna Akun Layanan IAM (
roles/iam.serviceAccountUser
) ke akun layanan Cloud Build untuk akun layanan runtime Cloud Rungcloud iam service-accounts add-iam-policy-binding \ [email protected] \ --member=serviceAccount:[email protected] \ --role=roles/iam.serviceAccountUser
Menetapkan nilai Git
Jika sebelumnya Anda belum pernah menggunakan Git di Cloud Shell, tetapkan nilai user.name
dan
user.email
yang ingin Anda gunakan:
git config --global user.email YOUR_EMAIL_ADDRESS
git config --global user.name YOUR_USERNAME
git config --global credential.helper store
YOUR_EMAIL_ADDRESS
: Email yang digunakan dengan akun GitHub AndaYOUR_USERNAME
: ID pengguna GitHub Anda
Jika Anda menggunakan MFA dengan GitHub, buat token akses pribadi dan gunakan sebagai sandi saat berinteraksi dengan GitHub melalui command line.
- Ikuti link ini untuk membuat token akses.
- Biarkan halaman GitHub tetap terbuka.
Simpan ID pengguna GitHub Anda dalam variabel lingkungan untuk memudahkan akses:
export GH_USER=YOUR_GITHUB_ID
Melakukan fork repositori project
Untuk membuat versi repositori lab Anda yang dapat ditulis sendiri, lakukan fork repositori contoh ke akun GitHub Anda melalui UI GitHub.
Gandakan repositori sampel
Clone dan siapkan repositori sampel:
git clone https://github.com/$GH_USER/software-delivery-workshop.git cloudrun-progression
cd cloudrun-progression/labs/cloudrun-progression
Hubungkan repositori Git Anda.
Dengan Cloud Build, Anda dapat membuat dan mengelola koneksi ke repositori kode sumber menggunakan Konsol Google Cloud. Anda dapat membuat dan mengelola koneksi menggunakan repositori Cloud Build generasi pertama atau kedua. Tutorial ini menggunakan repositori Cloud Build generasi kedua.
Berikan izin yang diperlukan
Untuk menghubungkan host GitHub, berikan peran Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin
) ke akun pengguna Anda:
PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
--role="roles/secretmanager.admin"
Membuat koneksi host
Konfigurasikan koneksi repositori Cloud Build:
gcloud alpha builds connections create github $GH_USER --region=us-central1
Klik link yang diberikan di output dan ikuti petunjuk di layar untuk menyelesaikan koneksi.
Verifikasi penginstalan koneksi GitHub Anda:
gcloud alpha builds connections describe $GH_USER --region=us-central1
Menautkan repositori contoh
Dengan menggunakan koneksi host yang baru saja Anda konfigurasikan, tautkan contoh repositori yang Anda fork:
gcloud alpha builds repositories create cloudrun-progression \
--remote-uri=https://github.com/$GH_USER/software-delivery-workshop.git \
--connection=$GH_USER \
--region=us-central1
Menetapkan variabel nama repositori
Simpan nama repositori untuk digunakan nanti:
export REPO_NAME=projects/$PROJECT_ID/locations/us-central1/connections/$GH_USER/repositories/cloudrun-progression
Men-deploy layanan Cloud Run
Di bagian ini, Anda akan mem-build dan men-deploy aplikasi produksi awal yang digunakan selama tutorial ini.
Men-deploy layanan
Di Cloud Shell, build dan deploy aplikasi, termasuk layanan yang memerlukan autentikasi. Untuk membuat layanan masyarakat, gunakan flag
--allow-unauthenticated
.gcloud builds submit --tag gcr.io/$PROJECT_ID/hello-cloudrun gcloud run deploy hello-cloudrun \ --image gcr.io/$PROJECT_ID/hello-cloudrun \ --platform managed \ --region us-central1 \ --tag=prod -q
Outputnya akan terlihat seperti berikut:
Deploying container to Cloud Run service [hello-cloudrun] in project [sdw-mvp6] region [us-central1] ✓ Deploying new service... Done. ✓ Creating Revision... ✓ Routing traffic... Done. Service [hello-cloudrun] revision [hello-cloudrun-00001-tar] has been deployed and is serving 100 percent of traffic. Service URL: https://hello-cloudrun-apwaaxltma-uc.a.run.app The revision can be reached directly at https://prod---hello-cloudrun-apwaaxltma-uc.a.run.app
Output-nya mencakup URL layanan dan URL unik untuk revisi. Nilai Anda akan sedikit berbeda dari yang ditunjukkan di sini.
Memvalidasi deployment
Setelah deployment selesai, lihat layanan yang baru di-deploy di halaman Revisi di Konsol Cloud.
Di Cloud Shell, lihat respons layanan terautentikasi:
PROD_URL=$(gcloud run services describe hello-cloudrun --platform managed --region us-central1 --format=json | jq --raw-output ".status.url") echo $PROD_URL curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $PROD_URL
Mengaktifkan Deployment Cabang
Di bagian ini, Anda akan mengaktifkan URL unik untuk cabang pengembangan di Git.
Siapkan Pemicu Cabang
Setiap cabang ditunjukkan oleh URL yang diidentifikasi oleh nama cabang. Commit ke cabang memicu deployment, dan update dapat diakses di URL yang sama.
Di Cloud Shell, siapkan pemicu:
gcloud alpha builds triggers create github \ --name=branchtrigger \ --repository=$REPO_NAME \ --branch-pattern='[^(?!.*main)].*' \ --build-config=labs/cloudrun-progression/branch-cloudbuild.yaml \ --region=us-central1
Untuk meninjau pemicu, buka halaman Pemicu Cloud Build di Konsol Cloud.
Membuat perubahan pada cabang
Di Cloud Shell, buat cabang baru:
git checkout -b new-feature-1
Buka aplikasi contoh menggunakan editor favorit Anda atau menggunakan Cloud Shell IDE:
edit app.py
Dalam aplikasi contoh, ubah baris 24 untuk menunjukkan v1.1, bukan v1.0:
@app.route('/') def hello_world(): return 'Hello World v1.1'
Untuk kembali ke terminal, klik Buka Terminal.
Menjalankan pemicu cabang
Di Cloud Shell, commit perubahan dan kirim ke repositori jarak jauh:
git add . && git commit -m "updated" && git push origin new-feature-1
Untuk meninjau build yang sedang berlangsung, buka layar histori Build Cloud Build.
Untuk meninjau revisi baru, setelah build selesai, buka halaman Cloud Run Revisions di Konsol Cloud:
Di Cloud Shell, dapatkan URL unik untuk cabang ini:
BRANCH_URL=$(gcloud run services describe hello-cloudrun --platform managed --region us-central1 --format=json | jq --raw-output ".status.traffic[] | select (.tag==\"new-feature-1\")|.url") echo $BRANCH_URL
Akses URL yang diautentikasi:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $BRANCH_URL
Output respons yang diperbarui akan terlihat seperti berikut:
Hello World v1.1
Mengotomatiskan pengujian canary
Saat kode dirilis ke produksi, biasanya kode dirilis ke sebagian kecil traffic live sebelum memigrasikan semua traffic ke code base baru.
Di bagian ini, Anda akan menerapkan pemicu yang diaktifkan saat kode di-commit ke cabang utama. Pemicu men-deploy kode ke URL canary unik dan mengarahkan 10% dari semua traffic live ke revisi baru.
Di Cloud Shell, siapkan pemicu cabang:
gcloud alpha builds triggers create github \ --name=maintrigger \ --repository=$REPO_NAME \ --branch-pattern=main \ --build-config=labs/cloudrun-progression/main-cloudbuild.yaml \ --region=us-central1
Untuk meninjau pemicu baru, buka halaman Pemicu Cloud Build di Konsol Cloud.
Di Cloud Shell, gabungkan cabang ke baris utama dan kirim ke repositori jarak jauh:
git checkout main git merge new-feature-1 git push origin main
Untuk meninjau build yang sedang diproses, buka halaman Builds Cloud Build.
Setelah build selesai, buka halaman Revisi Cloud Run di Konsol Cloud untuk meninjau revisi baru. Perhatikan bahwa 90% traffic dialihkan ke produksi, 10% ke canary, dan 0% ke revisi cabang.
Tinjau baris kunci main-cloudbuild.yaml
yang mengimplementasikan logika untuk deployment canary.
Baris 39-45 men-deploy revisi baru dan menggunakan tanda tag untuk mengarahkan traffic dari URL canary unik:
gcloud run deploy ${_SERVICE_NAME} \
--platform managed \
--region ${_REGION} \
--image gcr.io/${PROJECT_ID}/${_SERVICE_NAME} \
--tag=canary \
--no-traffic
Baris 61 menambahkan tag statis ke revisi yang mencatat SHA singkat Git deployment:
gcloud beta run services update-traffic ${_SERVICE_NAME} --update-tags=sha-$SHORT_SHA=$${CANARY} --platform managed --region ${_REGION}
Baris 62 memperbarui traffic untuk merutekan 90% ke produksi dan 10% ke canary:
gcloud run services update-traffic ${_SERVICE_NAME} --to-revisions=$${PROD}=90,$${CANARY}=10 --platform managed --region ${_REGION}
Di Cloud Shell, dapatkan URL unik untuk revisi canary:
CANARY_URL=$(gcloud run services describe hello-cloudrun --platform managed --region us-central1 --format=json | jq --raw-output ".status.traffic[] | select (.tag==\"canary\")|.url") echo $CANARY_URL
Tinjau endpoint canary secara langsung:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CANARY_URL
Untuk melihat respons berbasis persentase, buat serangkaian permintaan:
LIVE_URL=$(gcloud run services describe hello-cloudrun --platform managed --region us-central1 --format=json | jq --raw-output ".status.url") for i in {0..20};do curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $LIVE_URL; echo \n done
Merilis ke Produksi
Setelah deployment canary divalidasi dengan sebagian kecil traffic, Anda akan merilis deployment ke seluruh traffic live lainnya.
Di bagian ini, Anda akan menyiapkan pemicu yang diaktifkan saat membuat tag di repositori. Pemicu memigrasikan 100% traffic ke revisi yang sudah di-deploy berdasarkan commit SHA tag. Menggunakan commit SHA memastikan revisi yang divalidasi dengan traffic canary adalah revisi yang digunakan untuk sisa traffic produksi.
Di Cloud Shell, siapkan pemicu tag:
gcloud alpha builds triggers create github \ --name=tagtrigger \ --repository=$REPO_NAME \ --tag-pattern=. \ --build-config=labs/cloudrun-progression/tag-cloudbuild.yaml \ --region=us-central1
Untuk meninjau pemicu baru, buka halaman Pemicu Cloud Build di Konsol Cloud.
Di Cloud Shell, buat tag baru dan kirim ke repositori jarak jauh:
git tag 1.1 git push origin 1.1
Untuk meninjau build yang sedang berjalan, buka layar histori Build Cloud Build di Konsol Cloud.
Setelah build selesai, buka halaman Revisi Cloud Run di Konsol Cloud untuk meninjau revisi baru. Perhatikan bahwa revisi diperbarui untuk menunjukkan tag produksi dan menayangkan 100% traffic langsung.
Di Cloud Shell, untuk melihat respons berbasis persentase, buat serangkaian permintaan:
LIVE_URL=$(gCloud Run services describe hello-cloudrun --platform managed --region us-central1 --format=json | jq --raw-output ".status.url") for i in {0..20};do curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $LIVE_URL; echo \n done
Tinjau baris utama
tag-cloudbuild.yaml
yang menerapkan logika deployment produksi.Baris 37 memperbarui revisi canary dengan menambahkan tag produksi. Revisi yang di-deploy kini diberi tag untuk produksi dan canary:
gcloud beta run services update-traffic ${_SERVICE_NAME} --update-tags=prod=$${CANARY} --platform managed --region ${_REGION}
Baris 39 memperbarui traffic untuk URL layanan dasar untuk mengarahkan 100% traffic ke revisi yang diberi tag sebagai produksi:
gcloud run services update-traffic ${_SERVICE_NAME} --to-revisions=$${NEW_PROD}=100 --platform managed --region ${_REGION}
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Tinjau Mengelola revisi dengan Cloud Run.
- Tinjau Rollback, peluncuran bertahap, dan migrasi traffic Cloud Run.
- Tinjau Menggunakan tag untuk mengakses revisi.
- Tinjau Membuat dan mengelola pemicu build di Cloud Build.
- Untuk arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.