Mengonfigurasi pratinjau menerapkan


Tutorial ini menunjukkan cara menggunakan URL revisi Cloud Run untuk menerapkan pratinjau permintaan pull GitHub melalui pemicu Cloud Build. Pratinjau memungkinkan Anda menerapkan perubahan potensial pada layanan tanpa mengubah versi aktif atau 'produksi' layanan. Dengan menerapkan revisi traffic 0% dari permintaan pull terbuka, Anda dapat melihat pratinjau perubahan dan memastikannya berfungsi sebagaimana mestinya di lingkungan produksi yang hampir sama sebelum penggabungan.

Tutorial ini bekerja dengan repo GitHub publik dan pribadi. Perhatikan bahwa pratinjau itu sendiri akan berupa URL umum, jika tidak jelas.

Tujuan

  • Membuat layanan Cloud Run.
  • Menerapkan continuous integration berbasis kontrol sumber pada GitHub.
  • Membuat dan mengelola akses ke secret melalui Secret Manager.
  • Men-deploy Cloud Builder kustom.
  • Menciptakan pemicu Cloud Build untuk memanggil build pada permintaan pull GitHub.

Biaya

Dalam dokumen ini, Anda akan 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.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Run, Cloud Build, and Secret Manager APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Run, Cloud Build, and Secret Manager APIs.

    Enable the APIs

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Kelola akses.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Mengambil contoh kode

Untuk kemudahan penggunaan dalam tutorial ini, Anda akan membuat repositori GitHub baru dengan salinan aplikasi Hello World berdasarkan template. Kemudian, Anda akan menambahkan file baru ke repo ini dengan konfigurasi Cloud Build khusus.

  1. Login ke GitHub dan buka repo template.
  2. Buat repositori baru menggunakan template ini dengan mengklik "Gunakan template ini".
    1. Beri nama repo Anda helloworld-python.
    2. Pilih "Publik" atau "Pribadi" untuk repo.
    3. Klik buat repository dari template.
  3. Buat file konfigurasi Cloud Build baru di repo Anda (petunjuk lengkap):

    1. Di halaman repo, klik Tambahkan file > Buat file baru
    2. Namai folder baru ini cloudbuild.yaml
    3. Salin kode di bawah ke cloudbuild.yaml:

      steps:
        - id: "build image"
          name: "gcr.io/cloud-builders/docker"
          args:
            [
              "build",
              "-t",
              "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
              ".",
            ]
      
        - id: "push image"
          name: "gcr.io/cloud-builders/docker"
          args:
            [
              "push",
              "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
            ]
      
        - id: "deploy prod service"
          name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
          entrypoint: "gcloud"
          args:
            [
              "run",
              "deploy",
              "${_SERVICE_NAME}",
              "--platform",
              "managed",
              "--region",
              "${_REGION}",
              "--allow-unauthenticated",
              "--image",
              "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
            ]
      
        # Force the new revision to serve 100% of traffic.
        - id: "ensure prod service live"
          name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
          entrypoint: "gcloud"
          args:
            [
              "run",
              "services",
              "update-traffic",
              "${_SERVICE_NAME}",
              "--to-latest",
              "--platform",
              "managed",
              "--region",
              "${_REGION}",
            ]
      
      substitutions:
        _SERVICE_NAME: myservice
        _REGION: us-central1
      
      options:
        logging: CLOUD_LOGGING_ONLY
    4. Pertahankan pilihan "Commit langsung ke cabang main" pilihan.

    5. Klik Commit file baru.

Men-deploy layanan Anda dengan pemicu build

Tutorial ini menunjukkan cara menyiapkan pemicu build untuk memulai build secara otomatis setiap kali Anda memperbarui cabang utama repositori. Anda juga dapat men-deploy layanan secara manual dengan memanggil Cloud Build setiap kali ingin men-deploy perubahan.

