Tuesday, September 27, 2022
GCP Git Jenkins Kubernetes

Continuous Delivery with Jenkins in Kubernetes Engine

Delivery

“Continuous Delivery with Jenkins in Kubernetes Engine”

Apa itu Kubernetes Engine?

Kubernetes Engine adalah versi Kubernetes yang dihosting oleh Google Cloud – pengelola cluster dan sistem orkestrasi yang andal untuk container. Kubernetes adalah proyek open source yang dapat berjalan di banyak lingkungan berbeda—dari laptop hingga cluster multi-node dengan ketersediaan tinggi; dari mesin virtual hingga bare metal. Seperti yang disebutkan sebelumnya, aplikasi Kubernetes dibangun di atas container – ini adalah aplikasi ringan yang dibundel dengan semua dependensi dan library yang diperlukan untuk menjalankannya. Struktur dasar ini membuat aplikasi Kubernetes sangat tersedia, aman, dan cepat untuk diterapkan—kerangka kerja yang ideal untuk pengembang cloud.

Apa itu Jenkins?

Jenkins adalah server otomatisasi open-source yang memungkinkan Anda secara fleksibel mengatur pipeline build, pengujian, dan penerapan Anda. Jenkins memungkinkan pengembang untuk beralih dengan cepat pada proyek tanpa khawatir tentang masalah overhead yang dapat berasal dari pengiriman berkelanjutan.

Apa itu Continuous Delivery / Continuous Deployment?

Saat Anda perlu menyiapkan pipeline continuous delivery (CD), penerapan Jenkins di Kubernetes Engine memberikan manfaat penting dibandingkan penerapan berbasis VM standar.

Saat proses build Anda menggunakan container, satu host virtual dapat menjalankan pekerjaan di beberapa sistem operasi. Kubernetes Engine menyediakan eksekutor build singkat—ini hanya digunakan saat build aktif berjalan, yang menyisakan sumber daya untuk tugas cluster lain seperti tugas pemrosesan batch. Manfaat lain dari eksekutor build singkat adalah kecepatan—mereka diluncurkan dalam hitungan detik.

Baca Juga :  Set Up and Configure a Cloud Environment in Google Cloud: Challenge Lab

Kubernetes Engine juga dilengkapi dengan penyeimbang beban global Google, yang dapat Anda gunakan untuk mengotomatiskan perutean lalu lintas web ke instance Anda. Penyeimbang beban menangani penghentian SSL dan menggunakan alamat IP global yang dikonfigurasi dengan jaringan tulang punggung Google—digabungkan dengan bagian depan web Anda, penyeimbang beban ini akan selalu mengatur pengguna Anda di jalur tercepat yang memungkinkan ke instans aplikasi. Sekarang setelah Anda belajar sedikit tentang Kubernetes, Jenkins, dan bagaimana keduanya berinteraksi dalam pipa CD, saatnya untuk membangun satu.

Download source code

  • Setting zone
gcloud config set compute/zone us-east1-d
  • Copy Sample Code
gsutil cp gs://spls/gsp051/continuous-deployment-on-kubernetes.zip .
  • Unzip File
unzip continuous-deployment-on-kubernetes.zip
  • Masuk ke directori
cd continuous-deployment-on-kubernetes

Menyiapkan Jenkins

  • Buat Cluster Kubernet
gcloud container clusters create jenkins-cd \
--num-nodes 2 \
--machine-type n1-standard-2 \
--scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform"
  • Cek Cluster
gcloud container clusters list
gcloud container clusters get-credentials jenkins-cd
kubectl cluster-info

Setup Helm

  • Tambah helm repo
helm repo add jenkins https://charts.jenkins.io
helm repo update

Configure dan Install Jenkins

Tambahkan beberapa plugin :

    Kubernetes:1.29.4
    Workflow-multibranch:latest
    Git:4.7.1
    Configuration-as-code:1.51
    Google-oauth-plugin:latest
    Google-source-plugin:latest
    Google-storage-plugin:latest
  • Download custom value
