arrow_back

Continuous Delivery dengan Jenkins di Kubernetes Engine

Login Gabung
Dapatkan akses ke 700+ lab dan kursus

Continuous Delivery dengan Jenkins di Kubernetes Engine

Lab 1 jam 15 menit universal_currency_alt 5 Kredit show_chart Menengah
info Lab ini mungkin menggabungkan alat AI untuk mendukung pembelajaran Anda.
Dapatkan akses ke 700+ lab dan kursus

GSP051

Logo lab mandiri Google Cloud

Ringkasan

Di lab ini, Anda akan mempelajari cara menyiapkan pipeline continuous delivery dengan Jenkins di Kubernetes Engine. Jenkins adalah server otomatisasi andalan para developer yang sering mengintegrasikan kode dalam repositori bersama. Solusi yang Anda bangun di lab ini mirip dengan diagram berikut:

Arsitektur Jenkins dan Kubernetes

Di Cloud Architecture Center, lihat Jenkins di Kubernetes Engine untuk mempelajari lebih lanjut cara menjalankan Jenkins di Kubernetes.

Yang akan Anda pelajari

Di lab ini, Anda akan menyelesaikan tugas-tugas berikut untuk mempelajari cara menjalankan Jenkins di Kubernetes:

  • Menyediakan aplikasi Jenkins ke dalam cluster Kubernetes Engine
  • Menyiapkan aplikasi Jenkins menggunakan Pengelola Paket Helm
  • Mempelajari fitur-fitur aplikasi Jenkins
  • Membuat dan menggunakan pipeline Jenkins

Prasyarat

Ini adalah lab tingkat lanjut. Sebelum mengikutinya, Anda harus setidaknya sudah memahami dasar-dasar pemrograman shell, Kubernetes, dan Jenkins. Berikut adalah beberapa lab yang dapat melengkapi pengetahuan Anda:

Setelah Anda siap, scroll ke bawah untuk mempelajari Kubernetes, Jenkins, dan Continuous Delivery lebih lanjut.

Apa yang dimaksud dengan Kubernetes Engine?

Kubernetes Engine adalah versi Kubernetes yang dihosting oleh Google Cloud dan merupakan sistem pengelola cluster dan orkestrasi container yang canggih. Kubernetes adalah project open source yang dapat berjalan di berbagai lingkungan, dari laptop hingga cluster multi-node dengan ketersediaan tinggi, dari virtual machine hingga server khusus (bare metal). Seperti yang disebutkan sebelumnya, aplikasi Kubernetes dibuat di container, yaitu aplikasi ringan yang dipaketkan dengan semua dependensi dan library yang diperlukan untuk menjalankannya. Struktur dasar ini menyediakan aplikasi Kubernetes yang aman, cepat di-deploy, dan memiliki ketersediaan tinggi, sehingga menjadikannya sebuah framework yang ideal untuk developer cloud.

Apa yang dimaksud dengan Jenkins?

Jenkins adalah server otomatisasi open source yang memungkinkan Anda mengorkestrasi pipeline build, pengujian, dan deployment secara fleksibel. Jenkins memungkinkan developer untuk melakukan iterasi pada project secara cepat tanpa perlu mengkhawatirkan masalah overhead yang dapat muncul dari continuous delivery.

Apa yang dimaksud dengan Continuous Delivery/Deployment Berkelanjutan?

Jika Anda harus menyiapkan pipeline continuous delivery (CD), men-deploy Jenkins di Kubernetes Engine akan memberikan lebih banyak manfaat penting dibandingkan dengan deployment berbasis VM standar.

Jika proses build Anda menggunakan container, satu host virtual dapat menjalankan tugas di beberapa sistem operasi. Kubernetes Engine menyediakan ephemeral build executors yang hanya digunakan ketika build aktif berjalan, sehingga meninggalkan resource untuk tugas cluster lainnya seperti tugas batch processing. Manfaat lain dari ephemeral build executors ialah kecepatan, sehingga proses peluncuran berlangsung hanya dalam hitungan detik.

Kubernetes Engine juga dilengkapi dengan load balancer global Google yang dapat Anda gunakan untuk mengotomatiskan pemilihan rute traffic web ke instance. Load balancer menangani penghentian SSL dan menggunakan alamat IP global yang dikonfigurasikan dengan jaringan backbone Google. Jika digunakan bersama web front, load balancer ini selalu menempatkan pengguna di jalur tercepat ke instance aplikasi.