Untuk tutorial ini, gunakan file cloudbuild.yaml untuk men-deploy contoh layanan bernama myservice.

  1. Berikan peran Cloud Run Admin and Service Account User ke akun layanan Cloud Build (petunjuk lengkap):

    1. Di konsol Google Cloud, buka halaman setelan akun Cloud Build.

      Buka halaman setelan akun Cloud Build

    2. Mengaktifkan peran Admin Cloud Run.

    3. Pada dialog konfirmasi, klik Berikan akses ke semua akun layanan.

  2. Hubungkan akun GitHub Anda ke Cloud Build (petunjuk lengkap):

    1. Di konsol Google Cloud, pergi ke halaman pemicu Cloud Build.

      Buka halaman pemicu Cloud Build

    2. Klik Connect Repository.

    3. Pilih GitHub (Cloud Build GitHub App) sebagai sumber, lalu masuk ke dialog autentikasi dan otorisasi.

    4. Pilih repositori "GITHUB_USER_NAME/helloworld-python".

    5. Klik Connect repository.

    6. Di bagian "Buat pemicu (opsional)", klik Buat pemicu.

  3. Buat pemicu Cloud Build (petunjuk lengkap):

    1. Di halaman pemicu Cloud Build, klik Create trigger.
    2. Masukkan detail berikut:
      • Nama: prod-deploy
      • Agenda: Kirim ke Cabang
      • Repositori Sumber: "GITHUB_USER_NAME/helloworld-python"
      • Cabang Sumber: ^main$
      • Konfigurasi build: File konfigurasi Cloud Build (yaml atau json)
      • Lokasi file konfigurasi Build Cloud cloudbuild.yaml
    3. Klik Buat.
  4. Jalankan pemicu baru secara manual:

    1. Pada listingan pemicu baru, klik Run.
    2. Di pop-up, konfirmasi nama cabang (main), lalu klik Jalankan Pemicu.
    3. Periksa progres build dengan membuka histori Cloud Build.
    4. Tunggu hingga build selesai.
  5. Konfirmasi deployment yang berhasil.

    1. Pada konsol Google Cloud, buka halaman Cloud Run.

      Buka halaman Cloud Run

    2. Pastikan layanan tersebut memiliki tanda centang hijau yang menunjukkan deployment berhasil.

    3. Klik tab Revisi dan konfirmasi bahwa layanan tersebut memiliki satu revisi, yang menyalurkan 100% traffic, dimulai dengan "myservice-00001-".

    4. Klik URL layanan dan konfirmasi bahwa layanan tersebut menampilkan "Hello World!".

    Screenshot konsol Cloud Run, dengan satu revisi, yang menandai URL layanan.
    Screenshot layanan Cloud Run yang di-deploy, yang menampilkan 'Hello World!'.

Membuat token dan konfigurasi

Pemicu prod-deploy yang dibuat di bagian sebelumnya akan men-deploy layanan saat push dilakukan ke cabang utama. Sekarang, Anda akan membuat pemicu kedua yang berjalan setiap kali permintaan pull dibuat atau diperbarui dalam repo.

Setelah pemicu baru disiapkan, pratinjau akan di-deploy, tetapi tidak akan ada informasi dalam permintaan pull untuk menautkan ke pratinjau. Untuk menyiapkan fungsi ini, Anda harus menyelesaikan langkah-langkah konfigurasi tambahan berikut:

  • Membuat token GitHub
  • Simpan token ini di Secret Manager
  • Buat image kustom untuk digunakan sebagai langkah di Cloud Build.