gsutil cp gs://spls/gsp330/values.yaml jenkins/values.yaml
  • Deploy dengan helm
helm install cd jenkins/jenkins -f jenkins/values.yaml --wait
  • Cek list pod jenkins
kubectl get pods
  • Konfigurasi service jenkins
kubectl create clusterrolebinding jenkins-deploy --clusterrole=cluster-admin --serviceaccount=default:cd-jenkins
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 &
  • Cek list service
kubectl get svc

Connect Jenkins

printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  • Klik Web Preview -> Preview on port 8080

Deploying Application

cd sample-app
  • Buat namespace
kubectl create ns production
  • Deploy production dan canary
kubectl apply -f k8s/production -n production
kubectl apply -f k8s/canary -n production
kubectl apply -f k8s/services -n production
  • Scale up production environment frontends
kubectl scale deployment gceme-frontend-production -n production --replicas 4
  • cek list pod frontend
kubectl get pods -n production -l app=gceme -l role=frontend
  • cek list pod backend
kubectl get pods -n production -l app=gceme -l role=backend
  • cek external IP untuk prodaction
kubectl get service gceme-frontend -n production
export FRONTEND_SERVICE_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend)

Buat Jenkins Pipeline

  • Buat repo
gcloud source repos create default
  • init
git init
git config credential.helper gcloud.sh
git remote add origin https://source.developers.google.com/p/$DEVSHELL_PROJECT_ID/r/default
git config --global user.email "[EMAIL_ADDRESS]"
git config --global user.name "[USERNAME]"
  • commit dan push
git add .
git commit -m "Initial commit"
git push origin master

Tambahkan jenkins credential

  • Masuk ke jenkins -> Manage Jenkins -> Manage Credentials
  • Klik jenkins
  • Klik Global credentials (unrestricted)
  • Klik Add Credentials
  • Pilih Google Service Account from metadata -> Ok

Buat Jenkins job

  • Klik new Item
  • nama project sample-app -> pilih Multibranch Pipeline -> Ok
  • Pada bagian Branch Sources -> Klik Add Source dan Pilih Git
  • Paste clone URL
https://source.developers.google.com/p/[PROJECT_ID]/r/default
  • Pada Credentials drop-down -> Pilih credential yang sebelumnya di buat
  • Kemdian di bagian Scan Multibranch Pipeline Triggers -> cek Scan Multibranch Pipeline Triggers -> intervalnya 1 menit
  • Klik Save

Buat Development Environment

  • Buat development branch
git checkout -b new-feature

Edit pipeline definition

  • Buka jenkins file
nano Jenkinsfile
PROJECT = "REPLACE_WITH_YOUR_PROJECT_ID"
APP_NAME = "gceme"
FE_SVC_NAME = "${APP_NAME}-frontend"
CLUSTER = "jenkins-cd"
CLUSTER_ZONE = "us-east1-d"
IMAGE_TAG = "gcr.io/${PROJECT}/${APP_NAME}:${env.BRANCH_NAME}.${env.BUILD_NUMBER}"
JENKINS_CRED = "${PROJECT}"

Modify site

  • Edit html.go
nano html.go
  • Ganti dari blue jadi orange
<div class="card orange">
  • Ganti version
const version string = "2.0.0"

Memulai Deployment

git add Jenkinsfile html.go main.go
git commit -m "Version 2.0.0"
git push origin new-feature
  • Cek jenkins

Deploying Canary Release

  • Buat branch dan push
git checkout -b canary
git push origin canary
  • Cek service
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

Deploying to production

  • Buat brance dan push ke server git
git checkout master
git merge canary
git push origin master
  • Cek di Jenkins harusnya sudah terbentuk
  • Cek service
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
  • Cek external IP
kubectl get service gceme-frontend -n production

Penutup

Sahabat Blog Learning & Doing demikianlah penjelasan mengenai Continuous Delivery with Jenkins in Kubernetes Engine. Semoga Bermanfaat . Sampai ketemu lagi di postingan berikut nya.

(Visited 164 times, 1 visits today)
Klik untuk berbagi dengan orang lain

Similar Posts