Membatasi perilaku deployment menggunakan kebijakan

Dokumen ini menjelaskan cara menggunakan kebijakan deployment untuk membatasi tindakan pipeline pengiriman manual atau otomatis.

Kebijakan deployment adalah resource Cloud Deploy yang dapat Anda gunakan untuk membatasi tindakan manual atau otomatis terhadap pipeline atau target pengiriman yang dipilih (atau semua pipeline atau target).

Perilaku apa yang dapat dibatasi?

Anda dapat membuat kebijakan deployment untuk membatasi atau mencegah Cloud Deploy melakukan tindakan tertentu pada peluncuran. Misalnya, kebijakan dapat mencegah pembuatan peluncuran untuk pipeline pengiriman tertentu selama jangka waktu yang ditentukan. Anda dapat menggunakan ini untuk batasan musiman, misalnya.

Cara kebijakan dievaluasi dan diterapkan

Untuk setiap tindakan manual atau otomatis, Cloud Deploy melakukan hal berikut:

  1. Memeriksa izin Identity and Access Management.

    Jika pengguna atau akun layanan tidak memiliki izin IAM yang memadai, tindakan tidak akan dilakukan dan tidak perlu mengevaluasi kebijakan deployment.

  2. Memeriksa apakah ada kebijakan yang berlaku untuk target atau pipeline penayangan, dan jika ada, kebijakan tersebut akan dievaluasi.

    • Cloud Deploy mengevaluasi tindakan yang diambil untuk melihat apakah aturan ini berlaku.

      Artinya, apakah jenis tindakan dan pemanggil cocok dengan kebijakan?

    • Cloud Deploy memeriksa rentang tanggal dan waktu yang ditentukan untuk kebijakan guna melihat apakah kebijakan tersebut berlaku pada saat permintaan.

    • Jika kebijakan berlaku dan aturan diterapkan ke pipeline pengiriman atau target dan tindakan, aturan tersebut akan diterapkan dan tindakan diblokir.

Persyaratan dan Batasan

  • Setiap kebijakan harus memiliki setidaknya satu pemilih.

  • Setiap kebijakan harus memiliki minimal satu aturan.

    Semua ID aturan harus unik dalam kebijakan deployment.

  • Setiap aturan harus memiliki setidaknya satu timeWindows, dan dalam timeWindows tersebut, harus ada oneTimeWindows atau weeklyWindows.

    Lihat Tanggal dan waktu untuk mengetahui detail selengkapnya tentang cara menggunakan blok waktu.

  • Anda dapat memiliki maksimal 1.000 kebijakan deployment per project/lokasi.

Peran dan izin Identity and Access Management yang diperlukan

Selain izin yang Anda perlukan untuk menjalankan pipeline pengiriman Cloud Deploy dan melakukan tugas yang akan dibatasi oleh kebijakan, ada beberapa izin yang diperlukan untuk melakukan operasi tertentu pada resource kebijakan:

  • clouddeploy.deployPolicies.create
  • clouddeploy.deployPolicies.delete
  • clouddeploy.deployPolicies.get
  • clouddeploy.deployPolicies.list
  • clouddeploy.deployPolicies.update
  • clouddeploy.deployPolicies.override

Izin tersebut disertakan dalam peran roles/clouddeploy.policyAdmin. Selain itu, peran roles/clouddeploy.policyOverrider mencakup izin .override.

Membuat kebijakan deployment

Pembuatan resource deploy-policy terdiri dari langkah-langkah berikut:

  1. Buat file YAML dengan konfigurasi kebijakan deployment.

    Konfigurasi ini mencakup header, yang mengidentifikasi resource sebagai kebijakan deployment. name wajib diisi.

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. Tambahkan referensi ke pipeline pengiriman dan target yang menerapkan kebijakan (selectors).

    Lihat Men-deploy pemilih kebijakan dan Referensi skema konfigurasi untuk mengetahui informasi selengkapnya tentang pemilih kebijakan dan cara mengonfigurasinya.

  3. Tambahkan satu atau beberapa kebijakan rules.

    Setiap aturan menjelaskan batasan dan keadaan yang menyebabkan batasan tersebut diberlakukan. Lihat Men-deploy aturan kebijakan dan Referensi skema konfigurasi untuk mengetahui informasi selengkapnya tentang aturan kebijakan dan cara mengonfigurasinya.

  4. Terapkan file tersebut untuk membuat kebijakan:

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    Dengan FILENAME adalah nama file YAML yang berisi definisi DeployPolicy, REGION adalah region tempat Anda ingin membuat resource kebijakan deployment, dan PROJECT_ID adalah project tempat Anda ingin membuat resource.