Setelah Anda mempelajari sedikit tentang Kubernetes, Jenkins, dan cara keduanya berinteraksi dalam pipeline CD, sekarang saatnya untuk membangunnya.

Penyiapan dan persyaratan

Sebelum mengklik tombol Start Lab

Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.

Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran. Di sebelah kiri ada panel Lab Details yang berisi hal-hal berikut:

    • Tombol Open Google Cloud console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).

    Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.

    {{{user_0.username | "Username"}}}

    Anda juga dapat menemukan Username di panel Lab Details.

  4. Klik Next.

  5. Salin Password di bawah dan tempel ke dialog Welcome.

    {{{user_0.password | "Password"}}}

    Anda juga dapat menemukan Password di panel Lab Details.

  6. Klik Next.

    Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  7. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan mendaftar uji coba gratis.

Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.

Catatan: Untuk mengakses produk dan layanan Google Cloud, klik Navigation menu atau ketik nama layanan atau produk di kolom Search. Ikon Navigation menu dan kolom Search

Mengaktifkan Cloud Shell

Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas Konsol Google Cloud.

  2. Klik jendela berikut:

    • Lanjutkan melalui jendela informasi Cloud Shell.
    • Beri otorisasi ke Cloud Shell untuk menggunakan kredensial Anda guna melakukan panggilan Google Cloud API.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke Project_ID, . Output berisi baris yang mendeklarasikan Project_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke {{{project_0.project_id | "PROJECT_ID"}}}

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

Output:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Untuk menetapkan akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar ID project dengan perintah ini:
gcloud config list project

Output:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Tugas 1. Mendownload kode sumber

Dalam tugas ini, Anda akan mendownload kode sumber untuk lab ini.

  1. Sebagai persiapan, buka sesi baru di Cloud Shell dan jalankan perintah berikut untuk menetapkan zona Anda :
gcloud config set compute/zone {{{project_0.default_zone}}}
  1. Lalu, salin kode contoh lab:
gsutil cp gs://spls/gsp051/continuous-deployment-on-kubernetes.zip . unzip continuous-deployment-on-kubernetes.zip
  1. Selanjutnya, ubah ke direktori yang benar:
cd continuous-deployment-on-kubernetes

Tugas 2. Menyediakan Jenkins

Membuat cluster Kubernetes dan mengaktifkan Jenkins untuk mengakses repositori GitHub dan Google Container Registry.

Membuat cluster Kubernetes

  1. Sekarang, jalankan perintah berikut untuk menyediakan cluster Kubernetes:
gcloud container clusters create jenkins-cd \ --num-nodes 2 \ --machine-type e2-standard-2 \ --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform"

Langkah ini dapat memakan waktu beberapa menit. Cakupan ekstra memungkinkan Jenkins mengakses Repositori GitHub dan Google Container Registry.

Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika cluster Kubernetes berhasil dibuat, Anda akan melihat skor penilaian.

Membuat cluster Kubernetes (zona: )
  1. Sebelum melanjutkan, konfirmasi bahwa cluster Anda berjalan dengan menjalankan perintah berikut:
gcloud container clusters list

Memberi kredensial untuk cluster

  1. Dapatkan kredensial untuk cluster Anda:
gcloud container clusters get-credentials jenkins-cd
  1. Kubernetes Engine menggunakan kredensial ini untuk mengakses cluster yang baru disediakan. Pastikan Anda dapat menghubungkannya dengan menjalankan perintah berikut:
kubectl cluster-info

Tugas 3. Menyiapkan Helm

Helm adalah pengelola paket yang memudahkan konfigurasi dan deployment aplikasi Kubernetes. Setelah menginstal Jenkins, Anda dapat menyiapkan pipeline CI/CD.

Dalam tugas ini, Anda akan menggunakan Helm untuk menginstal Jenkins dari repositori Chart.

  1. Tambahkan repositori chart stabil Helm:
helm repo add jenkins https://charts.jenkins.io
  1. Pastikan repo selalu terbaru:
helm repo update

Tugas 4. Menginstal dan mengonfigurasi Jenkins

Saat menginstal Jenkins, file values dapat digunakan sebagai template untuk memberikan nilai yang diperlukan untuk penyiapan.

Anda akan menggunakan file values kustom untuk secara otomatis mengonfigurasi lingkungan Kubernetes di Google Cloud dan menambahkan plugin yang diperlukan sebagai berikut:

  • Kubernetes:latest
  • Workflow-multibranch:latest
  • Git:latest
  • Configuration-as-code:latest
  • Google-oauth-plugin:latest
  • Google-source-plugin:latest
  • Google-storage-plugin:latest

