Hello Jenkins world EP3 คุณลุง Jenkins กับ plugin ของเขา!!

Narawit Rattanasuriya
Sirisoft
Published in
4 min readJun 17, 2022

สวัสดีครับ นี่ก็เป็น EP สุดท้ายของผมที่จะมาแนะนำให้ทุกคนรู้จักกับ Jenkins ให้มากขึ้นกันครับ โดยในวันนี้ ผมจะมาแนะนำ Plugin ที่น่าสนใจของ Jenkins กันครับ

โดยเราสามารถเข้าไป shopping plugin ได้ตามวิธีด้านล่างครับ

  1. เข้าไปที่ Menu Manage Jenkins

2. ไปที่ menu “Manage Plugins”

3. เลือก shopping และ install กันได้เลยครับ

และต่อไปนี้ก็จะเป็น plugin ดีๆที่ผมจะมาแนะนำให้ทุกใช้กันนะครับ ไปดูกันเลยย…

1. Blue ocean Plugin

Blue ocean เป็น Plugin ที่ช่วยเปลี่ยนหน้าตาของ Jenkins ให้ดู Minimal และ หรูหรามากขึ้น แต่ก็แลกมาด้วยความสามารถในการใช้ plugin หลายๆตัวเนื่องจาก บาง plugin จะสร้างมาให้เพื่อทำงานได้กับ Jenkins แบบดั้งเดิมเท่านั้น

Job list and status
pipeline stage status

2. Docker Plugin

เป็น plugin ที่ผมใช้ค่อนข้างบ่อยมาก และอยากจะมาแนะนำให้ทุกคน นั่นก็คือ Docker plugin ที่จะช่วยให้เราสามารถสร้าง agent ขึ้นมาจาก docker container ได้ครับ ซึ่งหลังจากสร้าง agent แล้วก็จะสามารถใช้ tools หรือ command ที่อยู่ใน docker agent ได้โดยไม่ต้อง install tools นั้นๆที่เครื่อง Jenkins server เลย

pipeline {
agent none
stages {
stage('Back-end') {
agent { // สร้าง docker agent จาก maven image
docker { image 'maven:3.8.1-adoptopenjdk-11' }
}
steps { //command ทั้งหมดจะถูกรันใน container agent
sh 'mvn --version'
}
}
stage('Front-end') {
agent { // สร้าง docker agent จาก node image
docker { image 'node:16.13.1-alpine' }
}
steps {
sh 'node --version'
}
}
}
}

และมี command ที่ช่วยอำนวยความสะดวกในการ pull, build, push container image ใน pipeline ได้ด้วยครับ

node {
checkout scm
docker.withRegistry('https://registry.example.com', 'credentials-id') {
def customImage = docker.build("my-image:${env.BUILD_ID}")
customImage.push()
}
} // build image และ Push image ไปยัง registry ที่กำหนดไว้

3. Kubernetes cli Plugin

Kubernetes plugin ก็เป็นอีกหนึ่ง plugin ที่ใช้งานบ่อยมากๆเหมือนกันครับ โดยเป็น plugin ที่ช่วยให้เราสามารถ access kubernetes cluster ได้ผ่าน pipeline เพื่อ deploy kubernetes application โดยกำหนด URL, kubeconfig, cluster name, namespace แล้วก็สามารถเข้าใช้งาน kubernetes cluster นั้นได้เลยครับ

node {
stage('List pods') {
withKubeConfig([credentialsId: '<credential-id>',
caCertificate: '<ca-certificate>',
serverUrl: '<api-server-address>',
contextName: '<context-name>',
clusterName: '<cluster-name>',
namespace: '<namespace>'
]) {
sh 'kubectl get pods'
}
}
}

4. Email Extension Plugin

ตามชื่อเลยครับเป็น plugin ที่ใช้ในการส่ง email โดยผมใช้ในการส่ง email หลังจากที่ build pipeline ว่า pipeline ผ่านหรือไม่ผ่าน และสามารถ attach file มายัง email ได้ด้วย ซึ่งอาจจะเป็น file artifact ที่ build จาก pipeline หรือ ไฟล์ผลการทำ automate test ที่รันใน pipeline ก็ได้