Membuat dan menyimpan Token GitHub

  1. Buat token GitHub untuk mengizinkan penulisan kembali ke permintaan pull (petunjuk lengkap):
    1. Buka halaman setelan GitHub Personal Access token.
    2. Klik Buat token baru.
    3. Masukkan detail berikut:
      • Catatan: preview-deploy
      • Masa berlaku: 30 hari
      • Cakupan:
        • Untuk repo publik: repo:status ("Status commit akses")
        • Untuk repo pribadi: repo ("Kontrol penuh atas repositori pribadi")
    4. Klik Generate Token.
    5. Salin nilai token yang dibuat.
  2. Simpan token GitHub di Secret Manager:

    1. Di konsol Google Cloud, buka halaman Secret Manager.

      Buka halaman Secret Manager

    2. Klik Buat Secret.

    3. Masukkan detail berikut:

      1. Nama: github_token.
      2. Nilai rahasia: tempel nilai token yang Anda salin dari GitHub.
    4. Klik Buat Secret.

  3. Izinkan Cloud Build mengakses rahasia ini:

    1. Di tab browser baru, di Google Cloud Console, buka halaman Cloud Build settings.

      Buka halaman setelan Cloud Build

    2. Salin nilai untuk "Email akun layanan".

      • Emailnya adalah PROJECT_NUM@cloudbuild.gserviceaccount.com
    3. Kembali ke Secret Manager, klik tab Permission dan klik Add

      • PROJECT_NUM@cloudbuild.gserviceaccount.comEntitas Baru
      • Peran: Secret Manager Secret Accessor
    4. Klik Simpan.

GitHub merekomendasikan pengaturan waktu habis masa berlaku untuk akses token pribadi, dan akan mengirimkan email pengingat saat token ditetapkan agar tidak berlaku lagi. Jika Anda terus menggunakan pratinjau deployment, buat versi baru github_token saat Anda membuat ulang token. Builder pada langkah berikutnya mengambil versi token terbaru, sehingga pratinjau akan terus bekerja.

Membuat image baru untuk Cloud Build

Skrip yang menulis notifikasi "Pratinjau Deployment" ke permintaan pull terletak dalam Contoh Python Docs. Daripada menambahkan skrip ini ke dalam kode sumber, Anda dapat secara opsional mem-build skrip ini ke dalam container dalam project Anda dan menjalankan container tersebut sebagai langkah dalam konfigurasi Cloud Build Anda.

Anda dapat menyelesaikan petunjuk berikut menggunakan Cloud Shell, atau komputer lokal jika Anda telah menginstal dan mengonfigurasi git dan Google Cloud CLI. Petunjuk di bawah ini menunjukkan kedua metode tersebut.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Konfigurasikan Google Cloud CLI untuk menggunakan project Anda, untuk mengganti PROJECT_ID dengan project ID Anda:
    export PROJECT_ID=PROJECT_ID
    gcloud config set project $PROJECT_ID
    
    Jika menggunakan Cloud Shell, Anda mungkin perlu memberikan otorisasi kepada Google Cloud CLI untuk melakukan panggilan API Google Cloud. Klik Izinkan untuk mengizinkan tindakan ini dilanjutkan.
  3. Buat image container baru:
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    cd python-docs-samples/
    gcloud builds submit --tag gcr.io/$PROJECT_ID/deployment-previews run/deployment-previews
    
  4. Mengonfirmasi bahwa penampung telah dibuat:
    gcloud container images list
    
  5. Hapus repositori yang di-clone:
    cd ..
    rm -rf python-docs-samples
    

Menambahkan konfigurasi Cloud Build baru

