Menggunakan kebijakan deploy untuk membatasi peluncuran

Panduan memulai ini menunjukkan cara mencegah peluncuran Cloud Deploy ke target selama waktu tertentu, dan cara mengantisipasi batasan itu.

Dalam panduan memulai ini, Anda akan melakukan hal berikut:

  1. Buat konfigurasi Skaffold dan manifes Kubernetes, atau Definisi layanan Cloud Run untuk menentukan container (bawaan) image dasar untuk di-deploy.

  2. Menentukan pipeline pengiriman Cloud Deploy dan satu deployment target, yang mengarah ke satu GKE cluster atau layanan Cloud Run.

    Pipeline ini hanya mencakup satu tahap, untuk satu target.

  3. Konfigurasi kebijakan deploy untuk target.

    Kebijakan ini menetapkan rentang tanggal untuk melarang peluncuran ke target tanggal target.

  4. Membuat rilis.

    Biasanya saat Anda membuat rilis, Cloud Deploy membuat peluncuran untuk target pertama dalam progres pipeline pengiriman Anda. Di beberapa dalam kasus ini, karena ada kebijakan yang mencegah deployment ke target, peluncuran untuk target tersebut tidak dibuat.

  5. Lihat hasilnya di Konsol Google Cloud.

    Oleh karena kebijakan ini, Anda tidak akan melihat peluncuran untuk rilis tersebut, dan ada tidak ada tindakan yang tertunda dalam visualisasi pipeline pengiriman.

  6. Ganti kebijakan deploy.

    Penggantian ini mengakibatkan Cloud Deploy yang sekarang membuat peluncuran untuk target.

  7. Lihat hasilnya di Konsol Google Cloud.

    Karena kebijakan tersebut sekarang telah diganti, Anda dapat melihat bahwa ada peluncuran sedang berlangsung (atau selesai, jika telah cukup waktu).

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Cloud Deploy, Cloud Build, GKE, and Cloud Storage.

    Mengaktifkan API

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  9. Aktifkan API Cloud Deploy, Cloud Build, GKE, and Cloud Storage.

    Mengaktifkan API

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  12. Jika sudah menginstal Google Cloud CLI, pastikan Anda menjalankan versi terbaru:

    gcloud components update
    
  13. Pastikan setelan default Akun layanan Compute Engine memiliki izin yang memadai.

    Akun layanan mungkin sudah memiliki izin yang diperlukan. Langkah-langkah ini disertakan untuk project yang menonaktifkan pemberian peran otomatis untuk layanan default menggunakan akun layanan.

    1. Pertama-tama, tambahkan peran clouddeploy.jobRunner:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      
    2. Tambahkan peran clouddeploy.policyAdmin:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.policyAdmin"
      
    3. Tambahkan peran developer untuk runtime tertentu Anda.
      • Untuk GKE:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --role="roles/container.developer"
        

      • Untuk Cloud Run:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --role="roles/run.developer"
        

    4. Tambahkan peran iam.serviceAccountUser, yang menyertakan izin actAsuntuk men-deploy ke runtime:
      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

Membuat lingkungan runtime

Jika men-deploy ke Cloud Run, Anda dapat melewati perintah ini.

Untuk GKE, buat satu cluster: quickstart-cluster-qsprod. Endpoint Kubernetes API cluster harus dapat dijangkau ke jaringan dari publik di Internet. Cluster GKE dapat diakses secara eksternal oleh secara default.

gcloud container clusters create-auto quickstart-cluster-qsprod \
                 --project=PROJECT_ID \
                 --region=us-central1

Menyiapkan konfigurasi Skaffold dan manifes aplikasi

Cloud Deploy menggunakan Skaffold untuk menyediakan detail mengenai apa yang harus di-deploy dan cara men-deploy-nya ke target.