Tindakan ini memungkinkan Jenkins terhubung ke cluster dan project Google Cloud Anda.

  1. Gunakan Helm CLI untuk men-deploy chart dengan setelan konfigurasi Anda:
helm install cd jenkins/jenkins -f jenkins/values.yaml --wait

Pemrosesan perintah ini dapat membutuhkan waktu beberapa menit.

Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika chart Jenkins telah berhasil dikonfigurasi, Anda akan melihat skor penilaian.

Mengonfigurasi dan menginstal Jenkins
  1. Setelah pemrosesan perintah tersebut selesai, pastikan pod Jenkins beralih ke status Running dan container berada dalam status READY:
kubectl get pods

Contoh Output:

NAME READY STATUS RESTARTS AGE cd-jenkins-7c786475dd-vbhg4 2/2 Running 0 1m
  1. Konfigurasi akun layanan Jenkins agar dapat men-deploy ke cluster:
kubectl create clusterrolebinding jenkins-deploy --clusterrole=cluster-admin --serviceaccount=default:cd-jenkins

Anda akan menerima output berikut:

clusterrolebinding.rbac.authorization.k8s.io/jenkins-deploy created
  1. Jalankan perintah berikut untuk menyiapkan penerusan port ke UI Jenkins dari Cloud Shell:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
  1. Sekarang, pastikan Layanan Jenkins telah dibuat dengan benar:
kubectl get svc

Contoh Output:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE cd-jenkins 10.35.249.67 8080/TCP 3h cd-jenkins-agent 10.35.248.1 50000/TCP 3h kubernetes 10.35.240.1 443/TCP 9h

Anda akan menggunakan Plugin Kubernetes, sehingga node builder akan otomatis diluncurkan saat diperlukan jika master Jenkins memintanya. Setelah menyelesaikan tugasnya, node builder akan otomatis dinonaktifkan dan resource-nya akan ditambahkan kembali ke resource pool cluster.

Perhatikan bahwa layanan ini mengekspos port 8080, dan 50000 untuk tiap pod yang sesuai dengan selector. Tindakan ini akan mengekspos UI web Jenkins dan port registrasi builder/agen di dalam cluster Kubernetes. Selain itu, layanan jenkins-ui diekspos menggunakan ClusterIP sehingga tidak dapat diakses dari luar cluster.

Tugas 5. Terhubung ke Jenkins

Ambil sandi admin dan login ke antarmuka Jenkins.

  1. Chart Jenkins akan otomatis membuat sandi admin untuk Anda. Untuk mengambilnya, jalankan:
printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  1. Untuk membuka antarmuka pengguna Jenkins, di panel tindakan Cloud Shell, klik Web Preview (Ikon Web Preview) Preview on port 8080:

  2. Jika diminta, login dengan nama pengguna admin dan sandi yang dibuat secara otomatis.

Jenkins sekarang sudah selesai disiapkan di cluster Kubernetes Anda. Jenkins akan menggerakkan pipeline CI/CD otomatis Anda di bagian berikutnya.

Tugas 6. Memahami aplikasi

Dalam tugas ini, Anda akan men-deploy aplikasi contoh, gceme, di pipeline deployment berkelanjutan. Aplikasi ini ditulis dalam bahasa Go dan berada di direktori sample-app repo. Saat Anda menjalankan program biner gceme di instance Compute Engine, aplikasi akan menampilkan metadata instance dalam kartu info.

Aplikasi akan meniru microservice dengan mendukung dua mode operasi.

  • Di mode backend: gceme memproses port 8080 lalu mengembalikan metadata instance Compute Engine dalam format JSON.
  • Di mode frontend: gceme membuat kueri ke layanan gceme backend dan merender JSON yang dihasilkan di antarmuka pengguna.

diagram arsitektur gceme

Tugas 7. Men-deploy aplikasi

Deploy aplikasi ke dalam dua lingkungan berbeda:

  • Produksi: Situs live yang diakses oleh pengguna Anda.
  • Canary: Situs berkapasitas lebih kecil yang hanya menerima sebagian dari traffic pengguna Anda. Gunakan lingkungan ini untuk memvalidasi software dengan traffic live sebelum dirilis ke semua pengguna.
  1. Di Google Cloud Shell, buka direktori aplikasi contoh:
cd sample-app
  1. Buat namespace Kubernetes untuk mengisolasi deployment secara logis:
kubectl create ns production
  1. Buat deployment produksi dan canary, serta layanan menggunakan perintah kubectl apply:
kubectl apply -f k8s/production -n production kubectl apply -f k8s/canary -n production kubectl apply -f k8s/services -n production

Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika deployment berhasil dibuat, Anda akan melihat skor penilaian.

Membuat deployment produksi dan canary

Secara default, hanya satu replika frontend yang di-deploy. Gunakan perintah kubectl scale untuk memastikan setidaknya ada 4 replika yang selalu berjalan.

  1. Tingkatkan skala frontend lingkungan produksi dengan menjalankan perintah berikut:
kubectl scale deployment gceme-frontend-production -n production --replicas 4
  1. Selanjutnya, konfirmasi bahwa ada 5 pod yang berjalan untuk frontend, yaitu 4 pod untuk traffic produksi dan 1 pod untuk rilis terbatas (perubahan pada rilis terbatas hanya memengaruhi 1 dari 5 (20%) pengguna):
kubectl get pods -n production -l app=gceme -l role=frontend
  1. Konfirmasi pula bahwa Anda memiliki 2 pod untuk backend, yaitu 1 pod untuk produksi dan 1 pod untuk canary:
kubectl get pods -n production -l app=gceme -l role=backend
  1. Ambil IP eksternal untuk layanan produksi:
kubectl get service gceme-frontend -n production Catatan: Perlu waktu beberapa menit sebelum Anda dapat melihat alamat IP eksternal load balancer.

Contoh Output:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gceme-frontend LoadBalancer 10.79.241.131 104.196.110.46 80/TCP 5h

Tempel External IP ke browser untuk melihat kartu info yang ditampilkan di kartu. Anda akan mendapatkan halaman serupa berikut:

Backend yang melayani permintaan ini

  1. Sekarang, simpan IP load balancer layanan frontend di suatu variabel lingkungan untuk digunakan nanti:
export FRONTEND_SERVICE_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend)
  1. Konfirmasi bahwa kedua layanan dapat berfungsi dengan membuka alamat IP eksternal frontend di browser Anda.

  2. Periksa output versi layanan dengan menjalankan perintah berikut (harus terbaca 1.0.0):

curl http://$FRONTEND_SERVICE_IP/version

Anda telah berhasil men-deploy aplikasi contoh. Selanjutnya, Anda akan menyiapkan pipeline untuk men-deploy perubahan Anda secara berkelanjutan dan andal.

Tugas 8. Membuat pipeline Jenkins

Dalam tugas ini, Anda akan membuat pipeline Jenkins sebagai berikut:

  • Membuat repositori untuk menghosting kode sumber
  • Menambahkan kredensial untuk memberi Jenkins akses ke repositori kode
  • Mengonfigurasi Cloud Jenkins untuk Kubernetes
  • Mengautentikasi Jenkins dengan repositori pribadi GitHub
  • Membuat tugas Jenkins

Membuat repositori untuk menghosting kode sumber aplikasi contoh

  1. Buat salinan aplikasi contoh gceme dan kirim ke Repositori GitHub:

Di Cloud Shell, jalankan perintah berikut untuk mengonfigurasi Git dan GitHub:

curl -sS https://webi.sh/gh | sh gh auth login gh api user -q ".login" GITHUB_USERNAME=$(gh api user -q ".login") git config --global user.name "${GITHUB_USERNAME}" git config --global user.email "${USER_EMAIL}" echo ${GITHUB_USERNAME} echo ${USER_EMAIL}
  • Tekan ENTER untuk menerima opsi default.
  • Baca petunjuk dalam output perintah untuk login ke GitHub dengan browser web.

Setelah berhasil login, nama pengguna GitHub Anda akan muncul di output di Cloud Shell.

gh repo create default --private

Anda dapat mengabaikan peringatan karena Anda tidak akan dikenai biaya untuk repositori ini.

git init
  1. Lakukan inisialisasi direktori sample-app sebagai repositori Git miliknya sendiri:
git config credential.helper gcloud.sh
  1. Jalankan perintah berikut:
git remote add origin https://github.com/${GITHUB_USERNAME}/default
  1. Tambahkan, commit, dan kirim file:
git add . git commit -m "Initial commit" git push origin master

Menambahkan kredensial akun layanan Anda

