Mengonfigurasi notifikasi HTTP

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 pemberitahu HTTP.

Sebelum memulai

  • Enable the Cloud Build, Cloud Run, and Pub/Sub APIs.

    Enable the APIs

Mengonfigurasi notifikasi HTTP

Bagian berikut menjelaskan cara mengonfigurasi notifikasi HTTP secara manual menggunakan pemberitahu 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 pemberi tahu HTTP guna mengirim permintaan POST ke URL penerima tertentu:

  1. Beri akun layanan Cloud Run Anda izin untuk membaca dari bucket Cloud Storage:

    1. Buka halaman IAM di konsol Google Cloud:

      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
      
    3. Klik ikon pensil di baris yang berisi akun layanan default Compute Engine Anda. Anda akan melihat tab Akses edit.

    4. Klik Add another role.

    5. Tambahkan peran berikut:

      • Storage Object Viewer
    6. Klik Simpan.

  2. Tulis file konfigurasi notifier untuk mengonfigurasi notifier HTTP dan memfilter peristiwa build:

    Pada contoh file konfigurasi notifikasi berikut, kolom filter menggunakan Common Expression Language dengan 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://example-gcs-bucket/http.json
    

    Dengan keterangan:

    • buildStatus adalah parameter yang ditentukan pengguna. Parameter ini menggunakan nilai $(build.status), status build.
    • url adalah variabel konfigurasi yang digunakan dalam contoh ini untuk menentukan URL untuk permintaan Anda.
    • url adalah URL yang ingin Anda tentukan sebagai server penerima.
    • Kolom uri merujuk ke file http.json. File ini merujuk pada template JSON yang dihosting di Cloud Storage dan mewakili payload JSON ke endpoint webhook.

      Untuk melihat contoh file template, lihat file http.json di repositori cloud-build-notifiers.

    Untuk melihat contohnya, lihat file konfigurasi notifikasi untuk notifikasi HTTP.

    Untuk kolom tambahan yang dapat digunakan untuk memfilter, lihat resource Build. Untuk contoh pemfilteran tambahan, lihat Menggunakan CEL untuk memfilter peristiwa build.

  3. Upload file konfigurasi notifier ke bucket Cloud Storage:

    1. Jika Anda tidak memiliki bucket Cloud Storage, jalankan perintah berikut untuk membuat bucket, dengan bucket-name sebagai nama yang ingin Anda berikan untuk bucket, sesuai dengan persyaratan penamaan.

      gsutil mb gs://bucket-name/
      
    2. 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 notifikasi Anda.
  4. Deploy notifikasi Anda ke Cloud Run:

     gcloud run deploy service-name \
       --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/http: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 untuk notifikasi HTTP 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 atribut image perintah gcloud run deploy. Versi dan tag image sebelumnya dapat ditemukan di Artifact Registry.

  5. 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.
  6. 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.

  7. Berikan izin Invoker Cloud Run untuk 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:

    • service-name adalah nama layanan Cloud Run tempat Anda men-deploy image.
    • project-id adalah ID project Google Cloud Anda.
  8. Buat topik cloud-builds untuk menerima pesan update build untuk notifier Anda:

    gcloud pubsub topics create cloud-builds
    
  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:

    • 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, 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 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