Cloud Build dapat memberi tahu Anda tentang update build dengan mengirim notifikasi ke saluran yang diinginkan. Halaman ini menjelaskan cara mengonfigurasi notifikasi menggunakan notifikasi Masalah GitHub.
Sebelum memulai
-
Enable the Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager APIs.
- Instal Google Cloud CLI.
Mengonfigurasi notifikasi Masalah GitHub
Bagian berikut menjelaskan cara mengonfigurasi notifikasi Masalah GitHub secara manual menggunakan notifikasi Masalah GitHub. Jika Anda ingin mengotomatiskan konfigurasi, lihat Mengotomatiskan konfigurasi untuk notifikasi.
Untuk mengonfigurasi Masalah GitHub:
Buat GitHub Personal Access Token:
- Buka setelan GitHub untuk membuat token baru.
Pilih cakupan
repo
.Klik Buat token
Simpan token GitHub Anda di Secret Manager:
Buka halaman Secret Manager di konsol Google Cloud:
Klik Buat secret.
Masukkan nama untuk secret Anda.
Di bagian Nilai rahasia, tambahkan token GitHub Anda.
Untuk menyimpan secret, klik Buat secret.
Meskipun akun layanan Cloud Run Anda mungkin memiliki peran Editor untuk project Anda, peran Editor tidak memadai untuk mengakses secret Anda di Secret Manager. Anda harus memberi akun layanan Cloud Run Anda akses ke secret:
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
Catat akun layanan default Compute Engine Anda.
Buka halaman Secret Manager di konsol Google Cloud:
Klik nama secret yang berisi token GitHub Anda.
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.
Berikan izin akun layanan Cloud Run Anda 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 Edit akses.
Klik Add another role.
Tambahkan peran berikut:
- Storage Object Viewer
Klik Simpan.
Tulis file konfigurasi template untuk menjelaskan format yang harus digunakan Masalah GitHub yang dibuat:
Dalam contoh file konfigurasi template berikut, kolom
title
danbody
menggunakan variabel penggantian dari build:{ "title": "Build {{.Build.BuildTriggerId}}: {{.Build.Status}}", "body": "[{{.Build.ProjectId}}] {{.Build.BuildTriggerId}} status: **{{.Build.Status}}**\n\n[View Logs]({{.Build.LogUrl}})" }
Untuk melihat contohnya, lihat file konfigurasi template untuk notifikasi Masalah GitHub.
Kolom tambahan dapat ditetapkan dari parameter isi yang tersedia dari endpoint GitHub API untuk membuat masalah.
Tulis file konfigurasi notifikasi untuk mengonfigurasi notifikasi Masalah GitHub dan memfilter peristiwa build:
Dalam 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: GitHubIssuesNotifier metadata: name: example-githubissues-notifier spec: notification: filter: build.status == Build.Status.FAILURE template: type: golang uri: gs://bucket_name/template-file-name delivery: githubToken: secretRef: github-token githubRepo: myuser/myrepo secrets: - name: github-token value: projects/project-id/secrets/secret-name/versions/latest
Dengan keterangan:
githubToken
adalah variabel konfigurasi yang digunakan dalam contoh ini untuk mereferensikan token GitHub yang disimpan di Secret Manager. Nama variabel yang Anda tentukan di sini harus cocok dengan kolomname
di bagiansecrets
.bucket-name
adalah nama bucket Anda.template-file-name
adalah nama file template Anda.myuser/myrepo
adalah nama repo tempat masalah akan dibuat.project-id
adalah ID project Google Cloud Anda.secret-name
adalah nama secret yang berisi token GitHub Anda.
Untuk melihat contohnya, lihat file konfigurasi pemberitahuan untuk pemberitahuan Masalah GitHub.
Untuk 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 dan file template 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 untuk bucket, tunduk pada persyaratan penamaan.
gcloud storage buckets create gs://bucket-name/
Upload file konfigurasi pemberitahuan dan file template ke bucket Anda:
gcloud storage cp config-file-name gs://bucket-name/config-file-name 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 Anda.template-file-name
adalah nama file template Anda.
Deploy pemberitahuan ke Cloud Run:
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/githubissues:latest \ --no-allow-unauthenticated \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
Dengan keterangan:
service-name
adalah nama layanan Cloud Run tempat Anda men-deploy gambar.config-path
adalah jalur ke file konfigurasi notifikasi untuk notifikasi Masalah GitHub 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 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 tag gambar di atributimage
perintahgcloud run deploy
. Versi dan tag image sebelumnya dapat ditemukan di Artifact Registry.Berikan 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 Anda.Berikan izin
Invoker
Cloud Run ke 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 gambar.project-id
adalah ID project Google Cloud Anda.
Buat topik
cloud-builds
untuk menerima pesan update build untuk notifikasi 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 Anda berikan ke 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, masalah akan dibuat pada repo GitHub yang ditentukan 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 filter
untuk memfilter peristiwa build dalam file konfigurasi build menggunakan
kolom apa pun yang tercantum dalam resource
Build. Untuk menemukan sintaksis yang tepat yang terkait dengan kolom Anda, lihat file
cloudbuild.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 bervariasi. 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 filter
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 berdasarkan gambar
Untuk memfilter menurut image, tentukan nilai image Anda di kolom filter
menggunakan build.images
, dengan image-name
adalah nama lengkap
image Anda seperti yang tercantum di Artifact Registry seperti
us-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 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
.
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 penggantian
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 penggantian Anda.substitution-value
adalah nama nilai penggantian Anda.
Anda juga dapat memfilter berdasarkan 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 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 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 selanjutnya
- Pelajari notifikasi Cloud Build.
- Pelajari cara berlangganan notifikasi build.
- Pelajari cara menulis file konfigurasi build Cloud Build.