Pipeline atau target pengiriman yang dirujuk kini dibatasi sesuai dengan aturan dalam resource deploy-policy.

Men-deploy pemilih kebijakan

Pemilih, yang ditentukan dalam konfigurasi kebijakan deployment, menentukan alur pengiriman dan target mana yang terpengaruh oleh aturan tertentu.

Pemilih ditentukan dalam stanza selectors dalam konfigurasi kebijakan deployment, sebagai properti tingkat teratas:

selectors:
- deliveryPipeline:
    id:
    labels:
  target:
    id:
    labels:

Dalam YAML konfigurasi ini, deliveryPipeline.id menggunakan nama pipeline pengiriman, dan target.id menggunakan nama target (dalam kedua kasus, metadata.name).

Anda dapat menggunakan id: * untuk memilih semua pipeline pengiriman atau semua target. Perhatikan bahwa * adalah nilai kolom khusus untuk memilih semua—penggunaan karakter pengganti yang tidak ditentukan tidak didukung. Anda juga dapat menggunakan label untuk mencocokkan pipeline atau target pengiriman, atau keduanya.

Dalam pemilih tertentu, item digabungkan dengan AND. Beberapa pemilih di-OR-kan. Artinya, agar permintaan tertentu dibatasi oleh kebijakan, permintaan tersebut harus berlaku untuk setidaknya satu pemilih. Namun, dalam pemilih tersebut, permintaan harus cocok dengan semua item.

Men-deploy aturan kebijakan

Setiap kebijakan deployment mencakup satu atau beberapa aturan kebijakan, yang menentukan tindakan apa yang dibatasi dalam pipeline atau target pengiriman yang dipilih. Aturan ini juga menentukan dalam keadaan apa aturan diterapkan.

Aturan berikut tersedia:

  • rolloutRestriction

Aturan rolloutRestriction mencegah tindakan peluncuran tertentu dilakukan pada target yang dipilih yang digunakan oleh pipeline pengiriman yang dipilih. Aturan ini menggunakan jangka waktu yang menentukan kapan peluncuran tidak dapat dibuat untuk target dan pipeline pengiriman yang dipilih. Lihat Tanggal dan waktu untuk mengetahui deskripsi cara menentukan tanggal dan waktu dalam aturan kebijakan deployment.

Tindakan berikut dapat dibatasi saat aturan berlaku:

  • ADVANCE

    Fase peluncuran tidak dapat ditingkatkan.

  • APPROVE

    Peluncuran promosi tidak dapat disetujui.

  • CANCEL

    Peluncuran tidak dapat dibatalkan.

  • CREATE

    Peluncuran tidak dapat dibuat. Anda dapat membuat rilis jika kebijakan mencegah tindakan ini, tetapi rilis tersebut tidak akan memunculkan peluncuran.

  • IGNORE_JOB

    Tugas tidak dapat diabaikan.

  • RETRY_JOB

    Tugas tidak dapat dicoba lagi.

  • ROLLBACK

    Peluncuran tidak dapat di-roll back.

  • TERMINATE_JOBRUN

    Eksekusi tugas tidak dapat dihentikan

    Lihat Referensi skema konfigurasi untuk struktur YAML untuk aturan ini.

Tanggal dan waktu dalam aturan rolloutRestriction

Anda mengonfigurasi blok tanggal dan waktu untuk menentukan periode waktu berulang dan tidak berulang selama kebijakan deployment berlaku.