Repositori Anda sudah memiliki file cloudbuild.yaml yang digunakan di cabang utama Anda. Sekarang Anda akan membuat konfigurasi baru untuk pemicu baru ini.

  1. Di halaman repo GitHub, klik Add file > Buat file baru

    1. Beri nama file baru cloudbuild-preview.yaml
    2. Salin kode di bawah, dan tempelkan ke file baru Anda:
    steps:
      - id: "build image"
        name: "gcr.io/cloud-builders/docker"
        args:
          [
            "build",
            "-t",
            "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
            ".",
          ]
    
      - id: "push image"
        name: "gcr.io/cloud-builders/docker"
        args:
          [
            "push",
            "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
          ]
    
      - id: "deploy revision with tag"
        name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
        entrypoint: "gcloud"
        args:
          [
            "run",
            "deploy",
            "${_SERVICE_NAME}",
            "--platform",
            "managed",
            "--region",
            "${_REGION}",
            "--image",
            "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
            "--tag",
            "pr-${_PR_NUMBER}",
            "--no-traffic",
          ]
    
      - id: "link revision on pull request"
        name: "us-central1-docker.pkg.dev/$PROJECT_ID/containers/deployment-previews" # our custom builder
        secretEnv: ["GITHUB_TOKEN"]
        args:
          [
            "set",
            "--project-id",
            "${PROJECT_ID}",
            "--region",
            "${_REGION}",
            "--service",
            "${_SERVICE_NAME}",
            "--pull-request",
            "${_PR_NUMBER}",
            "--repo-name",
            "${REPO_FULL_NAME}",
            "--commit-sha",
            "${SHORT_SHA}",
          ]
    
    substitutions:
      _SERVICE_NAME: myservice
      _REGION: us-central1
    
    options:
      dynamicSubstitutions: true
      logging: CLOUD_LOGGING_ONLY
    
    availableSecrets:
      secretManager:
        - versionName: projects/$PROJECT_ID/secrets/github_token/versions/latest
          env: "GITHUB_TOKEN"
  2. Commit perubahan ke cabang utama repositori Anda.

Membuat pemicu sekunder

Sekarang setelah semua dasar-dasarnya siap, buat pemicu baru.

  1. Buat pemicu Cloud Build baru (petunjuk lengkap):

    1. Di konsol Google Cloud, buka halaman Pemicu Cloud Build.

      Buka halaman pemicu Cloud Build

    2. Klik Buat trigger.

    3. Masukkan detail berikut:

      • Nama: preview-deploy
      • Peristiwa: Permintaan Pull
      • Repositori Sumber: "GITHUB_USER_NAME/helloworld-python"
      • Cabang dasar: ^main$
      • Kontrol komentar: Wajib kecuali untuk pemilik dan kolaborator
        • Sebagai pemilik repo, pratinjau akan otomatis di-bangun berdasarkan permintaan pull yang Anda buat.
        • Jika Anda ingin mengizinkan siapa saja melihat pratinjau perubahan mereka, baca selengkapnya tentang implikasi keamanan dari memilih "Tidak diperlukan".
      • Konfigurasi: File Konfigurasi Cloud Build
      • Lokasi file konfigurasi Cloud Build: cloudbuild-preview.yaml
    4. Klik Buat.

Memeriksa Keberhasilan

