Cloud Build dapat memberi tahu Anda tentang update build dengan mengirimkan notifikasi ke saluran yang dipilih, seperti Slack atau server SMTP Anda. Halaman ini menjelaskan cara mengonfigurasi notifikasi menggunakan HTTP notifier.
Sebelum memulai
-
Enable the Cloud Build, Cloud Run, and Pub/Sub APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- Instal Google Cloud CLI.
Mengonfigurasi notifikasi HTTP
Bagian berikut menjelaskan cara mengonfigurasi notifikasi HTTP secara manual menggunakan notifikasi HTTP untuk mengirim permintaan POST ke URL penerima tertentu. Jika Anda ingin mengotomatiskan konfigurasi, lihat Mengotomatiskan konfigurasi untuk notifikasi.
Untuk mengonfigurasi notifikasi HTTP:
Untuk menggunakan HTTP notifier guna mengirim permintaan POST ke URL penerima tertentu:
Beri akun layanan Cloud Run Anda izin untuk membaca dari bucket Cloud Storage:
Buka halaman IAM di konsol Google Cloud :
Cari akun layanan default Compute Engine yang terkait dengan project Anda:
Akun layanan default Compute Engine Anda akan terlihat mirip dengan berikut ini:
project-number-compute@developer.gserviceaccount.comKlik ikon pensil di baris yang berisi akun layanan default Compute Engine Anda. Anda akan melihat tab Edit akses.
Klik Add another role.
Tambahkan peran berikut:
- Storage Object Viewer
Klik Simpan.
Tulis file konfigurasi notifikasi untuk mengonfigurasi notifikasi HTTP dan memfilter peristiwa build:
Dalam file konfigurasi notifikasi contoh berikut, kolom
filtermenggunakan Common Expression Language dengan variabel yang tersedia,build, untuk memfilter peristiwa build dengan statusSUCCESS:apiVersion: cloud-build-notifiers/v1 kind: HTTPNotifier metadata: name: example-http-notifier spec: notification: filter: build.status == Build.Status.SUCCESS params: buildStatus: $(build.status) delivery: # The `http(s)://` protocol prefix is required. url: url template: type: golang uri: gs://bucket_name/http.jsonDengan:
buildStatusadalah parameter yang ditentukan pengguna. Parameter ini mengambil nilai $(build.status), status build.urladalah variabel konfigurasi yang digunakan dalam contoh ini untuk menentukan URL untuk permintaan Anda.bucket-nameadalah nama bucket Anda.- url adalah URL yang ingin Anda tentukan sebagai server penerima.
Kolom
urimerujuk pada filehttp.json. File ini merujuk ke template JSON yang dihosting di Cloud Storage dan merepresentasikan payload json ke endpoint webhook.Untuk melihat contoh file template, lihat file
http.jsondi repositori cloud-build-notifiers.
Untuk melihat contohnya, lihat file konfigurasi notifikasi untuk notifikasi HTTP.
Untuk mengetahui kolom tambahan yang dapat Anda gunakan untuk memfilter, lihat resource Build. Untuk contoh pemfilteran tambahan, lihat Menggunakan CEL untuk memfilter peristiwa build.
Upload file konfigurasi notifikasi Anda ke bucket Cloud Storage:
Jika Anda tidak memiliki bucket Cloud Storage, jalankan perintah berikut untuk membuat bucket, dengan bucket-name adalah nama yang ingin Anda berikan pada bucket, sesuai dengan persyaratan penamaan.
gcloud storage buckets create gs://bucket-name/Upload file konfigurasi notifikasi ke bucket Anda:
gcloud storage cp config-file-name gs://bucket-name/config-file-nameDengan:
- bucket-name adalah nama bucket Anda.
- config-file-name adalah nama file konfigurasi notifikasi Anda.
Men-deploy notifikasi ke Cloud Run:
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/http:latest \ --no-allow-unauthenticated \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-idDengan:
service-nameadalah nama layanan Cloud Run tempat Anda men-deploy image.config-pathadalah jalur ke file konfigurasi notifikasi untuk notifikasi HTTP Anda,gs://bucket-name/config-file-name.project-idadalah ID project Google Cloud Anda.
Perintah
gcloud run deploymenarik image yang dihosting versi terbaru dari Artifact Registry milik Cloud Build. Cloud Build mendukung image notifikasi selama sembilan bulan. Setelah sembilan bulan, Cloud Build akan menghapus versi image. Jika ingin menggunakan versi gambar sebelumnya, Anda harus menentukan versi semantik lengkap dari tag gambar di atributimageperintahgcloud run deploy. Versi dan tag image sebelumnya dapat ditemukan di Artifact Registry.Beri Pub/Sub izin untuk membuat token autentikasi di project Google Cloud Anda:
gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreatorDengan:
project-idadalah ID project Google Cloud Anda.project-numberadalah nomor project Google Cloud Anda.
Buat akun layanan untuk merepresentasikan identitas langganan Pub/Sub Anda:
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"Anda dapat menggunakan
cloud-run-pubsub-invokeratau menggunakan nama yang unik dalam project Google Cloud Anda.Beri akun layanan
cloud-run-pubsub-invokerizin Cloud RunInvoker:gcloud run services add-iam-policy-binding service-name \ --member=serviceAccount:cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com \ --role=roles/run.invokerDengan:
service-nameadalah nama layanan Cloud Run tempat Anda men-deploy image.project-idadalah ID project Google Cloud Anda.
Buat topik
cloud-buildsuntuk menerima pesan update build untuk notifikasi Anda:gcloud pubsub topics create cloud-buildsAnda juga dapat menentukan nama topik kustom dalam file konfigurasi build sehingga pesan dikirim ke topik kustom tersebut. Dalam hal ini, Anda akan membuat topik dengan nama topik kustom yang sama:
gcloud pubsub topics create topic-nameUntuk mengetahui informasi selengkapnya, lihat Topik Pub/Sub untuk notifikasi build.
Buat pelanggan push Pub/Sub untuk notifikasi Anda:
gcloud pubsub subscriptions create subscriber-id \ --topic=cloud-builds \ --push-endpoint=service-url \ --push-auth-service-account=cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.comDengan:
subscriber-idadalah nama yang ingin Anda berikan pada langganan.service-urladalah URL yang dibuat Cloud Run untuk layanan baru Anda.project-idadalah ID project Google Cloud Anda.
Notifikasi untuk project Cloud Build Anda kini telah disiapkan. Pada waktu berikutnya Anda memanggil build, server HTTP penerima di URL yang diberikan akan menerima payload JSON yang cocok dengan resource Build jika build cocok dengan filter yang telah Anda konfigurasi.
Menggunakan CEL untuk memfilter peristiwa build
Cloud Build menggunakan CEL dengan variabel, build, pada kolom yang tercantum dalam resource Build untuk mengakses kolom yang terkait dengan peristiwa build Anda, seperti ID pemicu, daftar image, atau nilai penggantian. Anda dapat menggunakan string filter
untuk memfilter peristiwa build dalam file konfigurasi build menggunakan
kolom apa pun yang tercantum dalam resource Build. Untuk menemukan sintaksis persis yang terkait dengan kolom Anda, lihat file
cloudbuild.proto.
Memfilter menurut ID pemicu
Untuk memfilter menurut ID pemicu, tentukan nilai ID pemicu Anda di kolom filter
menggunakan build.build_trigger_id, dengan trigger-id adalah
ID pemicu Anda sebagai string:
filter: build.build_trigger_id == trigger-id
Memfilter menurut status
Untuk memfilter menurut status, tentukan status build yang ingin Anda filter
di kolom filter menggunakan build.status.
Contoh berikut menunjukkan cara memfilter peristiwa build dengan status SUCCESS menggunakan kolom filter:
filter: build.status == Build.Status.SUCCESS
Anda juga dapat memfilter build dengan berbagai status. Contoh berikut menunjukkan
cara memfilter peristiwa build yang memiliki status SUCCESS, FAILURE, atau
TIMEOUT menggunakan kolom filter:
filter: build.status in [Build.Status.SUCCESS, Build.Status.FAILURE, Build.Status.TIMEOUT]
Untuk melihat nilai status tambahan yang dapat Anda gunakan untuk memfilter, lihat Status di bagian Referensi resource build.
Memfilter menurut tag
Untuk memfilter menurut tag, tentukan nilai tag Anda di kolom filter
menggunakan build.tags, dengan tag-name sebagai
nama tag Anda:
filter: tag-name in build.tags
Anda dapat memfilter berdasarkan jumlah tag yang ditentukan dalam peristiwa build menggunakan size. Dalam contoh berikut, kolom filter memfilter
peristiwa build yang memiliki tepat dua tag yang ditentukan dengan satu tag yang ditentukan sebagai
v1:
filter: size(build.tags) == 2 && "v1" in build.tags
Memfilter menurut gambar
Untuk memfilter menurut gambar, tentukan nilai gambar Anda di kolom filter
menggunakan build.images, dengan image-name adalah nama lengkap
gambar Anda seperti yang tercantum di Artifact Registry, misalnya
us-east1-docker.pkg.dev/my-project/docker-repo/image-one:
filter: image-name in build.images
Dalam contoh berikut, filter memfilter peristiwa build yang memiliki
us-east1-docker.pkg.dev/my-project/docker-repo/image-one atau
us-east1-docker.pkg.dev/my-project/docker-repo/image-two yang ditentukan sebagai
nama gambar:
filter: "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images || "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images
Memfilter menurut waktu
Anda dapat memfilter peristiwa build berdasarkan waktu pembuatan, waktu mulai, atau
waktu selesai build dengan menentukan salah satu opsi berikut di kolom filter
Anda: build.create_time, build.start_time, atau build.finish_time.
Dalam contoh berikut, kolom filter menggunakan timestamp untuk memfilter
peristiwa build dengan waktu permintaan untuk membuat build pada 20 Juli 2020 pukul 06.00:
filter: build.create_time == timestamp("2020-07-20:T06:00:00Z")
Anda juga dapat memfilter peristiwa pembuatan berdasarkan perbandingan waktu. Dalam contoh berikut,
kolom filter menggunakan timestamp untuk memfilter peristiwa build dengan waktu mulai
antara 20 Juli 2020 pukul 06.00 dan 30 Juli 2020 pukul 06.00.
filter: timestamp("2020-07-20:T06:00:00Z") >= build.start_time && build.start_time <= timestamp("2020-07-30:T06:00:00Z")
Untuk mempelajari lebih lanjut cara zona waktu dinyatakan dalam CEL, lihat definisi bahasa untuk zona waktu.
Untuk memfilter menurut durasi build, Anda dapat menggunakan duration untuk membandingkan stempel waktu.
Dalam contoh berikut, kolom filter menggunakan duration untuk memfilter
peristiwa build dengan build yang berjalan setidaknya selama lima menit:
filter: build.finish_time - build.start_time >= duration("5m")
Memfilter berdasarkan substitusi
Anda dapat memfilter menurut substitusi dengan menentukan variabel substitusi
di kolom filter menggunakan build.substitutions. Dalam contoh berikut,
kolom filter mencantumkan build yang berisi variabel penggantian
substitution-variable dan memeriksa apakah substitution-variable cocok dengan substitution-value yang ditentukan:
filter: build.substitutions[substitution-variable] == substitution-value
Dengan:
substitution-variableadalah nama variabel pengganti Anda.substitution-valueadalah nama nilai pengganti Anda.
Anda juga dapat memfilter menurut nilai variabel penggantian default. Dalam contoh
berikut, kolom filter mencantumkan build yang memiliki nama cabang master
dan build yang memiliki nama repositori github.com/user/my-example-repo. Variabel substitusi default BRANCH_NAME dan REPO_NAME diteruskan sebagai kunci ke build.substitutions:
filter: build.substitutions["BRANCH_NAME"] == "master" && build.substitutions["REPO_NAME"] == "github.com/user/my-example-repo"
Jika ingin memfilter string menggunakan ekspresi reguler, Anda dapat menggunakan
fungsi matches bawaan. Dalam contoh di bawah, kolom filter memfilter
build dengan status GAGAL atau WAKTU HABIS dan yang juga memiliki variabel
penggantian build TAG_NAME dengan nilai yang cocok dengan ekspresi reguler
v{DIGIT}.{DIGIT}.{3 DIGITS}).
filter: build.status in [Build.Status.FAILURE, Build.Status.TIMEOUT] && build.substitutions["TAG_NAME"].matches("^v\\d{1}\\.\\d{1}\\.\\d{3}$")
Untuk melihat daftar nilai penggantian default, lihat Menggunakan penggantian default.
Langkah berikutnya
- Pelajari notifikasi Cloud Build.
- Pelajari cara berlangganan notifikasi build.
- Pelajari cara menulis file konfigurasi build Cloud Build.