Pemicu Pub/Sub Cloud Build memungkinkan Anda menjalankan build sebagai respons terhadap peristiwa yang dipublikasikan melalui Pub/Sub. Anda dapat menggunakan informasi dari peristiwa Pub/Sub untuk memparameterkan build dan memutuskan apakah build harus dijalankan sebagai respons terhadap peristiwa tersebut. Pemicu Pub/Sub dapat dikonfigurasi untuk memantau topik Pub/Sub apa pun. Google Cloud
Halaman ini menjelaskan cara membuat pemicu Pub/Sub untuk mengotomatiskan build sebagai respons terhadap peristiwa di Artifact Registry dan Cloud Storage.
Batasan
Pemicu Pub/Sub Cloud Build tidak didukung saat Kontrol Layanan VPC digunakan.
Sebelum memulai
Aktifkan Cloud Build API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.
- Pastikan kode sumber Anda berisi file konfigurasi build atau
Dockerfiledi repositori. Untuk menggunakan perintah
gclouddi halaman ini, instal Google Cloud CLI.
Membuat pemicu build yang merespons peristiwa Artifact Registry
Anda dapat membuat pemicu Pub/Sub yang merespons peristiwa Artifact Registry seperti saat image dikirim, diberi tag, atau dihapus. Bagian ini membahas cara membuat pemicu Pub/Sub yang memanggil build saat tag baru dikirim ke image yang ada. Jika Anda belum terbiasa dengan Artifact Registry, lihat Ringkasan Artifact Registry.
Konsol
Untuk membuat pemicu yang memantau tag baru yang dikirim ke image yang ada di Artifact Registry menggunakan konsol: Google Cloud
Buka halaman Pemicu:
Pilih project Anda dari bagian atas halaman, lalu klik Buka.
Klik Create trigger.
Masukkan setelan pemicu berikut:
- Nama: Masukkan nama untuk pemicu Anda.
Region: Pilih region untuk pemicu Anda.
- Jika file konfigurasi build yang terkait dengan pemicu menentukan kumpulan pribadi, Cloud Build akan menggunakan kumpulan pribadi untuk menjalankan build Anda. Dalam hal ini, region yang Anda tentukan di pemicu harus cocok dengan region tempat Anda membuat kumpulan pribadi.
- Jika file konfigurasi build yang terkait dengan pemicu tidak menentukan kumpulan pribadi, Cloud Build menggunakan kumpulan default untuk menjalankan build Anda di region yang sama dengan pemicu Anda.
Deskripsi (Opsional): Masukkan deskripsi untuk pemicu Anda.
Peristiwa: Pilih Pesan Pub/Sub sebagai peristiwa untuk memanggil pemicu Anda.
Subscription: Pilih topik Pub/Sub yang ingin Anda langgani sebagai peristiwa pemicu. Anda akan melihat semua topik yang ada di project Anda dalam menu drop-down.
- Topik Pub/Sub: Pilih topik
gcrdari menu drop-down atau buat topik secara manual menggunakan petunjuk di Mengonfigurasi notifikasi Pub/Sub.
- Topik Pub/Sub: Pilih topik
Sumber: Pilih sumber yang akan dibangun saat pemicu Pub/Sub berjalan.
Pembuatan repositori: Pilih generasi ke-2.
Repositori: Pilih repositori Anda.
Cabang atau Tag: Tentukan ekspresi reguler dengan nilai cabang atau tag yang akan dicocokkan. Untuk mengetahui informasi tentang sintaksis ekspresi reguler yang dapat diterima, lihat sintaksis RE2.
Kontrol komentar: Jika Anda memilih permintaan pull (GitHub App only) sebagai Event, pilih salah satu opsi berikut untuk mengontrol apakah build akan otomatis dieksekusi oleh pemicu:
Wajib kecuali untuk pemilik dan kolaborator: Saat permintaan pull dibuat atau diperbarui oleh pemilik atau kolaborator repositori, build akan otomatis dieksekusi oleh pemicu. Jika kontributor eksternal memulai tindakan, build hanya akan dieksekusi setelah pemilik atau kolaborator mengomentari
/gcbrunpada permintaan pull.Wajib: Saat permintaan pull dibuat atau diperbarui oleh kontributor mana pun, build hanya akan dieksekusi setelah pemilik atau kolaborator mengomentari
/gcbrunpermintaan pull. Build dieksekusi setiap kali perubahan dilakukan pada permintaan pull.Tidak diperlukan: Saat permintaan pull dibuat atau diperbarui oleh kontributor mana pun, build akan otomatis dieksekusi oleh pemicu.
Konfigurasi: Pilih file konfigurasi build (yang ada di repositori jarak jauh Anda) atau buat file konfigurasi build inline untuk digunakan dalam build Anda.
- Jenis: Pilih jenis konfigurasi yang akan digunakan untuk build Anda.
- File konfigurasi Cloud Build (yaml atau json): Gunakan file konfigurasi build untuk konfigurasi Anda.
- Dockerfile: Gunakan
Dockerfileuntuk konfigurasi Anda. - Buildpacks: Gunakan buildpacks untuk konfigurasi Anda.
Lokasi: Tentukan lokasi untuk konfigurasi Anda.
- Repository: Jika file konfigurasi Anda berada di
repositori jarak jauh, berikan lokasi
file konfigurasi build, direktori
Dockerfile, atau direktori buildpack. Jika jenis konfigurasi build Anda adalahDockerfileatau buildpack, Anda harus memberikan nama untuk image yang dihasilkan dan secara opsional, waktu tunggu untuk build Anda. Setelah memberikan nama imageDockerfileatau buildpack, Anda akan melihat pratinjau perintahdocker buildataupackyang akan dijalankan build Anda. - Variabel lingkungan buildpack (opsional): Jika Anda memilih
buildpackssebagai jenis konfigurasi, klik Tambahkan variabel lingkungan paket untuk menentukan variabel lingkungan dan nilai buildpack. Untuk mempelajari lebih lanjut variabel lingkungan buildpack, lihat Variabel lingkungan. Inline: Jika Anda memilih File konfigurasi Cloud Build (yaml atau json) sebagai opsi konfigurasi, Anda dapat menentukan konfigurasi build secara inline. Klik Open Editor untuk menulis file konfigurasi build di Google Cloud konsol menggunakan sintaksis YAML atau JSON. Klik Selesai untuk menyimpan konfigurasi build Anda.
- Repository: Jika file konfigurasi Anda berada di
repositori jarak jauh, berikan lokasi
file konfigurasi build, direktori
- Jenis: Pilih jenis konfigurasi yang akan digunakan untuk build Anda.
Substitusi (opsional): Jika Anda memilih file konfigurasi build sebagai opsi konfigurasi build, Anda dapat memilih untuk menentukan variabel substitusi khusus pemicu menggunakan kolom ini.
Dalam contoh berikut, kita ingin mendapatkan nama tag gambar dari payload dan tindakan yang terkait dengan peristiwa
gcr. Untuk melakukannya, buat variabel substitusi menggunakan binding payload.Tentukan variabel dan nilai berikut:
Nama Variabel Nilai Variabel _IMAGE_TAG$(body.message.data.tag)_ACTION$(body.message.data.action)body.messagemereferensikan PubSubMessage yang dipublikasikan oleh penayang dan digunakan oleh pelanggan. Untuk melihat contoh payload notifikasi Pub/Sub lainnya, lihat Contoh notifikasi.Filter (opsional): Anda dapat membuat filter dalam pemicu yang menentukan apakah pemicu akan menjalankan build sebagai respons terhadap payload masuk dengan menentukan filter pada variabel substitusi. Ekspresi filter harus dievaluasi menjadi
trueagar build dapat dijalankan.Sebaiknya gunakan pemfilteran saat menyiapkan pemicu Pub/Sub di topik dengan beberapa pesan. Filter dapat digunakan untuk mengontrol secara tepat build yang dijalankan sebagai respons terhadap pesan Pub/Sub yang masuk. Untuk mempelajari risiko yang terkait dengan penyiapan pemicu tanpa filter, lihat Risiko yang terkait dengan pemicu yang tidak difilter.
Dalam contoh berikut, kita ingin pemicu menjalankan build jika tag baru dikirim ke image yang ada. Kita menggunakan operator kondisi filter untuk memeriksa apakah variabel
_IMAGE_TAGcocok dengan nama tag yang ada dan apakah variabel_ACTIONcocok denganINSERTuntuk mencari data yang baru ditambahkan.Tentukan hal berikut sebagai filter Anda:
_IMAGE_TAG!=""_ACTION==INSERT
Sintaksis pemfilteran di pemicu Pub/Sub menggunakan Common Expression Language (CEL) untuk evaluasi ekspresi. Untuk mempelajari CEL lebih lanjut, lihat repositori cel-spec.
- Klik Buat untuk membuat pemicu build.
gcloud
Untuk membuat pemicu yang memantau tag baru yang dikirim ke image yang ada di Artifact Registry menggunakan perintah gcloud:
- Buka jendela terminal.
Jalankan perintah
gclouduntuk membuat pemicu build di project Anda. Dalam contoh berikut, pemicu dikonfigurasi untuk merespons build dengan tag yang cocok denganproddan tindakan yang cocok denganINSERTberdasarkan payload yang ditentukan seperti yang ditentukan oleh variabel penggantian,_IMAGE_TAG.gcloud builds triggers create pubsub \ --region=REGION \ --name=TRIGGER_NAME \ --repository=projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME \ --topic=projects/PROJECT_ID/topics/TOPIC_NAME \ --build-config=BUILD_CONFIG \ # or --inline-config=INLINE_BUILD_CONFIG --substitutions=\ '_IMAGE_TAG_="$(body.message.data.tag)",' \ '_ACTION="$(body.message.data.action)"' \ --subscription-filter='_IMAGE_TAG != "" && _ACTION == "INSERT"' \ --tag=TAG_NAME # or --branch=BRANCH_NAME
Dengan:
- REGION adalah region untuk pemicu Anda.
- TRIGGER_NAME adalah nama pemicu Anda.
- PROJECT_ID adalah ID project Cloud Anda.
- CONNECTION_NAME adalah nama koneksi host Anda.
- REPO_NAME adalah nama repositori Anda.
- TOPIC_NAME adalah nama topik Pub/Sub yang telah Anda ikuti.
- BUILD_CONFIG adalah jalur ke file konfigurasi build Anda.
- INLINE_BUILD_CONFIG adalah jalur ke file konfigurasi build inline Anda.
- TAG_NAME adalah nama tag Anda jika Anda ingin menyetel pemicu untuk dibuat pada tag.
- BRANCH_NAME adalah nama cabang Anda jika Anda ingin menyetel pemicu untuk membangun di cabang.
Membuat pemicu build yang merespons peristiwa Cloud Storage
Anda dapat membuat pemicu Pub/Sub yang merespons peristiwa Cloud Storage, seperti saat biner baru di-push ke bucket penyimpanan yang ada. Bagian ini membahas cara membuat pemicu Pub/Sub yang merespons dengan build saat men-deploy biner baru ke bucket yang diupload. Jika Anda belum memahami Cloud Storage, lihat Mulai Cepat.
Konsol
Untuk membuat pemicu yang memproses peristiwa Cloud Storage menggunakan konsol: Google Cloud
Buka halaman Pemicu:
Pilih project Anda dari bagian atas halaman, lalu klik Buka.
Klik Create trigger.
Masukkan setelan pemicu berikut:
- Nama: Masukkan nama untuk pemicu Anda.
Region: Pilih region untuk pemicu Anda.
- Jika file konfigurasi build yang terkait dengan pemicu menentukan kumpulan pribadi, Cloud Build akan menggunakan kumpulan pribadi untuk menjalankan build Anda. Dalam hal ini, region yang Anda tentukan di pemicu harus cocok dengan region tempat Anda membuat kumpulan pribadi.
- Jika file konfigurasi build yang terkait dengan pemicu tidak menentukan kumpulan pribadi, Cloud Build menggunakan kumpulan default untuk menjalankan build Anda di region yang sama dengan pemicu Anda.
Deskripsi (Opsional): Masukkan deskripsi untuk pemicu Anda.
Peristiwa: Pilih Pesan Pub/Sub sebagai peristiwa untuk memanggil pemicu Anda.
Subscription: Pilih topik Pub/Sub yang ingin Anda langgani sebagai peristiwa pemicu. Anda akan melihat semua topik yang ada di project Anda dalam menu drop-down.
- Topik Pub/Sub: Pilih topik
gcsdari menu drop-down atau buat topik secara manual menggunakan petunjuk di Mengonfigurasi notifikasi Pub/Sub untuk Cloud Storage.
- Topik Pub/Sub: Pilih topik
Sumber: Pilih sumber yang akan dibangun saat pemicu Pub/Sub berjalan.
Pembuatan repositori: Pilih generasi ke-2.
Repositori: Pilih repositori.
Cabang atau Tag: Tentukan ekspresi reguler dengan nilai cabang atau tag yang akan dicocokkan. Untuk mengetahui informasi tentang sintaksis ekspresi reguler yang dapat diterima, lihat sintaksis RE2.
Kontrol komentar: Jika Anda memilih permintaan pull (GitHub App only) sebagai Event, pilih salah satu opsi berikut untuk mengontrol apakah build akan otomatis dieksekusi oleh pemicu:
Wajib kecuali untuk pemilik dan kolaborator: Saat permintaan pull dibuat atau diperbarui oleh pemilik atau kolaborator repositori, build akan otomatis dieksekusi oleh pemicu. Jika kontributor eksternal memulai tindakan, build hanya akan dieksekusi setelah pemilik atau kolaborator mengomentari
/gcbrunpada permintaan pull.Wajib: Saat permintaan pull dibuat atau diperbarui oleh kontributor mana pun, build hanya akan dieksekusi setelah pemilik atau kolaborator mengomentari
/gcbrunpermintaan pull. Build dieksekusi setiap kali perubahan dilakukan pada permintaan pull.Tidak diperlukan: Saat permintaan pull dibuat atau diperbarui oleh kontributor mana pun, build akan otomatis dieksekusi oleh pemicu.
Konfigurasi: Pilih file konfigurasi build (yang ada di repositori jarak jauh Anda) atau buat file konfigurasi build inline untuk digunakan dalam build Anda.
- Jenis: Pilih jenis konfigurasi yang akan digunakan untuk build Anda.
- File konfigurasi Cloud Build (yaml atau json): Gunakan file konfigurasi build untuk konfigurasi Anda.
- Dockerfile: Gunakan
Dockerfileuntuk konfigurasi Anda. - Buildpacks: Gunakan buildpacks untuk konfigurasi Anda.
Lokasi: Tentukan lokasi untuk konfigurasi Anda.
- Repository: Jika file konfigurasi Anda berada di
repositori jarak jauh, berikan lokasi
file konfigurasi build, direktori
Dockerfile, atau direktori buildpack. Jika jenis konfigurasi build Anda adalahDockerfileatau buildpack, Anda harus memberikan nama untuk image yang dihasilkan dan secara opsional, waktu tunggu untuk build Anda. Setelah memberikan nama imageDockerfileatau buildpack, Anda akan melihat pratinjau perintahdocker buildataupackyang akan dijalankan build Anda. - Variabel lingkungan buildpack (opsional): Jika Anda memilih
buildpackssebagai jenis konfigurasi, klik Tambahkan variabel lingkungan paket untuk menentukan variabel lingkungan dan nilai buildpack. Untuk mempelajari lebih lanjut variabel lingkungan buildpack, lihat Variabel lingkungan. Inline: Jika Anda memilih File konfigurasi Cloud Build (yaml atau json) sebagai opsi konfigurasi, Anda dapat menentukan konfigurasi build secara inline. Klik Open Editor untuk menulis file konfigurasi build di Google Cloud konsol menggunakan sintaksis YAML atau JSON. Klik Selesai untuk menyimpan konfigurasi build Anda.
- Repository: Jika file konfigurasi Anda berada di
repositori jarak jauh, berikan lokasi
file konfigurasi build, direktori
- Jenis: Pilih jenis konfigurasi yang akan digunakan untuk build Anda.
Substitusi (opsional): Jika Anda memilih file konfigurasi build sebagai opsi konfigurasi build, Anda dapat memilih untuk menentukan variabel substitusi khusus pemicu menggunakan kolom ini.
Dalam contoh ini, kita ingin memantau deployment biner baru saat diupload ke bucket. Untuk mendapatkan data ini, kita dapat membuat variabel pengganti menggunakan binding payload.
Tentukan variabel dan nilai berikut:
Nama Variabel Nilai Variabel _EVENT_TYPE$(body.message.attributes.eventType)_BUCKET_ID$(body.message.attributes.bucketId)_OBJECT_ID$(body.message.attributes.objectId)body.messagemereferensikan PubSubMessage yang dipublikasikan oleh penayang dan digunakan oleh pelanggan. Untuk melihat contoh payload notifikasi Pub/Sub lainnya, lihat Contoh notifikasi.Filter (opsional): Anda dapat membuat filter dalam pemicu yang menentukan apakah pemicu akan menjalankan build sebagai respons terhadap payload masuk dengan menentukan filter pada variabel substitusi. Ekspresi filter harus dievaluasi menjadi
trueagar build dapat dijalankan.Sebaiknya gunakan pemfilteran saat menyiapkan pemicu Pub/Sub di topik dengan beberapa pesan. Filter dapat digunakan untuk mengontrol secara tepat build yang dijalankan sebagai respons terhadap pesan Pub/Sub yang masuk. Untuk mempelajari risiko yang terkait dengan penyiapan pemicu tanpa filter, lihat Risiko yang terkait dengan pemicu yang tidak difilter.
Karena kita ingin pemicu menjalankan build jika program biner baru telah di-deploy ke bucket tertentu, kita dapat menggunakan operator "==" untuk memeriksa kecocokan yang tepat. Anda juga dapat menggunakan kata kunci "matches" jika ingin mencocokkan dengan ekspresi reguler.
Tentukan hal berikut sebagai filter Anda:
_EVENT_TYPE==OBJECT_FINALIZE_OBJECT_IDcocok^<object-id>$_BUCKET_IDcocok^<bucket-id>$
- Klik Buat untuk membuat pemicu build .
gcloud
Untuk membuat pemicu build yang memproses peristiwa build dengan jenis peristiwa tertentu di Cloud Storage:
- Buka jendela terminal.
Jalankan perintah
gclouduntuk membuat pemicu build di project Anda. Dalam contoh berikut, pemicu dikonfigurasi untuk merespons build dengan peristiwa Cloud Storage yang terkait dengan biner baru yang di-push ke bucket penyimpanan yang ada:gcloud builds triggers create pubsub \ --region=REGION \ --name=TRIGGER_NAME \ --repository=projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME \ --topic=projects/PROJECT_ID/topics/TOPIC_NAME \ --build-config=BUILD_CONFIG \ # or --inline-config=INLINE_BUILD_CONFIG --substitutions=\ '_EVENT_TYPE="$(body.message.attributes.eventType)",' \ '_BUCKET_ID="$(body.message.attributes.bucketId)",' \ '_OBJECT_ID="$(body.message.attributes.objectId)"' \ --subscription-filter='_EVENT_TYPE == "OBJECT_FINALIZE" && _OBJECT_ID.matches("<object-id>") && _BUCKET_ID.matches("<bucket-id>")' \ --tag=TAG_NAME # or --branch=BRANCH_NAME
Dengan:
- REGION adalah region untuk pemicu Anda.
- TRIGGER_NAME adalah nama pemicu Anda.
- PROJECT_ID adalah ID project Cloud Anda.
- CONNECTION_NAME adalah nama koneksi host Anda.
- REPO_NAME adalah nama repositori Anda.
- TOPIC_NAME adalah nama topik Pub/Sub yang telah Anda ikuti.
- BUILD_CONFIG adalah jalur ke file konfigurasi build Anda.
- INLINE_BUILD_CONFIG adalah jalur ke file konfigurasi build inline Anda.
- TAG_NAME adalah nama tag Anda jika Anda ingin menyetel pemicu untuk dibuat pada tag.
- BRANCH_NAME adalah nama cabang Anda jika Anda ingin menyetel pemicu untuk membangun di cabang.
Risiko yang terkait dengan pemicu yang tidak difilter
Jika Anda belum mengonfigurasi filter pada pemicu Pub/Sub, pemicu Anda dapat memanggil sejumlah build yang tidak terbatas jika pemicu Anda mengubah artefak atau objek yang secara tidak sengaja memublikasikan pesan baru ke topik yang sedang didengarkannya. Misalnya, pemicu Anda dapat memanggil build dalam jumlah tak terbatas jika pemicu Anda:
- Menuju topik
gcr. - Membuat gambar atau tag apa pun di
gcr. - Menunjuk ke topik
gcsuntuk objek tertentu di bucket Anda dan mengubah objek tersebut.
Jika mengalami loop tak terbatas, Anda dapat menghapus pemicu atau memperbaruinya agar mengarah ke topik terpisah untuk menghindari biaya tambahan untuk setiap build yang Anda panggil.
Langkah berikutnya
- Pelajari cara memulai build secara manual menggunakan perintah
gcloudatau Cloud Build API. - Pelajari cara membuat dan mengelola pemicu.
- Pelajari cara melihat hasil build.
- Pelajari cara memecahkan masalah error build.