Karena pemicu baru ini diaktifkan saat permintaan pull baru dibuat, Anda harus membuat permintaan pull baru untuk mengujinya.

  1. Buka repositori Anda, dan buat perubahan visual pada app.py di cabang baru.
    1. Buka app.py, lalu klik ikon pensil ().
      Screenshot antarmuka GitHub untuk mengedit file di situs.
    2. Buat perubahan; misalnya, ubah "Halo" menjadi "Salam".
    3. Pilih Buat sebuah cabang baru untuk commit ini dan mulai dengan pull request, lalu klik Usulkan perubahan.
  2. Buat permintaan pull baru dengan cabang ini.

    Jika pemicu dikonfigurasi dengan benar, pemeriksaan baru akan segera ditampilkan setelah Anda membuat permintaan pull:

    Screenshot antarmuka GitHub yang menampilkan pemeriksaan tertunda.
  3. Nama pemeriksaan tersebut adalah nama pemicu dan project ID Anda. Periksa progres build dengan mengklik Details > View more details pada Google Cloud Build.

    Jika pemicu gagal dan Anda harus mengirim ulang build, atau jika ingin membuat perubahan lain pada permintaan pull, Anda harus meng-commit perubahan pada cabang yang sama. Setiap commit baru pada permintaan pull akan memicu build baru.

  4. Setelah pemicu selesai, pemeriksaan status baru bernama "Deployment Preview" akan ditampilkan untuk permintaan pull. Ikon yang ditampilkan adalah avatar Anda karena akun Anda adalah pemilik token yang digunakan:

    Screenshot grafis GitHub yang menampilkan pemeriksaan yang telah selesai.
  5. Klik Details untuk membuka pratinjau. URL yang ditampilkan sama dengan URL layanan asli Anda, tetapi diawali dengan "pr-1---".

    Screenshot pratinjau layanan Cloud Run yang di-deploy, yang menampilkan 'Greetings World!'.

    Perlu diperhatikan bahwa jika Anda membuka URL layanan asli, konten asli akan ditampilkan:

    Screenshot layanan Cloud Run yang pertama di-deploy, masih menampilkan 'Hello World!'.
  6. Lihat daftar revisi layanan Anda untuk memeriksa status layanan di Cloud Run: kini ada dua revisi yang menyalurkan traffic: versi asli dan pratinjau:

    Screenshot konsol Cloud Run, dengan dua revisi aktif.
  7. Terus buat perubahan pada permintaan pull dengan menambahkan commit baru ke cabang. Setiap kali Anda melakukan commit, pemicu preview-deploy akan diaktifkan, sehingga membuat revisi layanan yang baru dan menyediakan revisi di URL yang sama:

    Screenshot konsol Cloud Run, dengan tiga revisi.
  8. Setelah Anda siap menggabungkan perubahan, klik Merge Pull Request. Pemicu prod-deploy asli berjalan, dan perubahan dari permintaan pull ditampilkan dalam URL asli:

    Screenshot layanan Cloud Run yang baru di-deploy, yang menampilkan 'Greetings World!'.

    Revisi baru menayangkan 100% traffic di URL utama, tetapi URL pratinjau permintaan pull masih terikat pada commit terbaru untuk permintaan pull tersebut, sehingga link akan terus berfungsi:

    Screenshot konsol Cloud Run, dengan empat revisi.

Batasan

Ada batasan jumlah URL revisi yang dapat dibuat. Jika Anda memperkirakan repo akan memiliki lebih dari 1000 permintaan pull, pertimbangkan proses untuk membersihkan tag seperti yang ditunjukkan pada cloudbuild-cleanup.yaml.

Memahami kode

cloudbuild.yaml

Kode ini didasarkan pada contoh cloudbuild.yaml yang disediakan oleh Cloud Build, tetapi dengan update yang dicatat: langkah keempat yang menjalankan update-traffic.

steps:
  - id: "build image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "build",
        "-t",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
        ".",
      ]

  - id: "push image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "push",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
      ]

  - id: "deploy prod service"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud"
    args:
      [
        "run",
        "deploy",
        "${_SERVICE_NAME}",
        "--platform",
        "managed",
        "--region",
        "${_REGION}",
        "--allow-unauthenticated",
        "--image",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
      ]

  # Force the new revision to serve 100% of traffic.
  - id: "ensure prod service live"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud"
    args:
      [
        "run",
        "services",
        "update-traffic",
        "${_SERVICE_NAME}",
        "--to-latest",
        "--platform",
        "managed",
        "--region",
        "${_REGION}",
      ]

substitutions:
  _SERVICE_NAME: myservice
  _REGION: us-central1

options:
  logging: CLOUD_LOGGING_ONLY

Konfigurasi di cloudbuild.yaml menciptakan perubahan pada pemisahan traffic. Parameter --to-latest menawarkan fungsi yang sama seperti kotak centang Tayangkan revisi ini segera di halaman Cloud Run. Ini Memastikan bahwa revisi layanan ini segera menyalurkan 100% traffic.

cloudbuild-preview.yaml

