Tutorial ini menunjukkan cara memvalidasi konfigurasi dengan Cloud Build saat menggunakan cluster Google Kubernetes Engine. Penyiapan yang sama berfungsi di sistem CI/CD berbasis container lainnya, seperti CircleCI, dengan perubahan minimal.
Sebaiknya validasi setiap perubahan konfigurasi di pipeline CI/CD Anda di
samping memeriksa validitas konfigurasi dengan menjalankan perintah
nomos vet.
Tujuan
- Membuat file konfigurasi Cloud Build yang menginstruksikan Config Sync untuk menggunakan
nomos vetpada konfigurasi di repositori Anda. - Membuat pemicu Cloud Build sehingga konfigurasi Anda diperiksa setiap kali ada perubahan pada cabang pengembangan.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Sebelum memulai
- Login keakun Anda. Google Cloud 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.- Buat, atau miliki akses ke, cluster GKE yang memenuhi persyaratan untuk Config Sync. Untuk mengetahui detail cara membuat cluster tersebut, lihat Memulai Config Sync.
Memberikan izin akun layanan Cloud Build
Berikan izin akun layanan Cloud Build untuk mengakses cluster GKE 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
Buka halaman IAM di Google Cloud konsol.
Di kolom member , temukan baris dengan akun layanan Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.comDi baris tersebut, klik Edit akun utama.
Klik Add another role.
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 berjalanCLUSTER_NAME: nama cluster AndaPOLICY_DIR: jalur dalam repositori Git yang mewakili tingkat teratas repositori untuk disinkronkan
Ada tiga langkah dalam konfigurasi ini:
- Jalankan
kubectl config current-contextuntuk membuat file kubeconfig yang diperlukan untuk mengautentikasi ke cluster GKEmy-cluster. Pengguna root membuat file ini dengan izin terbatas. - Jalankan
chmod 444 /kube/configagar file ini dapat dibaca pada langkah berikutnya. - Jalankan
nomos vetdi repositori Git yang otomatis di-clone di/workspace. Jika Anda menggunakan repo tak terstruktur, jalankannomos vet --source-format=unstructuredsebagai gantinya.
Membuat pemicu build
Contoh berikut membuat pemicu yang berjalan untuk setiap commit ke cabang utama repositori Cloud Source Repositories.
Buka halaman Pemicu di Google Cloud konsol.
Klik Connect repository.
Pilih GitHub (mirrored), lalu klik Continue.
Pilih repositori Anda, lalu klik Connect repository.
Klik Add trigger.
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 or json) Lokasi file konfigurasi Cloud Build / cloudbuild.yaml Klik Create untuk menyimpan pemicu build Anda.
Menguji pemicu build
Uji penyiapan secara manual dengan menjalankan pemicu:
Buka halaman Pemicu di Google Cloud konsol.
Temukan pemicu yang Anda buat, lalu klik Run trigger.
Pesan "Build started on master branch" akan muncul.
Klik Show.
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 Anda 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 mengetahui informasi selengkapnya tentang struktur file konfigurasi Cloud Build, lihat Membuat konfigurasi Cloud Build
dasar.
Pembersihan
Menghapus project
Menghapus Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource satu per satu
Untuk menghapus resource satu per satu, selesaikan langkah-langkah berikut:
- Hapus file konfigurasi Cloud Build.
- Hapus pemicu Cloud Build yang Anda buat.
- Hapus cluster yang Anda gunakan untuk tutorial ini.