Continuous delivery bergaya GitOps dengan Cloud Build


Halaman ini menjelaskan cara membuat pipeline continuous integration dan continuous deployment (CI/CD) di Google Cloud hanya menggunakan produk yang dihosting dan metodologi GitOps yang populer.

Engineer Google telah menyimpan file konfigurasi dan deployment di repositori kode sumber utama kami selama bertahun-tahun. Metodologi ini dijelaskan dalam buku Site Reliability Engineering, Chapter 8 (Beyer dkk., 2016), dan telah ditunjukkan oleh Kelsey Hightower selama presentasi utama Google Cloud Next '17.

Bagian penting dari GitOps adalah ide tentang "environments-as-code": mendeskripsikan deployment secara deklaratif menggunakan file (misalnya, manifes Kubernetes) yang disimpan di repositori Git.

Dalam tutorial ini, Anda akan membuat pipeline CI/CD yang otomatis membangun image container dari kode yang di-commit, menyimpan image di Artifact Registry, dan memperbarui manifes Kubernetes di file repositori Git, serta men-deploy aplikasi ke Google Kubernetes Engine (GKE) menggunakan manifes tersebut.

Arsitektur pipeline CI/CD

Tutorial ini menggunakan dua repositori Git:

  • repositori aplikasi: berisi kode sumber dari aplikasi itu sendiri
  • repositori env: berisi manifes untuk Deployment Kubernetes

Saat Anda mengirim perubahan ke repositori app, pipeline Cloud Build akan menjalankan pengujian, mem-build image container, dan mengirimnya ke Artifact Registry. Setelah mengirim image, Cloud Build akan memperbarui manifes Deployment dan mengirimkannya ke repositori env. Tindakan ini memicu pipeline Cloud Build lain yang menerapkan manifes ke cluster GKE dan, jika berhasil, menyimpan manifes di cabang env lain.

Kami memisahkan repositori app dan env karena keduanya memiliki siklus proses dan penggunaan yang berbeda. Pengguna utama repositori aplikasi adalah manusia dan repositori ini dikhususkan untuk aplikasi tertentu. Pengguna utama repositori env adalah sistem otomatis (seperti Cloud Build), dan repositori ini mungkin digunakan bersama oleh beberapa aplikasi. Repositori env dapat memiliki beberapa cabang yang masing-masing dipetakan ke lingkungan tertentu (Anda hanya menggunakan produksi dalam tutorial ini) dan mereferensikan image container tertentu, sedangkan repositori aplikasi tidak demikian.

Setelah menyelesaikan tutorial ini, Anda memiliki sistem tempat Anda dapat dengan mudah:

  • Membedakan antara deployment yang gagal dan berhasil dengan melihat histori Cloud Build,
  • Mengakses manifes yang saat ini digunakan dengan melihat cabang production dari repositori env,
  • Melakukan rollback ke versi sebelumnya dengan mengeksekusi kembali build Cloud Build yang sesuai.

Alur pipeline CI/CD

Tentang tutorial ini

Tutorial ini menggunakan Cloud Source Repositories untuk menghosting repositori Git, tetapi Anda dapat mendapatkan hasil yang sama dengan produk pihak ketiga lainnya seperti GitHub, Bitbucket, atau GitLab.

Pipeline ini tidak menerapkan mekanisme validasi sebelum deployment. Jika menggunakan GitHub, Bitbucket, atau GitLab, Anda dapat mengubah pipeline untuk menggunakan Permintaan Pull untuk tujuan ini.

Meskipun kami merekomendasikan Spinnaker kepada tim yang ingin menerapkan pola deployment tingkat lanjut (biru/hijau, analisis canary, multi-cloud, dll.), set fiturnya mungkin tidak diperlukan untuk keberhasilan strategi CI/CD bagi organisasi dan project yang lebih kecil. Dalam tutorial ini, Anda akan mempelajari cara membuat pipeline CI/CD yang sesuai untuk aplikasi yang dihosting di GKE dengan alat.

