Mengonfigurasi notifikasi HTTP (original) (raw)

Cloud Build dapat memberi tahu Anda tentang update build dengan mengirim notifikasi ke saluran yang dipilih, seperti Slack atau server SMTP Anda. Halaman ini menjelaskan cara mengonfigurasi notifikasi menggunakan notifikasi HTTP.

Sebelum memulai

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 notifikasi HTTP guna mengirim permintaan POST ke URL penerima tertentu:

  1. Berikan izin akun layanan Cloud Run Anda untuk membaca dari bucket Cloud Storage:
    1. Buka halaman IAM di Google Cloud konsol:
      Buka halaman IAM
    2. 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  
    1. Klik ikon pensil di baris yang berisi akun layanan default Compute Engine Anda. Anda akan melihat tab Edit akses.
    2. Klik Add another role.
    3. Tambahkan peran berikut:
      • Storage Object Viewer
    4. Klik Simpan.
  2. Tulis file konfigurasi notifikasi untuk mengonfigurasi notifikasi HTTP dan memfilter peristiwa build:
    Dalam contoh file konfigurasi notifikasi berikut, kolom filter menggunakan Common Expression Languagedengan variabel yang tersedia, build, untuk memfilter peristiwa build dengan status SUCCESS:
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.json  

Dengan keterangan:

  1. Upload file konfigurasi notifikasi ke bucket Cloud Storage:
    1. Jika Anda tidak memiliki bucket Cloud Storage, jalankan perintah berikut untuk membuat bucket, dengan bucket-name adalah nama yang ingin Anda berikan untuk bucket, tunduk pada persyaratan penamaan.
    gcloud storage buckets create gs://bucket-name/  
    1. Upload file konfigurasi notifikasi ke bucket Anda:
    gcloud storage 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 notifikasi Anda.

  2. Deploy pemberitahuan ke Cloud Run:
 gcloud run deploy service-name \  
   --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/slack:latest \  
   --no-allow-unauthenticated \  
   --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id  

Dengan keterangan:

  1. Berikan izin Pub/Sub 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.serviceAccountTokenCreator  

Dengan keterangan:

  1. 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 Anda. 7. Berikan izin Invoker Cloud Run ke akun layanan cloud-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:

  1. Buat topik cloud-builds untuk menerima pesan update build untuk notifikasi Anda:
gcloud pubsub topics create cloud-builds  

Anda juga dapat menentukan nama topik kustom dalam file konfigurasi build sehingga pesan dikirim ke topik kustom. Dalam hal ini, Anda akan membuat topik dengan nama topik kustom yang sama:

gcloud pubsub topics create topic-name  

Untuk mengetahui informasi selengkapnya, lihat Topik Pub/Sub untuk notifikasi build. 9. 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:

Notifikasi untuk project Cloud Build Anda kini telah disiapkan. Saat 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 gambar, atau nilai penggantian. Anda dapat menggunakan string filteruntuk memfilter peristiwa build dalam file konfigurasi build menggunakan kolom apa pun yang tercantum dalam resourceBuild. Untuk menemukan sintaksis yang tepat yang terkait dengan kolom Anda, lihat filecloudbuild.proto.

Memfilter 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 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 status yang berbeda. 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 filter, 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 adalah 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, filter kolom filtermembuat peristiwa yang memiliki tepat dua tag yang ditentukan dengan satu tag yang ditentukan sebagaiv1:

filter: size(build.tags) == 2 && "v1" in build.tags

Memfilter berdasarkan gambar

Untuk memfilter menurut image, tentukan nilai image Anda di kolom filtermenggunakan build.images, dengan image-name adalah nama lengkap image Anda seperti yang tercantum di Artifact Registry sepertius-east1-docker.pkg.dev/my-project/docker-repo/image-one:

filter: image-name in build.images

Pada contoh berikut, filter filter pada peristiwa build yang memilikius-east1-docker.pkg.dev/my-project/docker-repo/image-one atauus-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.

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 build 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 berdasarkan 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 penggantian

Anda dapat memfilter menurut penggantian dengan menentukan variabel penggantian di kolom filter menggunakan build.substitutions. Dalam contoh berikut, kolom filter mencantumkan build yang berisi variabel penggantiansubstitution-variable dan memeriksa apakah substitution-variable cocok dengan substitution-value yang ditentukan:

filter: build.substitutions[substitution-variable] == substitution-value

Dengan keterangan:

Anda juga dapat memfilter berdasarkan nilai variabel penggantian default. Dalam contoh berikut, kolom filter mencantumkan build yang memiliki nama cabang masterdan build yang memiliki nama repositori github.com/user/my-example-repo. Variabel penggantian 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 juga memiliki variabel penggantian build TAG_NAME dengan nilai yang cocok dengan ekspresi regulerv{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