Tutorial ini bekerja dengan repo GitHub publik dan pribadi. Perhatikan bahwa pratinjau itu sendiri akan berupa URL umum, jika tidak jelas.
Tujuan
- Membuat layanan Cloud Run.
- Menerapkan continuous integration berbasis kontrol sumber pada GitHub.
- Membuat dan mengelola akses ke secret melalui Secret Manager.
- Men-deploy Cloud Builder kustom.
- Menciptakan pemicu Cloud Build untuk memanggil build pada permintaan pull GitHub.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator untuk memberi Anda peran IAM berikut di project Anda:
-
Cloud Build Editor (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Menciptakan akun layanan (
roles/iam.serviceAccountCreator
) -
Secret Manager Admin (
roles/secretmanager.admin
)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Kelola akses.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Mengambil contoh kode
Untuk kemudahan penggunaan dalam tutorial ini, Anda akan membuat repositori GitHub baru dengan salinan aplikasi Hello World berdasarkan template. Kemudian, Anda akan menambahkan file baru ke repo ini dengan konfigurasi Cloud Build khusus.
- Login ke GitHub dan buka repo template.
- Buat repositori baru menggunakan template ini dengan mengklik "Gunakan template ini".
- Beri nama repo Anda
helloworld-python
. - Pilih "Publik" atau "Pribadi" untuk repo.
- Klik buat repository dari template.
- Beri nama repo Anda
Buat file konfigurasi Cloud Build baru di repo Anda (petunjuk lengkap):
- Di halaman repo, klik Tambahkan file > Buat file baru
- Namai folder baru ini
cloudbuild.yaml
Salin kode di bawah ke
cloudbuild.yaml
:Pertahankan pilihan "Commit langsung ke cabang
main
" pilihan.Klik Commit file baru.
Men-deploy layanan Anda dengan pemicu build
Tutorial ini menunjukkan cara menyiapkan pemicu build untuk memulai build secara otomatis setiap kali Anda memperbarui cabang utama repositori. Anda juga dapat men-deploy layanan secara manual dengan memanggil Cloud Build setiap kali ingin men-deploy perubahan.
Untuk tutorial ini, gunakan file cloudbuild.yaml
untuk men-deploy contoh layanan bernama myservice
.
Berikan peran Cloud Run Admin and Service Account User ke akun layanan Cloud Build (petunjuk lengkap):
Di konsol Google Cloud, buka halaman setelan akun Cloud Build.
Mengaktifkan peran Admin Cloud Run.
Pada dialog konfirmasi, klik Berikan akses ke semua akun layanan.
Hubungkan akun GitHub Anda ke Cloud Build (petunjuk lengkap):
Di konsol Google Cloud, pergi ke halaman pemicu Cloud Build.
Klik Connect Repository.
Pilih GitHub (Cloud Build GitHub App) sebagai sumber, lalu masuk ke dialog autentikasi dan otorisasi.
Pilih repositori "GITHUB_USER_NAME/helloworld-python".
Klik Connect repository.
Di bagian "Buat pemicu (opsional)", klik Buat pemicu.
Buat pemicu Cloud Build (petunjuk lengkap):
- Di halaman pemicu Cloud Build, klik Create trigger.
- Masukkan detail berikut:
- Nama:
prod-deploy
- Agenda: Kirim ke Cabang
- Repositori Sumber: "GITHUB_USER_NAME/helloworld-python"
- Cabang Sumber:
^main$
- Konfigurasi build: File konfigurasi Cloud Build (yaml atau json)
- Lokasi file konfigurasi Build Cloud
cloudbuild.yaml
- Nama:
- Klik Buat.
Jalankan pemicu baru secara manual:
- Pada listingan pemicu baru, klik Run.
- Di pop-up, konfirmasi nama cabang (
main
), lalu klik Jalankan Pemicu. - Periksa progres build dengan membuka histori Cloud Build.
- Tunggu hingga build selesai.
Konfirmasi deployment yang berhasil.
Pada konsol Google Cloud, buka halaman Cloud Run.
Pastikan layanan tersebut memiliki tanda centang hijau yang menunjukkan deployment berhasil.
Klik tab Revisi dan konfirmasi bahwa layanan tersebut memiliki satu revisi, yang menyalurkan 100% traffic, dimulai dengan "myservice-00001-".
Klik URL layanan dan konfirmasi bahwa layanan tersebut menampilkan "Hello World!".
Membuat token dan konfigurasi
Pemicu prod-deploy yang dibuat di bagian sebelumnya akan men-deploy layanan saat push dilakukan ke cabang utama. Sekarang, Anda akan membuat pemicu kedua yang berjalan setiap kali permintaan pull dibuat atau diperbarui dalam repo.
Setelah pemicu baru disiapkan, pratinjau akan di-deploy, tetapi tidak akan ada informasi dalam permintaan pull untuk menautkan ke pratinjau. Untuk menyiapkan fungsi ini, Anda harus menyelesaikan langkah-langkah konfigurasi tambahan berikut:
- Membuat token GitHub
- Simpan token ini di Secret Manager
- Buat image kustom untuk digunakan sebagai langkah di Cloud Build.
Membuat dan menyimpan Token GitHub
- Buat token GitHub untuk mengizinkan penulisan kembali ke permintaan pull (petunjuk lengkap):
- Buka halaman setelan GitHub Personal Access token.
- Klik Buat token baru.
- Masukkan detail berikut:
- Catatan:
preview-deploy
- Masa berlaku: 30 hari
- Cakupan:
- Untuk repo publik:
repo:status
("Status commit akses") - Untuk repo pribadi:
repo
("Kontrol penuh atas repositori pribadi")
- Untuk repo publik:
- Catatan:
- Klik Generate Token.
- Salin nilai token yang dibuat.
Simpan token GitHub di Secret Manager:
Di konsol Google Cloud, buka halaman Secret Manager.
Klik Buat Secret.
Masukkan detail berikut:
- Nama:
github_token
. - Nilai rahasia: tempel nilai token yang Anda salin dari GitHub.
- Nama:
Klik Buat Secret.
Izinkan Cloud Build mengakses rahasia ini:
Di tab browser baru, di Google Cloud Console, buka halaman Cloud Build settings.
Salin nilai untuk "Email akun layanan".
- Emailnya adalah
PROJECT_NUM@cloudbuild.gserviceaccount.com
- Emailnya adalah
Kembali ke Secret Manager, klik tab Permission dan klik
AddPROJECT_NUM@cloudbuild.gserviceaccount.com
Entitas Baru- Peran: Secret Manager Secret Accessor
Klik Simpan.
GitHub merekomendasikan pengaturan waktu habis masa berlaku untuk akses token pribadi, dan akan mengirimkan email pengingat saat token ditetapkan agar tidak berlaku lagi. Jika Anda terus menggunakan pratinjau deployment, buat versi baru github_token
saat Anda membuat ulang token. Builder pada langkah berikutnya mengambil versi token terbaru, sehingga pratinjau akan terus bekerja.
Membuat image baru untuk Cloud Build
Skrip yang menulis notifikasi "Pratinjau Deployment" ke permintaan pull terletak dalam Contoh Python Docs. Daripada menambahkan skrip ini ke dalam kode sumber, Anda dapat secara opsional mem-build skrip ini ke dalam container dalam project Anda dan menjalankan container tersebut sebagai langkah dalam konfigurasi Cloud Build Anda.
Anda dapat menyelesaikan petunjuk berikut menggunakan Cloud Shell, atau komputer lokal jika Anda telah menginstal dan mengonfigurasi git
dan Google Cloud CLI. Petunjuk
di bawah ini menunjukkan kedua metode tersebut.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Konfigurasikan Google Cloud CLI untuk menggunakan project Anda, untuk mengganti
PROJECT_ID
dengan project ID Anda: Jika menggunakan Cloud Shell, Anda mungkin perlu memberikan otorisasi kepada Google Cloud CLI untuk melakukan panggilan API Google Cloud. Klik Izinkan untuk mengizinkan tindakan ini dilanjutkan.export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID
- Buat image container baru:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples cd python-docs-samples/ gcloud builds submit --tag gcr.io/$PROJECT_ID/deployment-previews run/deployment-previews
- Mengonfirmasi bahwa penampung telah dibuat:
gcloud container images list
- Hapus repositori yang di-clone:
cd .. rm -rf python-docs-samples
Menambahkan konfigurasi Cloud Build baru
Repositori Anda sudah memiliki file cloudbuild.yaml
yang digunakan di cabang
utama Anda. Sekarang Anda akan membuat konfigurasi baru untuk pemicu baru ini.
Di halaman repo GitHub, klik Add file > Buat file baru
- Beri nama file baru
cloudbuild-preview.yaml
- Salin kode di bawah, dan tempelkan ke file baru Anda:
- Beri nama file baru
Commit perubahan ke cabang utama repositori Anda.
Membuat pemicu sekunder
Sekarang setelah semua dasar-dasarnya siap, buat pemicu baru.
Buat pemicu Cloud Build baru (petunjuk lengkap):
Di konsol Google Cloud, buka halaman Pemicu Cloud Build.
Klik Buat trigger.
Masukkan detail berikut:
- Nama:
preview-deploy
- Peristiwa: Permintaan Pull
- Repositori Sumber: "GITHUB_USER_NAME/helloworld-python"
- Cabang dasar:
^main$
- Kontrol komentar: Wajib kecuali untuk pemilik dan kolaborator
- Sebagai pemilik repo, pratinjau akan otomatis di-bangun berdasarkan permintaan pull yang Anda buat.
- Jika Anda ingin mengizinkan siapa saja melihat pratinjau perubahan mereka, baca selengkapnya tentang implikasi keamanan dari memilih "Tidak diperlukan".
- Konfigurasi: File Konfigurasi Cloud Build
- Lokasi file konfigurasi Cloud Build:
cloudbuild-preview.yaml
- Nama:
Klik Buat.
Memeriksa Keberhasilan
Karena pemicu baru ini diaktifkan saat permintaan pull baru dibuat, Anda harus membuat permintaan pull baru untuk mengujinya.
- Buka repositori Anda, dan buat perubahan visual pada
app.py
di cabang baru.- Buka
app.py
, lalu klik ikon pensil ( ). - Buat perubahan; misalnya, ubah "Halo" menjadi "Salam".
- Pilih Buat sebuah cabang baru untuk commit ini dan mulai dengan pull request, lalu klik Usulkan perubahan.
- Buka
Buat permintaan pull baru dengan cabang ini.
Jika pemicu dikonfigurasi dengan benar, pemeriksaan baru akan segera ditampilkan setelah Anda membuat permintaan pull:
Nama pemeriksaan tersebut adalah nama pemicu dan project ID Anda. Periksa progres build dengan mengklik Details > View more details pada Google Cloud Build.
Jika pemicu gagal dan Anda harus mengirim ulang build, atau jika ingin membuat perubahan lain pada permintaan pull, Anda harus meng-commit perubahan pada cabang yang sama. Setiap commit baru pada permintaan pull akan memicu build baru.
Setelah pemicu selesai, pemeriksaan status baru bernama "Deployment Preview" akan ditampilkan untuk permintaan pull. Ikon yang ditampilkan adalah avatar Anda karena akun Anda adalah pemilik token yang digunakan:
Klik Details untuk membuka pratinjau. URL yang ditampilkan sama dengan URL layanan asli Anda, tetapi diawali dengan "pr-1---".
Perlu diperhatikan bahwa jika Anda membuka URL layanan asli, konten asli akan ditampilkan:
Lihat daftar revisi layanan Anda untuk memeriksa status layanan di Cloud Run: kini ada dua revisi yang menyalurkan traffic: versi asli dan pratinjau:
Terus buat perubahan pada permintaan pull dengan menambahkan commit baru ke cabang. Setiap kali Anda melakukan commit, pemicu
preview-deploy
akan diaktifkan, sehingga membuat revisi layanan yang baru dan menyediakan revisi di URL yang sama:Setelah Anda siap menggabungkan perubahan, klik Merge Pull Request. Pemicu
prod-deploy
asli berjalan, dan perubahan dari permintaan pull ditampilkan dalam URL asli:Revisi baru menayangkan 100% traffic di URL utama, tetapi URL pratinjau permintaan pull masih terikat pada commit terbaru untuk permintaan pull tersebut, sehingga link akan terus berfungsi:
Batasan
Ada batasan jumlah URL revisi yang dapat dibuat. Jika Anda memperkirakan repo akan memiliki lebih dari 1000 permintaan pull, pertimbangkan proses untuk membersihkan tag seperti yang ditunjukkan pada cloudbuild-cleanup.yaml
.
Memahami kode
cloudbuild.yaml
Kode ini didasarkan pada contoh cloudbuild.yaml
yang disediakan oleh Cloud Build, tetapi dengan update yang dicatat: langkah keempat yang menjalankan update-traffic
.
Konfigurasi di cloudbuild.yaml
menciptakan perubahan pada pemisahan traffic.
Parameter --to-latest
menawarkan fungsi yang sama seperti kotak centang Tayangkan revisi ini segera di halaman Cloud Run. Ini
Memastikan bahwa revisi layanan ini segera menyalurkan 100% traffic.
cloudbuild-preview.yaml
Kode ini mirip dengan cloudbuild.yaml
, tetapi dengan langkah-langkah tambahan:
Setelah membangun dan mengirim image layanan,
cloudbuild-preview.yaml
akan men-deploy layanan menggunakan flag--no-traffic
. Artinya, meskipun ini adalah revisi terbaru, revisi tersebut tidak digunakan untuk menyalurkan traffic.cloudbuild-preview.yaml
menambahkan tag khusus berdasarkan nomor permintaan pull. Dalam hal ini, string yang diawali dengan "pr-" dan diakhiri dengan jumlah permintaan pull.Pada tahap ini, URL revisi berfungsi, tetapi orang yang mengirimkan permintaan pull tidak dapat menentukan hal ini karena log Cloud Build tidak terlihat dari GitHub itu sendiri: hanya link ke log dapat terlihat. Hanya pengguna terautentikasi dari project Cloud Build dengan izin yang memadai yang dapat melihat log.
cloudbuild-preview.yaml
menjalankan skripcheck_status.py
, menggunakan parameter substitusi bawaan yang disediakan oleh Cloud Build. Sejumlah parameter ini tersedia saat menggunakan repo GitHub, seperti nomor permintaan pull, nama repo, dan SHA commit.
Untuk menjalankan kembali pemicu ini, kirimkan commit lain di GitHub. Pemicu ini tidak dapat dijalankan ulang dari halaman Cloud Build di konsol.
cloudbuild-cleanup.yaml
Kode ini adalah alternatif untuk cloudbuild.yaml
, dengan fungsi pembersihan
tambahan. Langkah awal adalah melakukan deployment, lalu fungsinya diperluas sebagai berikut:
Dengan menggunakan Discovery API dan GitHub API, tentukan tag mana untuk layanan yang ditujukan untuk permintaan pull tertutup. Setidaknya akan ada permintaan pull yang digabungkan, yang menyebabkan pemicu ini diaktifkan.
Hapus tag yang teridentifikasi.
check_status.py
Skrip check_status.py
mengambil informasi yang diberikan tentang layanan Cloud Run,
tentang repo dan commit GitHub, lalu menjalankan operasi berikut:
- Ambil layanan, nama tag, dan URL revisi menggunakan klien Python Google API.
- Mengambil token GitHub dari variabel lingkungan, yang disediakan oleh Secret Manager.
- Buat status pada commit yang ditentukan, dengan menautkan ke URL revisi yang diambil, menggunakan GitHub Client API untuk Python.
Pembersihan
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial. Selain itu, Anda harus menghapus konfigurasi GitHub yang dibuat untuk tutorial.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
- Buka konsol Cloud Run.
- Pilih listingan "myservice", lalu klik Delete.
- Pada dialog konfirmasi, klik Delete.
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
- Hapus image container pratinjau deployment yang bernama
gcr.io/PROJECT_ID/deployment-preview
dari Container Registry. - Hapus image container helloworld yang bernama
gcr.io/PROJECT_ID/helloworld
dari Container Registry. - Hapus pemicu Cloud Build.
- Hapus rahasia Secret Manager.
- Hapus image container pratinjau deployment yang bernama
Menghapus konfigurasi tutorial
Untuk membersihkan konfigurasi di GitHub, Anda harus menghapus aplikasi Google Cloud Build dari GitHub:
- Buka Setelan aplikasi GitHub
- Di listingan Google Cloud Build, klik Configure.
- Di bagian Danger Zone, klik Uninstall.
- Pada dialog konfirmasi, klik Oke.
Anda juga harus menghapus token GitHub yang dibuat:
- Buka halaman Token akses pribadi GitHub.
- Di listingan preview-deploy, klik Hapus.
- Pada dialog konfirmasi, klik Saya mengerti, hapus token ini.
Anda juga perlu menghapus repo GitHub:
- Buka repo GitHub yang Anda buat dan klik tab Settings.
- Di bagian Danger Zone, klik Delete this repository.
- Pada dialog konfirmasi, masukkan nama lengkap repositori, lalu klik Saya memahami konsekuensinya, hapus repositori ini.
Langkah berikutnya
- Pelajari lebih lanjut rollback, peluncuran bertahap, dan migrasi traffic di Cloud Run.
- Pelajari pemicu aplikasi GitHub di Cloud Build lebih lanjut.