Berikut adalah persyaratan untuk menyatakan tanggal dan waktu:

  • Tanggal dinyatakan sebagai yyyy-mm-dd.

  • Saat menyatakan waktu dalam sehari, awal hari adalah 00:00, dan akhir hari adalah 24:00.

  • Untuk oneTimeWindows, tanggal harus menyertakan waktu. Untuk weeklyWindows, Anda dapat menghapus waktu dalam sehari. Namun, jika Anda menyertakan startTime, Anda harus menyertakan endTime, dan sebaliknya.

    Misalnya, pembekuan hanya pada hari Minggu akan dilakukan sebagai berikut:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
      endTime: "24:00"
    

    Anda juga dapat melakukan hal berikut:

    - daysOfWeek: [SUNDAY]
    

    Namun, bukan ini:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
    
  • Anda harus menyertakan zona waktu, dalam stanza timeWindows.

    Misalnya: timeZone: America/New_York.

Jangka waktu yang tidak berulang

Jendela waktu yang tidak berulang dimulai dan berakhir pada hari dan waktu tertentu. Anda akan menggunakan ini untuk setiap jangka waktu yang ingin Anda batasi peluncurannya.

Periode waktu yang tidak berulang dikonfigurasi menggunakan stanza oneTimeWindows.

Periode waktu berulang

Jangka waktu berulang menjelaskan blok waktu berulang saat Anda ingin membatasi peluncuran. Misalnya, Anda dapat menggunakannya untuk membatasi peluncuran pada akhir pekan.

Periode waktu berulang dikonfigurasi menggunakan stanza weeklyWindows.

Contoh

Bagian ini berisi beberapa contoh penggunaan tanggal dan waktu untuk mengonfigurasi kapan kebijakan deployment diterapkan.

Pembekuan tahunan

Jika ada waktu dalam setahun saat Anda ingin membekukan peluncuran, Anda dapat mengonfigurasi pemblokiran oneTimeWindows untuk melakukannya. Jika tanggalnya dapat diprediksi, dari tahun ke tahun, Anda tetap perlu menggunakan beberapa blok oneTimeWindow.

YAML berikut menunjukkan jangka waktu satu kali (tidak berulang) untuk menerapkan kebijakan deployment untuk pembekuan tahunan:

timeWindows:
  timeZone: "America/New_York"
  oneTimeWindows:
  - start: "2024-12-22 17:00"
    end: "2025-01-02 09:00"

YAML ini menjelaskan periode waktu dari 22 Desember 2024 pukul 17.00, hingga 2 Januari 2025 pukul 09.00.

Pembekuan berulang pada akhir pekan

YAML berikut menunjukkan periode waktu berulang untuk menerapkan kebijakan deployment yang membatasi peluncuran pada akhir pekan, dari Jumat pukul 17.00 hingga Senin pagi pukul 09.00:

timeWindows:
  timeZone: "America/New_York"
  weeklyWindows:
  - daysOfWeek: [FRIDAY]
    startTime: "17:00"
    endTime: "24:00"
  - daysOfWeek: [SATURDAY, SUNDAY]
    startTime: "00:00"
    endTime: "24:00"
  - daysOfWeek: [MONDAY]
    startTime: "00:00"
    endTime: "09:00"

Memperbarui kebijakan deployment

Memperbarui kebijakan deployment terdiri dari langkah-langkah berikut:

  1. Edit YAML konfigurasi kebijakan.

    Jika membuat kebijakan menggunakan konsol Google Cloud , Anda dapat mendapatkan konfigurasi YAML dengan memilih tab YAML di halaman Detail kebijakan deploy. Kemudian, Anda dapat menyalin teks tersebut ke file secara lokal dan mengeditnya di sana.

  2. Terapkan file tersebut untuk memperbarui kebijakan:

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    Tindakan ini akan memperbarui resource kebijakan deployment dengan konfigurasi baru.

