Introduction

Di artikel saya sebelumnya saya sudah membahas tentang membuat Pipeline menggunakan Gitlab CI, nah sekarang saya akan mencoba membahas tentang bagaimana cara kita membuat pipeline menggunakan Jenkinsfile

Hal hal yang perlu disiapkan :

  • Container registry
  • Server jenkins
  • Cluster kube
  • SCM (github, gitlab, Bitbucket)

NB : disini saya menggunakan Google Container registry, server jenkins, GCK, SCM menggunakan bitbucket, dan sebelumnya sudah di setup sdk google dan juga pointing webhook ke bitbucket.

Topology

Langkah-langkah membuat pipeline saya bagi menjadi 4 stage sebagai berikut :

Untuk konsep pipeline sendiri sudah pernah saya share di artikel berikut ini https://igunawan.com/gitlab-cicd-untuk-deploy-aplikasi/

Step 1 – Clone & pull Code

Pertama adalah kita buat script clone dan juga pull jika ada update/trigerred commit ke repository.

stage('Pull source code') {
steps {
echo 'Pull Code'
sh 'git clone code'
sh 'git pull code'
}
}

Step 2 – Build image

Build image dari Dockerfile dengan nama image dan taging contoh seperti berikut.

stage('Build image') {
steps {
echo 'build image'
sh 'docker build -t app:latest .'
}
}

Step 3 – Retage & Push image

Retage image kemudian push image kedalam container registry private kita, dengan catatan di server jenkins sudah di setup untuk auth ke container registrynya.

stage('Push image') {
steps {
echo 'retage image'
sh 'docker tag app:latest gcr.io/project-gcr/app:latest'
echo 'push image'
sh 'docker push gcr.io/project-gcr/app:latest'
}
}

Step 4 – Restart Deployment

Dan yang terakhir adalah restart deployment yang dimana bertugas sebagai manifests dari suatu aplikasi/pod yang ita deploy didalam kubernetes, yang berfungsi ketika ada image baru deployment tersebut akan restart dan mengambil updatean image tersebut.

NB : untuk tutorial deploy app ke kubernetes silahkan kalian lihat di artikel sebelumnya berikut ini https://igunawan.com/deploy-nodejs-app-ke-kubernetes-docker/

stage('Deploy') {
steps {
echo 'Deploying'
sh 'kubectl rollout restart deployment app-deployment -n gunawan'
}
}

Outpul / hasil dari success pipeline di Jenkins yang sudah kita buat tadi

Pipeline success

Full script Jenkinsfile

stages {
stage('Pull source code') {
steps {
echo 'Pull Code'
sh 'git clone code'
sh 'git pull code'
}
}
stage('Build image') {
steps {
echo 'build image'
sh 'docker build -t app:latest .'
}
}
stage('Push image') {
steps {
echo 'retage image'
sh 'docker tag nodeapp:latest gcr.io/project-gcr/app:latest'
echo 'push image'
sh 'docker push gcr.io/project-gcr/app:latest'
}
}
stage('Deploy') {
steps {
echo 'Deploying'
sh 'kubectl rollout restart deployment app-deployment -n gunawan'
}
}
}
}

Selamat mencoba, Terima kasih