Konfigurasikan kredensial Anda agar Jenkins dapat mengakses repositori kode. Jenkins akan menggunakan kredensial akun layanan cluster Anda untuk mendownload kode dari repositori GitHub.

  1. Di antarmuka pengguna Jenkins, klik Manage Jenkins di navigasi sebelah kiri, lalu klik Security > Credentials.

  2. Klik System.

Halaman Credentials

  1. Klik Global credentials (unrestricted).

  2. Klik Add Credentials di pojok kanan atas.

  3. Pilih Google Service Account from metadata dari drop-down Kind.

  4. Di kolom ID, masukkan Project ID, lalu klik Create.

Catatan: `Project ID` dapat ditemukan di bagian `CONNECTION DETAILS` pada lab.

Kredensial global telah ditambahkan.

Halaman Global credentials (unrestricted)

Mengonfigurasi Cloud Jenkins untuk Kubernetes

  1. Di antarmuka pengguna Jenkins, pilih Manage Jenkins > Nodes.
  2. Klik Clouds pada panel navigasi sebelah kiri.
  3. Klik New cloud.
  4. Ketik nama apa saja di bawah Cloud name, lalu pilih Kubernetes untuk Type.
  5. Klik Create.
  6. Pada kolom Jenkins URL, masukkan nilai berikut: http://cd-jenkins:8080
  7. Pada kolom Jenkins tunnel, masukkan nilai berikut: cd-jenkins-agent:50000
  8. Klik Save.

Mengautentikasi Jenkins dengan repositori pribadi GitHub menggunakan kunci SSH

Untuk mengautentikasi Jenkins dengan repositori pribadi GitHub menggunakan kunci SSH, ikuti langkah-langkah di bawah:

a. Membuat Kunci SSH

  1. Buat kunci SSH GitHub yang baru, dengan github-email adalah alamat email GitHub Anda:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C [your-github-email]
  1. Untuk mendownload kunci pribadi (id_github) dan kunci publik (id_github.pub) dari komputer lokal, di panel tindakan Cloud Shell, klik More (Ikon More) lalu pilih folder continuous-deployment-on-kubernetes/sample-app.

b. Menambahkan kunci publik ke GitHub

Setelah membuat kunci SSH, Anda perlu menambahkan kunci publik ke GitHub agar Jenkins dapat mengakses repositori Anda.

  1. Buka akun GitHub Anda. Klik profil GitHub Anda, lalu buka Settings.

  2. Dari menu samping, pilih SSH and GPG keys.

  3. Klik New SSH key.

  4. Masukkan judul SSH_KEY_LAB.

  5. Tempel konten kunci publik Anda (id_github.pub) yang didownload dari jalur (~/continuous-deployment-on-kubernetes/sample-app/id_github.pub) ke kolom Key. Anda juga dapat menambahkan nama deskriptif di kolom Title.

  6. Klik Add SSH key.

c. Mengonfigurasi Jenkins untuk menggunakan kunci SSH

  1. Buka Jenkins, lalu pilih Manage Jenkins dari dasbor utama.

  2. Pilih opsi Credentials.

  3. Di bagian Stores scoped to Jenkins, klik System.

  4. Klik Global credentials (unrestricted).

  5. Klik Add Credentials.

  6. Di menu dropdown Kind, pilih SSH Username with private key.

  7. Untuk ID, masukkan _ssh_key.

  8. Untuk Username, ketik [nama pengguna GitHub Anda]

  9. Pilih Enter directly untuk kunci pribadi, lalu klik Add. Tempel konten file id_github (didownload dari ~/continuous-deployment-on-kubernetes/sample-app/id_github).

  10. Klik Create.

d. Menambahkan kunci SSH publik ke host yang dikenal

Di Cloud Shell, buat file bernama known_hosts.github dan tambahkan kunci SSH publik ke file ini.

ssh-keyscan -t rsa github.com > known_hosts.github chmod +x known_hosts.github cat known_hosts.github Catatan: Jika Anda melihat error di Cloud Shell, tekan CTRL+C, lalu jalankan perintah di atas.

e. Mengonfigurasi kunci host yang diketahui

  1. Klik Dashboard > Manage Jenkins di panel kiri.

  2. Di bagian Security. Klik Security.

  3. Di bagian Git Host Key Verification Configuration untuk Host Key Verification Strategy, pilih Manually provided keys dari menu drop-down.

  4. Tempel konten file known hosts.github di Approved Host Keys.

  5. Klik Save.