Dalam panduan memulai ini, Anda membuat file skaffold.yaml, yang mengidentifikasi manifes Kubernetes yang akan digunakan untuk men-deploy aplikasi contoh.

  1. Buka jendela terminal.

  2. Buat direktori baru dan buka direktori tersebut.

    GKE

    mkdir deploy-policy-quickstart
    cd deploy-policy-quickstart
    

    Cloud Run

    mkdir deploy-policy-quickstart
    cd deploy-policy-quickstart
    
  3. Buat file bernama skaffold.yaml dengan konten berikut:

    GKE

    apiVersion: skaffold/v4beta1
    kind: Config
    manifests:
      rawYaml:
      - k8s-pod.yaml
    deploy:
      kubectl: {}
    

    Cloud Run

    apiVersion: skaffold/v4beta1
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    

    File ini adalah konfigurasi Skaffold minimal. Untuk panduan memulai ini, Anda membuat . Tapi Anda juga bisa meminta Cloud Deploy membuatkan Cloud Deploy untuk Anda, untuk aplikasi dasar non-produksi.

    Lihat referensi skaffold.yaml untuk mengetahui informasi selengkapnya tentang file konfigurasi ini.

  4. Membuat manifes untuk aplikasi Anda—definisi layanan untuk Cloud Run atau manifes Kubernetes untuk GKE.

    GKE

    Buat file bernama k8s-pod.yaml, dengan konten berikut:

    apiVersion: v1
    kind: Pod
    metadata:
      name: getting-started
    spec:
      containers:
      - name: nginx
        image: my-app-image
    

    File ini adalah Kubernetes dasar manifes, yang diterapkan ke cluster untuk men-deploy aplikasi.

    Cloud Run

    Buat file bernama service.yaml, dengan konten berikut:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-deploy-policy-run-service
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    File ini adalah definisi dasar layanan Cloud Run, yang digunakan saat deployment untuk membuat Cloud Run layanan.

Membuat pipeline dan target pengiriman

Anda dapat menentukan pipeline dan target pengiriman dalam satu file atau secara terpisah . Dalam panduan memulai ini, Anda akan membuat satu file berisi keduanya.

  1. Buat pipeline pengiriman dan definisi target Anda:

    GKE

    Dalam direktori deploy-policy-quickstart, buat file baru: clouddeploy.yaml, dengan konten berikut:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: deploy-policy-pipeline
    serialPipeline:
      stages:
      - targetId: prod-target
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: prod-target
    description: production cluster
    gke:
      cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
    

    Cloud Run

    Dalam direktori deploy-policy-quickstart, buat file baru: clouddeploy.yaml, dengan konten berikut:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: deploy-policy-pipeline
    serialPipeline:
      stages:
      - targetId: prod-target
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: prod-target
    description: production Run service
    run:
      location: projects/PROJECT_ID/locations/us-central1
    
  2. Mendaftarkan pipeline dan target resource Anda dengan Cloud Deploy layanan:

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    Anda sekarang memiliki pipeline pengiriman dengan satu target.

  3. Konfirmasi pipeline dan target Anda:

    Di konsol Google Cloud, buka halaman Cloud Deploy Halaman Pipeline pengiriman untuk melihat daftar pengiriman Anda yang tersedia pipeline.

    Buka halaman Pipeline Penayangan

    Pipeline pengiriman yang baru saja Anda buat ditampilkan, dengan satu target tercantum di kolom Targets.

    halaman pipeline pengiriman di Konsol Google Cloud, yang menampilkan pipeline Anda

Membuat kebijakan deployment

Anda dapat menentukan kebijakan deploy dalam file yang sama dengan pipeline pengiriman dan target, atau Anda dapat menentukannya dalam file terpisah. Untuk panduan memulai ini, kami mendefinisikan secara terpisah.

  1. Dalam direktori deploy-policy-quickstart, buat file baru, deploypolicy.yaml, dengan konten berikut:

    apiVersion: deploy.cloud.google.com/v1
    description: Restrict all rollouts in the deploy-policy-pipeline resource all the time
    kind: DeployPolicy
    metadata:
      name: quickstart-deploy-policy
    selectors:
    - deliveryPipeline:
        id: 'deploy-policy-pipeline'
    rules:
    - restrictRollouts:
        id: no-rollouts
        timeWindow:
          timeZone: America/New_York
          ranges:
          - startDate:
              day: 1
              month: 1
            endDate:
              month: 12
              day: 31
    

    Kebijakan ini memblokir peluncuran dari 1 Januari hingga 31 Desember.

  2. Daftarkan resource kebijakan deploy Anda ke layanan Cloud Deploy:

    gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
    
  3. Konfirmasi kebijakan deploy Anda:

    Di konsol Google Cloud, buka halaman Cloud Deploy Halaman Deploy kebijakan untuk melihat daftar kebijakan yang tersedia.

    Buka halaman Deploy policies

    Kebijakan deploy yang baru saja Anda buat akan ditampilkan.

    halaman kebijakan deploy di konsol Google Cloud