Untuk memudahkan, tutorial ini menggunakan satu lingkungan—produksi—di repositori env, tetapi Anda dapat memperluasnya untuk men-deploy ke beberapa lingkungan jika diperlukan.

Tujuan

  • Membuat repositori Git di Cloud Source Repositories.
  • Membuat image container dengan Cloud Build dan menyimpannya di Artifact Registry.
  • Buat pipeline CI.
  • Membuat pipeline CD.
  • Uji pipeline CI/CD.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Pilih atau buat project Google Cloud.

    Buka Kelola Resource

  2. Aktifkan penagihan untuk project Anda.

    Aktifkan Penagihan

  3. Buka Cloud Shell untuk mengeksekusi perintah yang tercantum dalam tutorial ini. Cloud Shell adalah lingkungan shell interaktif untuk Google Cloud yang dapat Anda gunakan untuk mengelola project dan resource dari browser web.

    Buka Cloud Shell

  4. Jika perintah gcloud config get-value project tidak menampilkan ID project yang Anda pilih, konfigurasikan Cloud Shell agar menggunakan project Anda.

    gcloud config set project [PROJECT_ID]
    
  5. Di Cloud Shell, aktifkan API yang diperlukan.

    gcloud services enable container.googleapis.com \
        cloudbuild.googleapis.com \
        sourcerepo.googleapis.com \
        artifactregistry.googleapis.com
    
  6. Buat repositori Docker Artifact Registry yang bernama my-repository di region us-central1 untuk menyimpan image container Anda.

    gcloud artifacts repositories create my-repository \
      --repository-format=docker \
      --location=us-central1
    
  7. Di Cloud Shell, buat cluster GKE yang akan Anda gunakan untuk men-deploy aplikasi sampel tutorial ini.

    Autopilot

    Buat cluster Autopilot bernama hello-cloudbuild:

    gcloud container clusters create-auto hello-cloudbuild \
        --region us-central1
    

    Standar

    Buat cluster Standard satu node bernama hello-cloudbuild:

    gcloud container clusters create hello-cloudbuild \
        --num-nodes 1 --region us-central1
    
  8. Jika Anda belum pernah menggunakan Git di Cloud Shell, konfigurasikan dengan nama dan alamat email Anda. Git akan menggunakannya untuk mengidentifikasi Anda sebagai penulis commit yang akan Anda buat di Cloud Shell.

    git config --global user.email "YOUR_EMAIL_ADDRESS"
    git config --global user.name "YOUR_NAME"
    

Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Lihat Pembersihan untuk mengetahui detail selengkapnya.

Membuat repositori Git di Cloud Source Repositories

Di bagian ini, Anda akan membuat dua repositori Git (aplikasi dan env) yang digunakan dalam tutorial ini, dan melakukan inisialisasi pada aplikasi dengan beberapa kode contoh.

  1. Di Cloud Shell, buat dua repositori Git.

    gcloud source repos create hello-cloudbuild-app
    gcloud source repos create hello-cloudbuild-env
    
  2. Clone kode contoh dari GitHub.

    cd ~
    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    
  3. Konfigurasikan Cloud Source Repositories sebagai jarak jauh.

    PROJECT_ID=$(gcloud config get-value project)
    git remote add google \
        "https://source.developers.google.com/p/${PROJECT_ID}/r/hello-cloudbuild-app"
    

Kode yang Anda clone berisi aplikasi "Halo Dunia".

from flask import Flask
app = Flask('hello-cloudbuild')

@app.route('/')
def hello():
  return "Hello World!\n"

if __name__ == '__main__':
  app.run(host = '0.0.0.0', port = 8080)

Membuat image container dengan Cloud Build

Kode yang Anda clone berisi Dockerfile berikut.

FROM python:3.13-slim
RUN pip install flask
WORKDIR /app
COPY app.py /app/app.py
ENTRYPOINT ["python"]
CMD ["/app/app.py"]