Membuat tugas Jenkins

Buka antarmuka pengguna Jenkins Anda, lalu ikuti langkah-langkah berikut untuk mengonfigurasi tugas Pipeline.

  1. Klik Dashboard > New Item pada panel sebelah kiri.

  2. Beri nama project sample-app, lalu pilih opsi Multibranch Pipeline dan klik OK.

  3. Di halaman berikutnya, di bagian Branch Sources, pilih Git dari menu dropdown Add Source.

  4. Tempel URL clone HTTPS dari repositori sample-app di bagian kolom Project Repository. Ganti ${GITHUB_USERNAME} dengan nama pengguna GitHub Anda:

git@github.com:${GITHUB_USERNAME}/default.git
  1. Dari opsi menu Credentials, pilih nama kredensial GitHub.

  2. Di bagian Scan Multibranch Pipeline Triggers, centang kotak Periodically if not otherwise run, lalu tetapkan nilai Interval ke 1 minute.

  3. Biarkan semua opsi lain tetap pada nilai defaultnya, lalu klik Save.

Setelah Anda menyelesaikan langkah-langkah ini, tugas yang bernama Branch indexing akan berjalan. Tugas meta ini mengidentifikasi cabang di repositori Anda dan memastikan tidak terjadi perubahan di cabang yang ada. Jika Anda mengklik sample-app di kiri atas, tugas master akan terlihat.

Catatan: Tugas master pertama yang dijalankan mungkin akan terus gagal hingga Anda membuat beberapa perubahan kode di langkah berikutnya.

Anda telah berhasil membuat pipeline Jenkins! Selanjutnya, Anda akan membuat lingkungan pengembangan untuk continuous integration.

Tugas 9. Membuat lingkungan pengembangan

Cabang pengembangan adalah sekumpulan lingkungan yang digunakan oleh developer Anda untuk menguji perubahan kode sebelum mengirimkannya untuk diintegrasikan ke situs live. Lingkungan ini adalah versi kecil dari aplikasi Anda, tetapi perlu di-deploy menggunakan mekanisme yang sama dengan lingkungan aktif.

Membuat cabang pengembangan

Untuk membuat lingkungan pengembangan dari cabang fitur, Anda dapat mengirimkan cabang ke server Git dan membiarkan Jenkins men-deploy lingkungan.

Catatan: Jika Anda melihat error di Cloud Shell, tekan CTRL+C, lalu jalankan perintah di bawah.
  • Buat cabang pengembangan, lalu kirimkan ke server Git:
git checkout -b new-feature

Mengubah definisi pipeline

Jenkinsfile yang mendefinisikan pipeline tersebut ditulis menggunakan sintaksis Jenkins Pipeline Groovy. Dengan menggunakan Jenkinsfile, seluruh pipeline build dapat diekspresikan dalam satu file yang aktif bersama kode sumber Anda. Pipeline mendukung fitur-fitur canggih, seperti paralelisasi, dan memerlukan persetujuan pengguna secara manual.

Agar pipeline dapat bekerja seperti yang diharapkan, Anda harus memodifikasi Jenkinsfile untuk menetapkan project ID.

  1. Buka Jenkinsfile di editor terminal, misalnya vi:
vi Jenkinsfile
  1. Mulai editor:
i
  1. Tambahkan PROJECT_ID ke nilai REPLACE_WITH_YOUR_PROJECT_ID. (PROJECT_ID Anda adalah Project ID yang ditemukan di bagian CONNECTION DETAILS pada lab. Anda juga dapat menjalankan gcloud config get-value project untuk menemukannya.

  2. Ubah nilai CLUSTER_ZONE menjadi . Anda bisa mendapatkan nilai ini dengan menjalankan gcloud config get compute/zone.

PROJECT = "REPLACE_WITH_YOUR_PROJECT_ID" APP_NAME = "gceme" FE_SVC_NAME = "${APP_NAME}-frontend" CLUSTER = "jenkins-cd" CLUSTER_ZONE = "{{{project_0.default_zone}}}" IMAGE_TAG = "gcr.io/${PROJECT}/${APP_NAME}:${env.BRANCH_NAME}.${env.BUILD_NUMBER}" JENKINS_CRED = "${PROJECT}"
  1. Simpan file Jenkinsfile: tekan tombol Esc, lalu (untuk pengguna vi):
:wq

Memodifikasi situs

Untuk menunjukkan perubahan aplikasi, Anda akan mengubah warna kartu gceme dari biru menjadi oranye.

  1. Buka html.go:
vi html.go
  1. Mulai editor:
i
  1. Ganti dua instance <div class="card blue"> dengan kode berikut:
<div class="card orange">
  1. Simpan file html.go: tekan tombol Esc, lalu:
:wq
  1. Buka main.go:
vi main.go
  1. Mulai editor:
i
  1. Versi ditentukan di baris ini:
const version string = "1.0.0"

Perbarui kode menjadi berikut:

const version string = "2.0.0"
  1. Simpan file main.go sekali lagi: tekan tombol Esc, lalu:
:wq

Tugas 10. Memulai deployment

Dalam tugas ini, Anda akan men-deploy lingkungan pengembangan.

  1. Commit dan kirim perubahan Anda:
git add Jenkinsfile html.go main.go git commit -m "Version 2.0.0" git push origin new-feature

Tindakan ini akan memulai build lingkungan pengembangan Anda.

Setelah perubahan dikirimkan ke repositori Git, buka antarmuka pengguna Jenkins tempat Anda dapat melihat bahwa build untuk cabang new-feature telah dimulai. Diperlukan waktu hingga satu menit hingga perubahan mulai berlaku.

  1. Setelah build berjalan, klik panah bawah di sebelah build di menu navigasi kiri, lalu pilih Console output:

Panel navigasi

  1. Lacak output build selama beberapa menit dan perhatikan pesan kubectl --namespace=new-feature apply... sebagai awalnya. Cabang new-feature kini di-deploy ke cluster.
Catatan: Dalam skenario pengembangan, Anda tidak akan menggunakan load balancer yang ditampilkan kepada publik. Untuk membantu mengamankan aplikasi, Anda dapat menggunakan proxy kubectl. Proxy tersebut mengautentikasi dirinya sendiri dengan Kubernetes API dan menjalankan proxy permintaan dari mesin lokal Anda ke layanan di cluster tanpa mengekspos layanan Anda ke Internet.

Jika Anda tidak melihat apa pun di Build Executor, jangan khawatir. Cukup buka halaman beranda Jenkins > sample app. Pastikan pipeline new-feature telah dibuat.

  1. Setelah semuanya diatasi, mulai proxy di latar belakang:
kubectl proxy &
  1. Jika terhenti, tekan Ctrl+C untuk keluar. Verifikasi bahwa aplikasi Anda dapat diakses dengan mengirimkan permintaan ke localhost dan proxy kubectl akan meneruskannya ke layanan Anda:
curl \ http://localhost:8001/api/v1/namespaces/new-feature/services/gceme-frontend:80/proxy/version

Anda akan melihatnya merespons dengan 2.0.0 yang merupakan versi yang berjalan sekarang.

Jika Anda menerima error serupa:

{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "no endpoints available for service \"gceme-frontend:80\"", "reason": "ServiceUnavailable", "code": 503
  1. Ini berarti endpoint frontend Anda belum diterapkan. Tunggu sebentar, lalu coba kembali perintah curl. Lanjutkan jika Anda mendapatkan output berikut:
2.0.0

Anda telah menyiapkan lingkungan pengembangan. Selanjutnya, bangun hal yang telah dipelajari dalam modul sebelumnya dengan men-deploy rilis terbatas untuk menguji fitur baru.

Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika berhasil memulai build untuk cabang fitur baru, Anda akan melihat skor penilaian.

Membangun untuk cabang new-feature

Tugas 11. Men-deploy rilis terbatas

Anda telah memverifikasi bahwa aplikasi Anda menjalankan kode terbaru di lingkungan pengembangan. Selanjutnya, deploy kode tersebut ke lingkungan canary.

  1. Buat cabang canary, lalu kirimkan ke server Git:
git checkout -b canary git push origin canary
  1. Di Jenkins, Anda akan melihat bahwa pipeline canary telah dimulai. Setelah selesai, Anda dapat memeriksa URL layanan untuk memastikan versi baru Anda menyajikan sebagian traffic. Anda akan melihat sekitar 1 dari 5 permintaan (tanpa urutan tertentu) menampilkan versi 2.0.0:
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. Jika Anda tetap melihat versi 1.0.0, coba jalankan kembali perintah di atas. Setelah Anda memverifikasi bahwa cara di atas berfungsi dengan baik, akhiri perintah dengan menekan Ctrl+C.

Selesai. Anda telah men-deploy rilis terbatas. Berikutnya, Anda akan men-deploy versi baru ke produksi.

Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika berhasil men-deploy rilis terbatas, Anda akan melihat skor penilaian.

Men-deploy rilis terbatas

Tugas 12. Men-deploy ke produksi

Setelah rilis terbatas berhasil dan belum ada pelanggan yang mengeluh, lakukan deployment ke seluruh fleet produksi Anda.

  1. Buat cabang canary, lalu kirimkan ke server Git:
git checkout master git merge canary git push origin master

Di Jenkins, Anda akan melihat pipeline master telah dimulai.

Klik Periksa progres saya untuk memverifikasi tugas yang telah dijalankan. Jika berhasil memulai pipeline master, Anda akan melihat skor penilaian.

Men-deploy ke produksi
  1. Setelah selesai (prosesnya mungkin memerlukan waktu beberapa menit), Anda dapat memeriksa URL layanan untuk memastikan versi baru, 2.0.0, menyajikan semua traffic.
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. Sekali lagi, jika Anda melihat instance 1.0.0, coba jalankan kembali perintah di atas. Untuk menghentikan perintah ini, tekan CTRL+C.

Contoh output:

gcpstaging9854_student@qwiklabs-gcp-df93aba9e6ea114a:~/continuous-deployment-on-kubernetes/sample-app$ while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 ^C

Anda juga dapat membuka situs tempat aplikasi gceme menampilkan kartu info. Warna kartu berubah dari biru menjadi oranye.

  1. Berikut adalah perintah untuk mendapatkan alamat IP eksternal. Tempel External IP ke tab baru untuk melihat kartu info yang ditampilkan.
kubectl get service gceme-frontend -n production

Contoh output:

Backend yang melayani halaman permintaan ini

Tugas 13. Uji pemahaman Anda

Di bawah ini terdapat beberapa pertanyaan pilihan ganda untuk memperkuat pemahaman Anda tentang konsep-konsep dalam lab ini. Jawab pertanyaan tersebut sebaik mungkin.

Selesai!

Bagus, Anda telah berhasil men-deploy aplikasi ke produksi!

Selamat!

Bagian ini mengakhiri lab praktik tentang men-deploy dan menggunakan Jenkins di Kubernetes Engine untuk mengaktifkan pipeline Continuous Delivery/Deployment Berkelanjutan. Anda telah berkesempatan men-deploy fitur DevOps penting di Kubernetes Engine dan mengonfigurasikannya untuk penggunaan produksi. Anda telah mempelajari alat command line kubectl dan konfigurasi deployment dalam file YAML, serta telah belajar sedikit tentang penyiapan jaringan pipeline Jenkins untuk proses pengembangan/deployment. Berbekal pengalaman langsung ini, Anda diharapkan dapat dengan yakin menerapkan alat ini di lingkungan DevOps Anda sendiri.

Langkah berikutnya/Pelajari lebih lanjut

Sertifikasi dan pelatihan Google Cloud

...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.

Manual Terakhir Diperbarui pada 10 Juni 2025

Lab Terakhir Diuji pada 10 Juni 2025

Hak cipta 2025 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.

Sebelum memulai

  1. Lab membuat project dan resource Google Cloud untuk jangka waktu tertentu
  2. Lab memiliki batas waktu dan tidak memiliki fitur jeda. Jika lab diakhiri, Anda harus memulainya lagi dari awal.
  3. Di kiri atas layar, klik Start lab untuk memulai

Gunakan penjelajahan rahasia

  1. Salin Nama Pengguna dan Sandi yang diberikan untuk lab tersebut
  2. Klik Open console dalam mode pribadi

Login ke Konsol

  1. Login menggunakan kredensial lab Anda. Menggunakan kredensial lain mungkin menyebabkan error atau dikenai biaya.
  2. Setujui persyaratan, dan lewati halaman resource pemulihan
  3. Jangan klik End lab kecuali jika Anda sudah menyelesaikan lab atau ingin mengulanginya, karena tindakan ini akan menghapus pekerjaan Anda dan menghapus project

Konten ini tidak tersedia untuk saat ini

Kami akan memberi tahu Anda melalui email saat konten tersedia

Bagus!

Kami akan menghubungi Anda melalui email saat konten tersedia

Satu lab dalam satu waktu

Konfirmasi untuk mengakhiri semua lab yang ada dan memulai lab ini

Gunakan penjelajahan rahasia untuk menjalankan lab

Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Langkah ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.