emailext body: 'Test Message',
recipientProviders: [developers(), requestor()],
subject: 'Test Subject',
to: 'test@example.com'

5. Role-based strategies Plugin

plugin นี้เป็น plugin ที่เหมาะสำหรับ admin ที่คอยจัดการ Jenkins ที่มีผู้อื่นเข้ามาใช้งานร่วมกันด้วย โดยเป็น plugin ที่ช่วยจัดการ permission (create, run, delete, edit Jobs)ให้กับ user ให้แก่ project ที่ user เข้ามาใช้งาน เพื่อป้องกันไม่ให้ user ไปเผลอรัน pipeline อื่นๆที่ไม่ใช่ของตัวเองครับ

setting permission สำหรับ user ที่เข้ามาใช้งาน Jenkins

6. Performance Plugin

plugin สำหรับ tester ที่จะช่วยแสดง graph ที่ generate จากการ test application ของเราบน Jenkins โดยมี tools ที่ support หลายตัวได้แก่ JMeter, JUnit, Taurus, wrk, Iago

ตัวอย่าง report ที่สร้างจาก plugin
ตัวอย่าง report ที่สร้างจาก plugin
ตัวอย่าง report ที่สร้างจาก plugin

7. ThinBackup Plugin

อีกหนึ่ง plugin สำหรับ Jenkins admin นั่นก็คือ ThinBackup plugin ที่จะช่วย backup ข้อมูลของ Jenkins จะกด Backup now แบบ manual หรือ ตั้งค่ารอบเวลาให้ทำการ backup เป็นรอบๆก็ได้

หน้าจอการ backup ของ ThinBackup plugin
ตั้งค่ารอบเวลาการ backup

8. Nexus Platform Plugin

Plugin สำหรับการ push artifact หรือก็คือไฟล์ package ต่างๆที่ได้จากการ build Pipeline เช่น ไฟล์ .app หรือ .apk ที่ได้จากการ build mobile application ไปเก็บไว้ยัง Nexus repository โดยปัจจุบันรองรับทั้ง Nexus 2 และ Nexus 3 เลยครับ

หน้าจอสำหรับ generate Jenkins pipeline stage
หน้าจอ repository และไฟล์ที่ upload ไปยัง Nexus

9. SonarScanner Plugin

และก็มาถึง plugin ตัวสุดท้ายในวันนี้กันแล้วนะครับนั่นก็คือ SonarScanner plugin ที่จะช่วยเราสามารถเชื่อมต่อ Sonarqube server เพื่อทำการ scan source code ของเราและตรวจสอบ quality gate ว่า application ผ่านเกณฑ์ในการพัฒนารึเปล่า

node {
stage('SCM') {
git 'https://github.com/foo/bar.git'
}
stage('SonarQube analysis') {
withSonarQubeEnv('My SonarQube Server') {
sh 'mvn clean package sonar:sonar' //build และ scan source code
}
}
}

stage("Quality Gate"){
timeout(time: 1, unit: 'HOURS') {
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
}
}

ก็จบไปแล้วนะครับสำหรับ EP สุดท้ายของ Hello Jenkins world blog ขอบคุณทุกคนที่ติดตามมาจนถึง EP สุดท้ายนะครับ โดยใครที่ยังไม่ได้อ่าน EP อื่นๆสามารถเข้าไปอ่านได้ที่ link ด้านล่างได้เลยครับ

Hello Jenkins world EP1 รู้จัก และ ติดตั้ง Jenkins Master & Agent แบบ The Flash

Hello Jenkins world EP2 รู้จัก Jenkins Jobs และ การ Triggers แบบ Automate!

และสามารถติดตาม blog อื่นๆได้ที่ medium sirisoft หรือ ติดตาม blog อื่นๆ update ได้ที่ facebook Sirisoft นะครับ :)

--

--