Dengan Dockerfile ini, Anda dapat membuat image container dengan Cloud Build dan menyimpannya di Artifact Registry.

  1. Di Cloud Shell, buat build Cloud Build berdasarkan commit terbaru dengan perintah berikut.

    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    COMMIT_ID="$(git rev-parse --short=7 HEAD)"
    gcloud builds submit --tag="us-central1-docker.pkg.dev/${PROJECT_ID}/my-repository/hello-cloudbuild:${COMMIT_ID}" .
    

    Cloud Build mengalirkan log yang dihasilkan oleh pembuatan image container ke terminal saat Anda mengeksekusi perintah ini.

  2. Setelah build selesai, pastikan image container baru Anda tersedia di Artifact Registry.

    Buka Artifact Registry

    Image hello-cloudbuild di Artifact Registry

Membuat pipeline continuous integration

Di bagian ini, Anda akan mengonfigurasi Cloud Build untuk otomatis menjalankan pengujian unit kecil, membangun image container, lalu mengirimnya ke Artifact Registry. Mengirim commit baru ke Cloud Source Repositories akan otomatis memicu pipeline ini. File cloudbuild.yaml yang disertakan dalam kode adalah konfigurasi pipeline.

steps:
# This step runs the unit tests on the app
- name: 'python:3.13-slim'
  id: Test
  entrypoint: /bin/sh
  args:
  - -c
  - 'pip install flask && python test_app.py -v'

# This step builds the container image.
- name: 'gcr.io/cloud-builders/docker'
  id: Build
  args:
  - 'build'
  - '-t'
  - 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repository/hello-cloudbuild:$SHORT_SHA'
  - '.'

# This step pushes the image to Artifact Registry
# The PROJECT_ID and SHORT_SHA variables are automatically
# replaced by Cloud Build.
- name: 'gcr.io/cloud-builders/docker'
  id: Push
  args:
  - 'push'
  - 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repository/hello-cloudbuild:$SHORT_SHA'
  1. Buka halaman Pemicu Cloud Build.

    Buka Pemicu

  2. Klik Create trigger.

  3. Isi opsi berikut:

    • Di kolom Nama, ketik hello-cloudbuild.
    • Di bagian Peristiwa, pilih Kirim ke cabang.
    • Di bagian Sumber, pilih hello-cloudbuild-app sebagai Repositori dan ^master$ sebagai Cabang.
    • Di bagian Konfigurasi build, pilih File konfigurasi Cloud Build.
    • Di kolom Lokasi file konfigurasi Cloud Build, ketik cloudbuild.yaml setelah /.
  4. Klik Buat untuk menyimpan pemicu build Anda.

    Tips: Jika perlu membuat Pemicu Build untuk banyak project, Anda dapat menggunakan Build Triggers API.

  5. Di Cloud Shell, kirim kode aplikasi ke Cloud Source Repositories untuk memicu pipeline CI di Cloud Build.

    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    git push google master
    
  6. Buka konsol Cloud Build.

    Buka Cloud Build

    Build yang baru saja Anda jalankan dan selesaikan akan muncul. Anda dapat mengklik build untuk mengikuti eksekusinya dan memeriksa log-nya.

Membuat pipeline continuous delivery

Cloud Build juga digunakan untuk pipeline continuous delivery. Pipeline dijalankan setiap kali commit dikirim ke cabang candidate dari repositori hello-cloudbuild-env. Pipeline menerapkan versi baru manifes ke cluster Kubernetes dan, jika berhasil, menyalin manifes ke cabang produksi. Proses ini memiliki properti berikut:

  • Cabang kandidat adalah histori upaya deployment.
  • Cabang produksi adalah histori deployment yang berhasil.
  • Anda dapat melihat deployment yang berhasil dan gagal di Cloud Build.
  • Anda dapat melakukan rollback ke deployment sebelumnya dengan mengeksekusi ulang build yang sesuai di Cloud Build. Rollback juga memperbarui cabang produksi agar mencerminkan histori deployment secara akurat.

