Cloud Build dapat memberi tahu Anda tentang update build dengan mengirimkan notifikasi ke saluran yang diinginkan, seperti Slack atau server SMTP. Halaman ini menjelaskan cara mengonfigurasi notifikasi menggunakan notifikasi SMTP.
Sebelum memulai
-
Aktifkan API Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager.
- Instal Google Cloud CLI.
Mengonfigurasi notifikasi email
Untuk mengirim notifikasi email, Anda memerlukan server SMTP yang berjalan dan akses ke akun di server tersebut, termasuk nama pengguna dan sandi akun yang akan digunakan untuk mengirim notifikasi. Anda dapat menggunakan server SMTP yang ada, tetapi
akan memerlukan akses ke nama server dan porta. Misalnya, nama server untuk
Gmail adalah smtp.gmail.com
dan port-nya adalah 587
. Pastikan kuota pengiriman server SMTP Anda dapat menangani volume email yang ingin dihasilkan.
Bagian berikut menjelaskan cara mengonfigurasi notifikasi email secara manual menggunakan notifikasi SMTP. Jika Anda ingin mengotomatiskan konfigurasi, lihat Mengotomatiskan konfigurasi untuk notifikasi.
Untuk mengonfigurasi notifikasi email:
Simpan sandi akun email pengirim di Secret Manager. Perhatikan bahwa untuk Gmail, Anda harus menggunakan sandi aplikasi, bukan sandi login akun.
Buka halaman Secret Manager di konsol Google Cloud:
Klik Create secret.
Masukkan nama untuk rahasia Anda.
Di bagian Nilai rahasia, tambahkan sandi akun email pengirim.
Untuk menyimpan secret, klik Create secret.
Meskipun akun layanan Cloud Run mungkin memiliki peran Editor untuk project Anda, peran Editor tidak cukup untuk mengakses secret Anda di Secret Manager. Anda harus memberi akun layanan Cloud Run akses ke secret Anda:
Buka halaman IAM di konsol Google Cloud:
Temukan akun layanan default Compute Engine yang terkait dengan project Anda:
Akun layanan default Compute Engine Anda akan terlihat seperti berikut:
project-number-compute@developer.gserviceaccount.com
Perhatikan akun layanan default Compute Engine Anda.
Buka halaman Secret Manager di konsol Google Cloud:
Klik nama secret yang memuat informasi rahasia untuk sandi akun email pengirim.
Di tab Izin, klik Tambahkan anggota.
Tambahkan akun layanan default Compute Engine yang terkait dengan project Anda sebagai anggota.
Pilih izin Secret Manager Secret Accessor sebagai peran.
Klik Simpan.
Beri akun layanan Cloud Run Anda izin untuk membaca dari bucket Cloud Storage:
Buka halaman IAM di konsol Google Cloud:
Temukan akun layanan default Compute Engine yang terkait dengan project Anda:
Akun layanan default Compute Engine Anda akan terlihat seperti berikut:
project-number-compute@developer.gserviceaccount.com
Klik ikon pensil di baris yang berisi akun layanan default Compute Engine Anda. Anda akan melihat tab Akses edit.
Klik Add another role.
Tambahkan peran berikut:
- Storage Object Viewer
Klik Simpan.
Tulis file konfigurasi notifier untuk mengonfigurasi notifikasi SMTP dan filter pada peristiwa build:
Pada contoh file konfigurasi notifikasi berikut, kolom
filter
menggunakan Common Expression Language dengan variabel yang tersedia,build
, untuk memfilter peristiwa build dengan statusSUCCESS
:apiVersion: cloud-build-notifiers/v1 kind: SMTPNotifier metadata: name: example-smtp-notifier spec: notification: filter: build.status == Build.Status.SUCCESS params: buildStatus: $(build.status) delivery: server: server-host-name port: "port" sender: sender-email from: from-email recipients: - recipient-email # optional: more emails here password: secretRef: smtp-password template: type: golang uri: gs://example-gcs-bucket/smtp.html secrets: - name: smtp-password value: projects/project-id/secrets/secret-name/versions/latest
Dengan keterangan:
buildStatus
adalah parameter yang ditentukan pengguna. Parameter ini menggunakan nilai $(build.status), status build.server-host-name
adalah alamat server SMTP Anda.port
adalah port yang akan menangani permintaan SMTP. Nilai ini harus ditentukan sebagai string.sender-email
adalah alamat email akun pengirim yang dilihat oleh server-host-name yang ditentukan.from-email
adalah alamat email yang dilihat oleh penerima.recipient-email
adalah daftar dari satu atau beberapa alamat email untuk menerima pesan dari pengirim.smtp-password
adalah variabel konfigurasi yang digunakan dalam contoh ini untuk mereferensikan sandi akun email pengirim yang disimpan di Secret Manager. Nama variabel yang Anda tentukan di sini harus cocok dengan kolomname
di bawahsecrets
.project-id
adalah ID project Google Cloud Anda.secret-name
adalah nama rahasia Anda yang berisi sandi untuk akun email pengirim.Kolom
uri
merujuk ke filesmtp.html
. File ini merujuk ke template HTML yang dihosting di Cloud Storage dan mewakili email notifikasi Anda.
Untuk melihat contohnya, lihat file konfigurasi notifikasi untuk notifikasi SMTP.
Untuk kolom tambahan yang dapat digunakan untuk memfilter, lihat resource Build. Untuk mengetahui contoh pemfilteran tambahan, lihat Menggunakan CEL untuk memfilter peristiwa build.
Upload file konfigurasi notifier ke bucket Cloud Storage:
Jika Anda tidak memiliki bucket Cloud Storage, jalankan perintah berikut untuk membuat bucket, dengan
bucket-name
sebagai nama yang akan Anda berikan untuk bucket, sesuai dengan persyaratan penamaan.gsutil mb gs://bucket-name/
Upload file konfigurasi notifier ke bucket Anda:
gsutil cp config-file-name gs://bucket-name/config-file-name
Dengan keterangan:
bucket-name
adalah nama bucket Anda.config-file-name
adalah nama file konfigurasi Anda.
Deploy notifikasi Anda ke Cloud Run:
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/smtp:latest \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
Dengan keterangan:
service-name
adalah nama layanan Cloud Run tempat Anda men-deploy image.config-path
adalah jalur ke file konfigurasi notifikasi untuk notifikasi SMTP Anda,gs://bucket-name/config-file-name
.project-id
adalah ID project Google Cloud Anda.
Perintah
gcloud run deploy
mengambil versi terbaru image yang dihosting dari Artifact Registry yang dimiliki Cloud Build. Cloud Build mendukung image notifier selama sembilan bulan. Setelah sembilan bulan, Cloud Build akan menghapus versi image. Jika ingin menggunakan versi image sebelumnya, Anda harus menentukan versi semantik lengkap tag gambar dalam atributimage
perintahgcloud run deploy
. Versi dan tag image sebelumnya dapat ditemukan di Artifact Registry.Beri izin Pub/Sub untuk membuat token autentikasi di project Anda:
gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Dengan keterangan:
project-id
adalah ID project Google Cloud Anda.project-number
adalah 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-invoker
atau menggunakan nama yang unik dalam project Google Cloud.Berikan izin
Invoker
Cloud Run untuk akun layanancloud-run-pubsub-invoker
:gcloud run services add-iam-policy-binding service-name \ --member=serviceAccount:cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com \ --role=roles/run.invoker
Dengan keterangan:
service-name
adalah nama layanan Cloud Run tempat Anda men-deploy image.project-id
adalah ID project Google Cloud Anda.
Buat topik
cloud-builds
untuk menerima pesan update build untuk notifier Anda:gcloud pubsub topics create cloud-builds
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.com
Dengan keterangan:
subscriber-id
adalah nama yang ingin diberikan untuk langganan Anda.service-url
adalah URL yang dihasilkan Cloud Run untuk layanan baru Anda.project-id
adalah ID project Google Cloud Anda.
Notifikasi untuk project Cloud Build Anda sudah disiapkan. Saat berikutnya
Anda memanggil build, recipients
yang ditentukan akan menerima email dengan
notifikasi 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 gambar, atau nilai substitusi. Anda dapat menggunakan string filter
untuk memfilter peristiwa build dalam file konfigurasi build menggunakan kolom yang tercantum dalam resource Build. Untuk menemukan sintaksis yang terkait dengan kolom Anda, lihat
file
cloudbuild.proto
.
Pemfilteran menurut ID pemicu
Untuk memfilter menurut ID pemicu, tentukan nilai ID pemicu 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 berdasarkan 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 beragam 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 difilter, baca bagian 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
. Pada contoh berikut, kolom filter
memfilter peristiwa membuat
peristiwa 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 berdasarkan image, tentukan nilai image Anda di kolom filter
menggunakan build.images
. image-name
adalah nama lengkap
image Anda seperti yang tercantum dalam Artifact Registry, seperti
us-east1-docker.pkg.dev/my-project/docker-repo/image-one
:
filter: image-name in build.images
Pada 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
: build.create_time
, build.start_time
, atau build.finish_time
.
Pada 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 build berdasarkan perbandingan waktu. Pada 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.
Pada 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")
Pemfilteran berdasarkan substitusi
Anda dapat memfilter berdasarkan substitusi dengan menentukan variabel substitusi di kolom filter
menggunakan build.substitutions
. Dalam contoh berikut, kolom filter
mencantumkan build yang berisi variabel substitusi substitution-variable dan memeriksa apakah substitution-variable cocok dengan substitution-value yang ditentukan:
filter: build.substitutions[substitution-variable] == substitution-value
Dengan keterangan:
substitution-variable
adalah nama variabel substitusi Anda.substitution-value
adalah nama nilai substitusi Anda.
Anda juga dapat memfilter menurut nilai variabel substitusi 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. Pada contoh di bawah, kolom filter
memfilter build dengan status FAILURE atau TIMEOUT dan yang juga memiliki variabel substitusi 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 substitusi default, lihat Menggunakan substitusi default.
Langkah selanjutnya
- Pelajari pemberi tahu Cloud Build.
- Pelajari cara berlangganan untuk membuat notifikasi.
- Pelajari cara menulis file konfigurasi build Cloud Build.