Membuat rilis

Rilis adalah resource Cloud Deploy pusat yang mewakili perubahan yang di-deploy. Pipeline pengiriman menentukan siklus proses dari data. Lihat Arsitektur layanan Cloud Deploy untuk mengetahui detail tentang siklus proses tersebut.

GKE

Jalankan perintah berikut dari direktori deploy-policy-quickstart untuk buat rilis:

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-policy-pipeline \
   --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

Cloud Run

Jalankan perintah berikut dari direktori deploy-policy-quickstart untuk buat rilis:

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-policy-pipeline \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:6063adf8f687702b4065151acddba6781c47bc602167eb9f3bec8aebc9ce95cc

Dalam keadaan normal, Cloud Deploy membuat peluncuran ke target pertama saat Anda membuat rilis menggunakan perintah ini. Dalam kasus ini, karena peluncuran dibatasi sesuai dengan kebijakan deploy, tidak ada peluncuran yang dibuat. Pesan error ditampilkan di baris perintah:

ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy" policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no rollouts"

Ganti pembatasan kebijakan

Untuk men-deploy aplikasi contoh, yang diblokir oleh kebijakan deployment, Anda harus perlu mengganti kebijakan tersebut. Untuk melakukannya, buat peluncuran baru untuk metode ini rilis, kali ini termasuk opsi --override-deploy-policies:

GKE

Jalankan perintah berikut dari direktori deploy-policy-quickstart untuk buat rilis:

 gcloud deploy releases promote --release=test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-policy-pipeline \
   --to-target=prod-target \
   --override-deploy-policies=quickstart-deploy-policy

Cloud Run

Jalankan perintah berikut dari direktori deploy-policy-quickstart untuk buat rilis:

 gcloud deploy releases promote --release=test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-policy-pipeline \
   --to-target=prod-target \
   --override-deploy-policies=quickstart-deploy-policy

Karena Anda menyertakan --override-deploy-policies=quickstart-deploy-policy, dan karena nilai default akun layanan memiliki peran roles/clouddeploy.policyAdmin, Cloud Deploy mengabaikan kebijakan deploy yang Anda buat dan membuat diluncurkan ke prod-target.

Lihat hasilnya di Konsol Google Cloud

  1. Di konsol Google Cloud, buka lagi halaman Cloud Deploy Halaman Pipeline pengiriman untuk melihat pipeline pengiriman Anda (deploy-policy-pipeline).

    Buka halaman Pipeline Penayangan

  2. Klik nama pipeline penayangan Anda (deploy-policy-pipeline).

    Visualisasi pipeline menunjukkan status deployment aplikasi. Dalam kasus ini, karena kebijakan diganti, peluncuran telah dibuat dan berhasil.

    Visualisasi pipeline penayangan yang menunjukkan peluncuran

    Dan rilis Anda tercantum di tab Rilis pada Pipeline pengiriman detail.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.

  1. Hapus cluster GKE atau layanan Cloud Run:

    GKE

    gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
    

    Cloud Run

    gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_ID
    
  2. Hapus kebijakan deploy:

    gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
    
  3. Hapus pipeline pengiriman, target, rilis, dan peluncuran:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  4. Hapus kedua bucket Cloud Storage yang di-deploy oleh Cloud dibuat.

    Buka halaman browser Cloud Storage

Selesai, Anda telah menyelesaikan panduan memulai ini.

Langkah selanjutnya