Anda akan memodifikasi pipeline continuous integration untuk memperbarui cabang kandidat dari repositori hello-cloudbuild-env, yang memicu pipeline continuous delivery.

Memberikan akses Cloud Build ke GKE

Untuk men-deploy aplikasi di cluster Kubernetes, Cloud Build memerlukan Peran Identity and Access Management Developer Kubernetes Engine.

Shell

Di Cloud Shell, jalankan perintah berikut:

PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')"
gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/container.developer

Konsol

  1. Di Konsol Google Cloud, buka halaman Setelan Cloud Build:

    Buka Setelan Cloud Build

    Halaman Service account permissions akan muncul:

    Screenshot halaman izin akun Layanan

  2. Tetapkan status peran Developer Kubernetes Engine ke Aktifkan.

Melakukan inisialisasi repositori hello-cloudbuild-env

Anda harus melakukan inisialisasi repositori hello-cloudbuild-env dengan dua cabang (produksi dan kandidat) serta file konfigurasi Cloud Build yang menjelaskan proses deployment.

  1. Di Cloud Shell, clone repositori hello-cloudbuild-env dan buat cabang produksi.

    cd ~
    gcloud source repos clone hello-cloudbuild-env
    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    git checkout -b production
    
  2. Salin file cloudbuild-delivery.yaml yang tersedia di repositori hello-cloudbuild-app dan lakukan commit pada perubahan tersebut.

    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    cp ~/hello-cloudbuild-app/cloudbuild-delivery.yaml ~/kubernetes-engine-samples/management/gitops-style-delivery/cloudbuild.yaml
    git add .
    git commit -m "Create cloudbuild.yaml for deployment"
    

    File cloudbuild-delivery.yaml menjelaskan proses deployment yang akan dijalankan di Cloud Build. Proses ini memiliki dua langkah:

    1. Cloud Build menerapkan manifes di cluster GKE.

    2. Jika berhasil, Cloud Build akan menyalin manifes di cabang produksi.

    steps:
    # This step deploys the new version of our container image
    # in the hello-cloudbuild Kubernetes Engine cluster.
    - name: 'gcr.io/cloud-builders/kubectl'
      id: Deploy
      args:
      - 'apply'
      - '-f'
      - 'kubernetes.yaml'
      env:
      - 'CLOUDSDK_COMPUTE_REGION=us-central1'
      - 'CLOUDSDK_CONTAINER_CLUSTER=hello-cloudbuild'
    
    # This step copies the applied manifest to the production branch
    # The COMMIT_SHA variable is automatically
    # replaced by Cloud Build.
    - name: 'gcr.io/cloud-builders/git'
      id: Copy to production branch
      entrypoint: /bin/sh
      args:
      - '-c'
      - |
        set -x && \
        # Configure Git to create commits with Cloud Build's service account
        git config user.email $(gcloud auth list --filter=status:ACTIVE --format='value(account)') && \
        # Switch to the production branch and copy the kubernetes.yaml file from the candidate branch
        git fetch origin production && git checkout production && \
        git checkout $COMMIT_SHA kubernetes.yaml && \
        # Commit the kubernetes.yaml file with a descriptive commit message
        git commit -m "Manifest from commit $COMMIT_SHA
        $(git log --format=%B -n 1 $COMMIT_SHA)" && \
        # Push the changes back to Cloud Source Repository
        git push origin production
  3. Buat cabang kandidat dan kirimkan kedua cabang agar tersedia di Cloud Source Repositories.

    git checkout -b candidate
    git push origin production
    git push origin candidate
    
  4. Berikan peran Source Repository Writer IAM ke akun layanan Cloud Build untuk repositori hello-cloudbuild-env.

    PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} \
        --format='get(projectNumber)')"
    cat >/tmp/hello-cloudbuild-env-policy.yaml <<EOF
    bindings:
    - members:
      - serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com
      role: roles/source.writer
    EOF
    gcloud source repos set-iam-policy \
        hello-cloudbuild-env /tmp/hello-cloudbuild-env-policy.yaml
    

