Mengonfigurasi notifikasi Google Chat

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 notifikasi Google Chat.

Sebelum memulai

  • Enable the Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager APIs.

    Enable the APIs

Mengonfigurasi notifikasi Google Chat

Bagian berikut menjelaskan cara mengonfigurasi notifikasi Google Chat secara manual menggunakan notifikasi Google Chat. Jika Anda ingin mengotomatiskan konfigurasi, lihat Mengotomatiskan konfigurasi untuk notifikasi.

Untuk mengonfigurasi notifikasi Google Chat:

  1. Membuat ruang di Google Chat.

  2. Di dalam ruang yang dibuat, buat webhook masuk untuk memposting pesan dari Cloud Build ke Google Chat. URL Anda akan terlihat seperti berikut:

    https://chat.googleapis.com/v1/spaces/...
    
  3. Simpan URL webhook masuk Anda di Secret Manager:

    1. Buka halaman Secret Manager di konsol Google Cloud :

      Buka halaman Secret Manager

    2. Klik Buat secret.

    3. Masukkan nama untuk rahasia Anda.

    4. Di bagian Secret value, tambahkan URL webhook masuk untuk ruang Google Chat Anda.

    5. Untuk menyimpan secret, klik Buat secret.

  4. Meskipun akun layanan Cloud Run Anda mungkin memiliki peran Editor untuk project Anda, peran Editor tidak cukup untuk mengakses secret Anda di Secret Manager. Untuk memberi akun layanan Cloud Run Anda akses ke secret Anda, lakukan hal berikut:

    1. Buka halaman IAM di Google Cloud konsol:

      Buka halaman IAM

    2. 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.com
      

      Catat akun layanan default Compute Engine Anda.

    3. Buka halaman Secret Manager di konsol Google Cloud :

      Buka halaman Secret Manager

    4. Klik nama secret yang berisi secret untuk webhook Google Chat Anda.

    5. Di tab Izin, klik Tambahkan anggota.

    6. Tambahkan akun layanan default Compute Engine yang terkait dengan project Anda sebagai anggota.

    7. Pilih izin Secret Manager Secret Accessor sebagai peran.

    8. Klik Simpan.

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

    1. Buka halaman IAM di Google Cloud konsol:

      Buka halaman IAM

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

    4. Klik Add another role.

    5. Tambahkan peran berikut:

      • Storage Object Viewer
    6. Klik Simpan.

  6. Tulis file konfigurasi notifikasi untuk mengonfigurasi notifikasi Google Chat dan memfilter peristiwa build:

    Dalam file konfigurasi notifikasi contoh 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: GoogleChatNotifier
    metadata:
      name: example-googlechat-notifier
    spec:
      notification:
        filter: build.status == Build.Status.SUCCESS
        delivery:
          webhookUrl:
            secretRef: webhook-url
      secrets:
      - name: webhook-url
        value: projects/project-id/secrets/secret-name/versions/latest
    

    Dengan:

    • webhook-url adalah variabel konfigurasi yang digunakan dalam contoh ini untuk mereferensikan jalur URL webhook Google Chat yang disimpan di Secret Manager. Nama variabel yang Anda tentukan di sini harus cocok dengan kolom name di bagian secrets.
    • project-id adalah ID project Google Cloud Anda.
    • secret-name adalah nama rahasia Anda yang berisi URL webhook Google Chat Anda.

    Untuk melihat contohnya, lihat file konfigurasi notifikasi untuk notifikasi Google Chat.

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

  7. Upload file konfigurasi notifikasi Anda 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 pada bucket, sesuai dengan persyaratan penamaan.

      gcloud storage buckets create gs://bucket-name/
      
    2. Upload file konfigurasi notifikasi ke bucket Anda:

      gcloud storage cp config-file-name gs://bucket-name/config-file-name
      

      Dengan:

      • bucket-name adalah nama bucket Anda.
      • config-file-name adalah nama file konfigurasi Anda.
  8. Men-deploy notifikasi 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:

    • service-name adalah nama layanan Cloud Run tempat Anda men-deploy image.
    • config-path adalah jalur ke file konfigurasi notifikasi untuk notifikasi Slack Anda, gs://bucket-name/config-file-name.
    • project-id adalah ID project Google Cloud Anda.

    Perintah gcloud run deploy menarik 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 atribut image perintah gcloud run deploy. Versi dan tag image sebelumnya dapat ditemukan di Artifact Registry.

  9. 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.serviceAccountTokenCreator
    

    Dengan:

    • project-id adalah ID project Google Cloud Anda.
    • project-number adalah nomor project Google Cloud Anda.
  10. 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.

  11. Beri akun layanan cloud-run-pubsub-invoker izin Cloud Run 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:

    • service-name adalah nama layanan Cloud Run tempat Anda men-deploy image.

    • project-id adalah ID project Google Cloud Anda.

  12. 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 tersebut. 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.

  13. 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:

    • subscriber-id adalah nama yang ingin Anda berikan pada langganan.
    • service-url adalah URL yang dibuat Cloud Run untuk layanan baru Anda.
    • project-id adalah ID project Google Cloud Anda.

Notifikasi untuk project Cloud Build Anda kini telah disiapkan. Saat berikutnya Anda memanggil build, Anda akan menerima notifikasi di Google Chat 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 menurut 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-variable adalah nama variabel pengganti Anda.
  • substitution-value adalah 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. Pada 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