steps:
  - id: "build image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "build",
        "-t",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
        ".",
      ]

  - id: "push image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "push",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
      ]

  - id: "deploy revision with tag"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud"
    args:
      [
        "run",
        "deploy",
        "${_SERVICE_NAME}",
        "--platform",
        "managed",
        "--region",
        "${_REGION}",
        "--image",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
        "--tag",
        "pr-${_PR_NUMBER}",
        "--no-traffic",
      ]

  - id: "link revision on pull request"
    name: "us-central1-docker.pkg.dev/$PROJECT_ID/containers/deployment-previews" # our custom builder
    secretEnv: ["GITHUB_TOKEN"]
    args:
      [
        "set",
        "--project-id",
        "${PROJECT_ID}",
        "--region",
        "${_REGION}",
        "--service",
        "${_SERVICE_NAME}",
        "--pull-request",
        "${_PR_NUMBER}",
        "--repo-name",
        "${REPO_FULL_NAME}",
        "--commit-sha",
        "${SHORT_SHA}",
      ]

substitutions:
  _SERVICE_NAME: myservice
  _REGION: us-central1

options:
  dynamicSubstitutions: true
  logging: CLOUD_LOGGING_ONLY

availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/github_token/versions/latest
      env: "GITHUB_TOKEN"

Kode ini mirip dengan cloudbuild.yaml, tetapi dengan langkah-langkah tambahan:

  1. Setelah membangun dan mengirim image layanan, cloudbuild-preview.yaml akan men-deploy layanan menggunakan flag --no-traffic. Artinya, meskipun ini adalah revisi terbaru, revisi tersebut tidak digunakan untuk menyalurkan traffic.

  2. cloudbuild-preview.yaml menambahkan tag khusus berdasarkan nomor permintaan pull. Dalam hal ini, string yang diawali dengan "pr-" dan diakhiri dengan jumlah permintaan pull.

    Pada tahap ini, URL revisi berfungsi, tetapi orang yang mengirimkan permintaan pull tidak dapat menentukan hal ini karena log Cloud Build tidak terlihat dari GitHub itu sendiri: hanya link ke log dapat terlihat. Hanya pengguna terautentikasi dari project Cloud Build dengan izin yang memadai yang dapat melihat log.

  3. cloudbuild-preview.yaml menjalankan skrip check_status.py, menggunakan parameter substitusi bawaan yang disediakan oleh Cloud Build. Sejumlah parameter ini tersedia saat menggunakan repo GitHub, seperti nomor permintaan pull, nama repo, dan SHA commit.

Untuk menjalankan kembali pemicu ini, kirimkan commit lain di GitHub. Pemicu ini tidak dapat dijalankan ulang dari halaman Cloud Build di konsol.

cloudbuild-cleanup.yaml


steps:
  - id: "build image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "build",
        "-t",
        "us-central1-docker.pkg.dev/${PROJECT_ID}/containers/${_SERVICE_NAME}",
        ".",
      ]

  - id: "push image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "push",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
      ]

  - id: "deploy prod service"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud"
    args:
      [
        "run",
        "deploy",
        "${_SERVICE_NAME}",
        "--platform",
        "managed",
        "--region",
        "${_REGION}",
        "--allow-unauthenticated",
        "--image",
        "us-central1-docker.pkg.dev/$PROJECT_ID/containers/${_SERVICE_NAME}",
      ]

  # Force the new revision to serve 100% of traffic.
  - id: "ensure prod service live"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud"
    args:
      [
        "run",
        "services",
        "update-traffic",
        "${_SERVICE_NAME}",
        "--to-latest",
        "--platform",
        "managed",
        "--region",
        "${_REGION}",
      ]

  # Cleanup tags against closed pull requests
  - id: "clean up old tag"
    name: "us-central1-docker.pkg.dev/${PROJECT_ID}/containers/deployment-previews" # our custom builder
    secretEnv: ["GITHUB_TOKEN"]
    args:
      [
        "cleanup",
        "--project-id",
        "${PROJECT_ID}",
        "--region",
        "${_REGION}",
        "--service",
        "${_SERVICE_NAME}",
        "--repo-name",
        "${REPO_FULL_NAME}",
      ]

substitutions:
  _SERVICE_NAME: myservice
  _REGION: us-central1