Membuat pemicu untuk pipeline continuous delivery

Di bagian ini, Anda akan mengonfigurasi Cloud Build agar dipicu oleh pengiriman ke cabang kandidat dari repositori hello-cloudbuild-env.

  1. Buka halaman Pemicu di Cloud Build.

    Buka Pemicu

  2. Klik Create trigger.

  3. Isi opsi berikut:

    • Di kolom Nama, ketik hello-cloudbuild-deploy.
    • Di bagian Peristiwa, pilih Kirim ke cabang.
    • Di bagian Sumber, pilih hello-cloudbuild-env sebagai Repositori dan ^candidate$ sebagai Cabang.
    • Di bagian Konfigurasi, pilih File konfigurasi Cloud Build (yaml atau json).
    • Di kolom Lokasi file konfigurasi Cloud Build, ketik cloudbuild.yaml setelah /.
  4. Klik Buat.

Mengubah pipeline continuous integration untuk memicu pipeline continuous delivery

Di bagian ini, Anda akan menambahkan beberapa langkah ke pipeline continuous integration yang menghasilkan versi baru manifes Kubernetes dan mengirimkannya ke repositori hello-cloudbuild-env untuk memicu pipeline continuous integration.

  1. Ganti file cloudbuild.yaml dengan contoh yang diperluas dalam file cloudbuild-trigger-cd.yaml.

    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    cp cloudbuild-trigger-cd.yaml cloudbuild.yaml
    

    cloudbuild-trigger-cd.yaml adalah versi yang diperluas dari file cloudbuild.yaml. Ini menambahkan langkah-langkah untuk membuat manifes Kubernetes baru dan memicu pipeline continuous delivery.

    # This step clones the hello-cloudbuild-env repository
    - name: 'gcr.io/cloud-builders/gcloud'
      id: Clone env repository
      entrypoint: /bin/sh
      args:
      - '-c'
      - |
        gcloud source repos clone hello-cloudbuild-env && \
        cd hello-cloudbuild-env && \
        git checkout candidate && \
        git config user.email $(gcloud auth list --filter=status:ACTIVE --format='value(account)')
    
    # This step generates the new manifest
    - name: 'gcr.io/cloud-builders/gcloud'
      id: Generate manifest
      entrypoint: /bin/sh
      args:
      - '-c'
      - |
         sed "s/GOOGLE_CLOUD_PROJECT/${PROJECT_ID}/g" kubernetes.yaml.tpl | \
         sed "s/COMMIT_SHA/${SHORT_SHA}/g" > hello-cloudbuild-env/kubernetes.yaml
    
    # This step pushes the manifest back to hello-cloudbuild-env
    - name: 'gcr.io/cloud-builders/gcloud'
      id: Push manifest
      entrypoint: /bin/sh
      args:
      - '-c'
      - |
        set -x && \
        cd hello-cloudbuild-env && \
        git add kubernetes.yaml && \
        git commit -m "Deploying image us-central1-docker.pkg.dev/$PROJECT_ID/my-repository/hello-cloudbuild:${SHORT_SHA}
        Built from commit ${COMMIT_SHA} of repository hello-cloudbuild-app
        Author: $(git log --format='%an <%ae>' -n 1 HEAD)" && \
        git push origin candidate
    
  2. Lakukan commit pada modifikasi dan kirimkan ke Cloud Source Repositories.

    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    git add cloudbuild.yaml
    git commit -m "Trigger CD pipeline"
    git push google master
    

    Tindakan ini akan memicu pipeline continuous integration di Cloud Build.

  3. Periksa build continuous integration.

    Buka Cloud Build

    Build yang baru saja Anda jalankan dan selesaikan untuk repositori hello-cloudbuild-app akan muncul. Anda dapat mengklik build untuk mengikuti eksekusinya dan memeriksa log-nya. Langkah terakhir dari pipeline ini mengirim manifes baru ke repositori hello-cloudbuild-env, yang memicu pipeline continuous delivery.

  4. Periksa build continuous delivery.

    Buka Cloud Build

    Build yang baru saja Anda jalankan dan selesaikan untuk repositori hello-cloudbuild-env akan muncul. Anda dapat mengklik build untuk mengikuti eksekusi dan memeriksa log-nya.