Karena kebijakan deployment dievaluasi saat tindakan yang dibatasi dicoba, semua tindakan tersebut terhadap semua resource Cloud Deploy tunduk pada kebijakan yang diperbarui. Artinya, tidak ada sisa batasan sebelumnya. Misalnya, jika Anda memiliki blok restrictRollouts untuk seluruh bulan Desember, dan pada 14 Desember, Anda memperbarui kebijakan sehingga pembatasan berakhir pada 15 Desember, peluncuran tidak lagi diblokir setelah 15 Desember.

Mengganti kebijakan deployment

Anda dapat mengganti kebijakan deployment, jika perlu. Misalnya, jika ada masalah dengan deployment dalam produksi dan Anda perlu melakukan roll back, tetapi ada kebijakan deployment yang mencegah peluncuran apa pun, Anda dapat mengganti kebijakan tersebut untuk melakukan roll back peluncuran yang bermasalah.

Untuk mengganti kebijakan deployment, Anda harus memiliki izin IAM clouddeploy.deployPolicies.override.

Anda dapat mengganti kebijakan dari gcloud CLI atau menggunakan konsolGoogle Cloud :

console

  1. Di konsol Google Cloud , coba lakukan tindakan yang diblokir oleh kebijakan.

    Dialog akan ditampilkan yang menunjukkan bahwa tindakan diblokir oleh kebijakan deployment. Dialog ini menyertakan link ke kebijakan spesifik yang memblokir tindakan ini.

  2. Di kolom teks yang disediakan, ketik nama kebijakan dan klik Coba mengganti kebijakan.

    Jika Anda memiliki izin untuk mengganti kebijakan, Cloud Deploy akan menjalankan tindakan tersebut.

gcloud CLI

Untuk mengganti kebijakan deployment menggunakan gcloud CLI, tambahkan --override-deploy-policies ke perintah untuk tindakan apa pun yang akan dicegah oleh kebijakan tersebut. Misalnya, perintah berikut mempromosikan rilis, menggantikan kebijakan deployment tertentu yang seharusnya mencegah promosi:

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

Menghapus kebijakan deployment

Untuk menghapus kebijakan deployment:

console

  1. Di konsol Google Cloud , buka halaman Cloud Deploy Deploy policies.

    Buka halaman Deploy policies

    Halaman ini menyertakan daftar kebijakan deployment yang tersedia di project Anda saat ini, jika ada.

  2. Pilih tombol Tindakan untuk kebijakan yang ingin Anda hapus, lalu klik Hapus kebijakan deployment.

  3. Konfirmasi penghapusan dengan mengetik nama kebijakan deployment, lalu klik Konfirmasi.

    Kebijakan kini telah dihapus, dan Anda kini dapat melakukan tindakan apa pun yang dibatasi oleh kebijakan tersebut.

gcloud CLI

Untuk menghapus kebijakan deployment menggunakan gcloud CLI, jalankan perintah berikut:

 gcloud deploy deploy-policies delete \
    --project=[PROJECT] \
    --region=[REGION] \
    [POLICY_NAME]

Ganti kode berikut:

  • [POLICY_NAME]

    Nama kebijakan seperti yang ditentukan dalam file konfigurasi kebijakan.

  • [PROJECT]

    Project ID dari project Google Cloud tempat Anda membuat kebijakan deployment.

  • [REGION]

    Region tempat Anda membuat kebijakan deployment.

Setelah Anda menghapus resource kebijakan deployment, pipeline dan target pengiriman yang terpengaruh tidak lagi tunduk pada kebijakan tersebut, dan tidak akan dibatasi kecuali jika terpengaruh oleh kebijakan deployment lain.

Logging kebijakan deployment

Saat kebijakan deployment dievaluasi, entri log platform dibuat untuk tindakan berikut:

  • Evaluasi kebijakan

    Log platform ditulis saat permintaan dievaluasi dan melanggar kebijakan. Log juga ditulis saat kebijakan dilanggar oleh permintaan, tetapi permintaan diizinkan karena kebijakan ditangguhkan atau diganti. Tidak ada log yang ditulis saat permintaan diberikan karena kebijakan tidak dilanggar.

  • Kegagalan notifikasi Pub/Sub saat perubahan resource kebijakan deployment.

Langkah berikutnya