Memvalidasi konfigurasi

Tutorial ini menunjukkan cara memvalidasi konfigurasi dengan Cloud Build saat menggunakan cluster edisi Enterprise Google Kubernetes Engine (GKE). Penyiapan yang sama berfungsi di sistem CI/CD berbasis penampung lainnya, seperti CircleCI, dengan perubahan minimal.

Sebaiknya validasikan setiap perubahan konfigurasi di pipeline CI/CD Anda, selain memeriksa validitas konfigurasi dengan menjalankan perintah nomos vet.

Tujuan

  • Buat file konfigurasi Cloud Build yang menginstruksikan Config Sync untuk menggunakan nomos vet pada konfigurasi di repositori Anda.
  • Buat pemicu Cloud Build agar konfigurasi Anda diperiksa setiap kali ada perubahan pada cabang pengembangan.

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.

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. 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 Build API.

    Enable the API

  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 Build API.

    Enable the API

  8. Buat, atau miliki akses ke, cluster GKE Enterprise yang memenuhi persyaratan untuk Config Sync. Untuk mengetahui detail tentang cara membuat cluster tersebut, lihat Memulai Config Sync.

Memberikan izin akun layanan Cloud Build

Berikan izin akun layanan Cloud Build untuk mengakses cluster GKE Enterprise Anda.

gcloud

Untuk menambahkan peran Kubernetes Engine Developer ke akun layanan Cloud Build, jalankan perintah berikut:

PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUM=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member=serviceAccount:$PROJECT_NUM@cloudbuild.gserviceaccount.com \
    --role=roles/container.developer

Konsol

  1. Buka halaman IAM di konsol Google Cloud.

    Buka halaman IAM

  2. Di kolom member, temukan baris dengan akun layanan Cloud Build:

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. Di baris tersebut, klik Edit akun utama.

  4. Klik Add another role.

  5. Di daftar Select a role, pilih Kubernetes Engine Developer, lalu klik Save.

Membuat konfigurasi Cloud Build

Buat file konfigurasi Cloud Build dan simpan di direktori root repositori yang berisi file konfigurasi Anda (misalnya, my-repo/cloudbuild.yaml).

steps:
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['config', 'current-context']
  volumes:
  - name: 'kube'
    path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  - 'CLOUDSDK_COMPUTE_ZONE=ZONE'
  - 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
  - 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
- name: 'bash'
  args: ['chmod', '444', '/kube/config']
  volumes:
  - name: 'kube'
    path: '/kube'
- name: 'gcr.io/config-management-release/nomos:stable'
  args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
  volumes:
  - name: 'kube'
    path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  timeout: 30s

Ganti kode berikut:

  • ZONE: zona tempat cluster Anda berjalan
  • CLUSTER_NAME: nama cluster Anda
  • POLICY_DIR: jalur dalam repositori Git yang mewakili tingkat teratas repositori yang akan disinkronkan

Ada tiga langkah dalam konfigurasi ini:

  1. Jalankan kubectl config current-context untuk membuat file kubeconfig yang diperlukan untuk mengautentikasi ke cluster GKE my-cluster. Pengguna root membuat file ini dengan izin terbatas.
  2. Jalankan chmod 444 /kube/config agar file ini dapat dibaca di langkah berikutnya.
  3. Jalankan nomos vet di repositori Git yang otomatis di-clone di /workspace. Jika Anda menggunakan repo tidak terstruktur, jalankan nomos vet --source-format=unstructured sebagai gantinya.

Membuat pemicu build

Contoh berikut membuat pemicu yang berjalan untuk setiap commit ke cabang master repositori Cloud Source Repositories.

  1. Buka halaman Pemicu di konsol Google Cloud.

    Buka halaman pemicu

  2. Klik Connect repository.

  3. Pilih GitHub (diduplikasi), lalu klik Continue.

  4. Pilih repositori Anda, lalu klik Connect repository.

  5. Klik Tambahkan pemicu.

  6. Masukkan atau pilih entri yang sesuai di setiap kolom yang dijelaskan dalam tabel berikut:

    Kolom Entri
    Acara Push to a branch
    Cabang ^master$
    Konfigurasi Cloud Build configuration file (yaml atau json)
    Lokasi file konfigurasi Cloud Build / cloudbuild.yaml
  7. Klik Buat untuk menyimpan pemicu build Anda.

Menguji pemicu build

Uji penyiapan secara manual dengan menjalankan pemicu:

  1. Buka halaman Pemicu di konsol Google Cloud.

    Buka halaman pemicu

  2. Temukan pemicu yang Anda buat, lalu klik Run trigger.

    Pesan "Build dimulai di cabang master" akan muncul.

  3. Klik Tampilkan.

    Langkah-langkah Cloud Build akan berwarna hijau jika disiapkan dengan benar.

Konfigurasi Cloud Build tidak valid

Pemicu tidak dapat berjalan jika file konfigurasi Cloud Build tidak valid.

Untuk mengujinya, perbarui konfigurasi Cloud Build di repositori Anda dengan file berikut. Perhatikan indentasi yang tidak valid pada baris 6:

steps:
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['config', 'current-context']
  volumes:
  - name: 'kube'
  path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  - 'CLOUDSDK_COMPUTE_ZONE=ZONE'
  - 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
  - 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
- name: 'bash'
  args: ['chmod', '444', '/kube/config']
  volumes:
  - name: 'kube'
    path: '/kube'
- name: 'gcr.io/nomos-release/nomos:stable'
  args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
  volumes:
  - name: 'kube'
    path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  timeout: 30s

Jika menjalankan pemicu lagi secara manual, Anda akan menerima pesan error berikut karena path: di baris 6 tidak diindentasi dengan benar:

Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.

Untuk memperbaiki konfigurasi ini, indentasi path: di baris 6 ke tingkat yang sama dengan name: di baris 5. Untuk informasi selengkapnya tentang struktur file konfigurasi Cloud Build, lihat Membuat konfigurasi Cloud Build dasar.

Pembersihan

Menghapus project

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

Untuk menghapus setiap resource, selesaikan langkah-langkah berikut:

  1. Hapus file konfigurasi Cloud Build.
  2. Hapus pemicu Cloud Build yang Anda buat.
  3. Hapus cluster yang Anda gunakan untuk tutorial ini.

Langkah selanjutnya