Menguji pipeline yang lengkap

Pipeline CI/CD lengkap kini dikonfigurasi. Di bagian ini, Anda akan mengujinya secara keseluruhan.

  1. Buka halaman Layanan GKE.

    Buka Layanan Google Kubernetes Engine

    Daftar ini berisi satu layanan bernama hello-cloudbuild yang dibuat oleh build continuous delivery yang baru saja diselesaikan.

  2. Klik endpoint untuk layanan hello-cloudbuild. "Hello World!" akan muncul. Jika tidak ada endpoint, atau jika terjadi error load balancer, Anda mungkin harus menunggu beberapa menit hingga load balancer benar-benar dimulai. Klik Refresh untuk memperbarui halaman jika diperlukan.

  3. Di Cloud Shell, ganti "Halo Dunia" dengan "Hello Cloud Build", baik di aplikasi maupun di pengujian unit.

    cd ~/kubernetes-engine-samples/management/gitops-style-delivery/
    sed -i 's/Hello World/Hello Cloud Build/g' app.py
    sed -i 's/Hello World/Hello Cloud Build/g' test_app.py
    
  4. Lakukan commit pada perubahan tersebut dan kirim ke Cloud Source Repositories.

    git add app.py test_app.py
    git commit -m "Hello Cloud Build"
    git push google master
    

    Tindakan ini akan memicu pipeline CI/CD yang lengkap.

  5. Setelah beberapa menit, muat ulang aplikasi di browser. "Hello Cloud Build!" akan muncul.

Menguji rollback

Di bagian ini, Anda akan melakukan rollback ke versi aplikasi yang bertuliskan "Halo Dunia!".

  1. Buka konsol Cloud Build untuk repositori hello-cloudbuild-env.

    Buka Cloud Build

  2. Klik pada build yang kedua paling baru yang tersedia.

  3. Klik Bangun ulang.

  4. Setelah build selesai, muat ulang aplikasi di browser. "Halo Dunia!" akan muncul lagi.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource

Jika ingin menyimpan project Google Cloud yang digunakan dalam tutorial ini, hapus setiap resource:

  1. Hapus repositori Git lokal.

    cd ~
    rm -rf ~/hello-cloudbuild-app
    rm -rf ~/hello-cloudbuild-env
    
  2. Hapus repositori Git di Cloud Source Repositories.

    gcloud source repos delete hello-cloudbuild-app --quiet
    gcloud source repos delete hello-cloudbuild-env --quiet
    
  3. Hapus Pemicu Cloud Build.

    1. Buka halaman Pemicu di Cloud Build.

      Buka Pemicu

    2. Untuk setiap pemicu, klik Lainnya , lalu Hapus.

  4. Hapus repositori Docker di Artifact Registry.

    gcloud artifacts repositories delete my-repository \
        --location=us-central1
    
  5. Hapus izin yang diberikan ke Cloud Build untuk terhubung ke GKE.

    PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} \
        --format='get(projectNumber)')"
    gcloud projects remove-iam-policy-binding ${PROJECT_NUMBER} \
        --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
        --role=roles/container.developer
    
  6. Hapus cluster GKE.

    gcloud container clusters delete hello-cloudbuild \
       --region us-central1
    

Langkah berikutnya