options:
  dynamicSubstitutions: true
  logging: CLOUD_LOGGING_ONLY

availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/github_token/versions/latest
      env: "GITHUB_TOKEN"

Kode ini adalah alternatif untuk cloudbuild.yaml, dengan fungsi pembersihan tambahan. Langkah awal adalah melakukan deployment, lalu fungsinya diperluas sebagai berikut:

  1. Dengan menggunakan Discovery API dan GitHub API, tentukan tag mana untuk layanan yang ditujukan untuk permintaan pull tertutup. Setidaknya akan ada permintaan pull yang digabungkan, yang menyebabkan pemicu ini diaktifkan.

  2. Hapus tag yang teridentifikasi.

check_status.py

def set(
    dry_run: str,
    project_id: str,
    region: str,
    service: str,
    repo_name: str,
    commit_sha: str,
    pull_request: str,
) -> None:
    """Set a status on a GitHub commit to a specific revision URL"""
    service_obj = get_service(project_id, region, service)
    revision_url = get_revision_url(service_obj, tag=make_tag(pull_request))

    ghtoken = os.environ.get("GITHUB_TOKEN", None)

    if not ghtoken:
        raise ValueError("GITHUB_TOKEN not defined.")

    try:
        repo = github.Github(ghtoken).get_repo(repo_name)
    except GithubException as e:
        error(
            e.data["message"],
            context=f"finding repo {repo_name}. Is it a private repo, and does your token have the correct permissions?",
        )

    try:
        commit = repo.get_commit(sha=commit_sha)
    except GithubException as e:
        error(e.data["message"], context=f"finding commit {commit_sha}")

    # ...

    commit.create_status(
        state="success",
        target_url=revision_url,
        context=f"Deployment Preview for {service}",
        description="Your preview is now available.",
    )
    click.secho("Success: ", fg="green", bold=True, nl=False)
    click.echo(
        f"Status created on {repo_name}, commit {commit.sha[:7]}, "
        f"linking to {revision_url} on service {service_obj['metadata']['name']}"
    )

Skrip check_status.py mengambil informasi yang diberikan tentang layanan Cloud Run, tentang repo dan commit GitHub, lalu menjalankan operasi berikut:

  • Ambil layanan, nama tag, dan URL revisi menggunakan klien Python Google API.
  • Mengambil token GitHub dari variabel lingkungan, yang disediakan oleh Secret Manager.
  • Buat status pada commit yang ditentukan, dengan menautkan ke URL revisi yang diambil, menggunakan GitHub Client API untuk Python.

Pembersihan

Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial. Selain itu, Anda harus menghapus konfigurasi GitHub yang dibuat untuk tutorial.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Menghapus resource tutorial

  1. Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:

    1. Buka konsol Cloud Run.
    2. Pilih listingan "myservice", lalu klik Delete.
    3. Pada dialog konfirmasi, klik Delete.
  2. Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:

Menghapus konfigurasi tutorial

Untuk membersihkan konfigurasi di GitHub, Anda harus menghapus aplikasi Google Cloud Build dari GitHub:

  1. Buka Setelan aplikasi GitHub
  2. Di listingan Google Cloud Build, klik Configure.
  3. Di bagian Danger Zone, klik Uninstall.
  4. Pada dialog konfirmasi, klik Oke.

Anda juga harus menghapus token GitHub yang dibuat:

  1. Buka halaman Token akses pribadi GitHub.
  2. Di listingan preview-deploy, klik Hapus.
  3. Pada dialog konfirmasi, klik Saya mengerti, hapus token ini.

Anda juga perlu menghapus repo GitHub:

  1. Buka repo GitHub yang Anda buat dan klik tab Settings.
  2. Di bagian Danger Zone, klik Delete this repository.
  3. Pada dialog konfirmasi, masukkan nama lengkap repositori, lalu klik Saya memahami konsekuensinya, hapus repositori ini.

Langkah berikutnya