Jenkins & Gradle for CI

Phai Panda
4 min readDec 15, 2019

--

ที่ผ่านมาเรามี Amazon EC2 Instance ที่ติดตั้ง Jenkins ลงไปแล้ว บทความนี้นำเสนอโปรเจกต์ที่เขียนด้วย Java และใช้ Build Tool อย่าง Gradle มาทำ CI กันครับ

รู้จักกับ Amazon EC2

ก่อนจะวิ่งทางไกล เรามาดูว่ารถยนต์ของเราพร้อมแค่ไหน เราต้องการ Docker สักตัวทำตัวเป็น server และโอกาสนี้เราเลือก Amazon EC2

ติดตั้ง Jenkins บน Amazon EC2

เมื่อได้รถแล้วจึงเตรียมสัมภาระสำหรับเดินทาง กระเป๋าใบใหญ่นั่นเอามานี่

บทความ part ข้างต้นได้ติดตั้ง Maven และ Maven (for Jenkins) Plugin ลงไปด้วย จะทำตามหรือไม่ก็ได้ หัวใจคือการติดตั้ง Jenkins เท่านั้น ดังนั้นสามารถข้ามส่วนที่เป็น Maven และ Maven (for Jenkins) Plugin ไปได้

ติดตั้ง Gradle (for Jenkiins) Plugin

รถออกวิ่งได้สักพักแล้ว ตอนนี้ก็แวะเติมอาหารลงท้องกันหน่อย มือหลักนี้คือ Gradle Plugin ครับ หาได้จากเมนู Manage Jenkins > Manage Plugins จากนั้นหาในแท็บ Available โดย Filter ไปว่า gradle

ทว่าผมได้ติดตั้งสำเร็จแล้ว ดังนั้นหากดูที่แท็บ Installed ณ หน้าเดียวกันนี้ จะเป็นแบบนี้

สร้างโปรเจกต์ Gradle

ตรงไปที่เมนู New Item > Freestyle project

ผมขอใช้โปรเจกต์ของน้องฝึกงานมาสาธิตให้ชมกันนะ ผมตั้งชื่อมันว่า op-api

รายละเอียดของโปรเจกต์ op-api นี้คือ

  • ใช้ Spring Boot เวอร์ชัน 2
  • ใช้ Gradle เป็น Build Tool
  • เขียนด้วยภาษา Java
  • ใช้ Git และ GitHub เป็นแหลงเก็บ source code

เพื่อนๆใช้หรือหาโปรเจกต์ลักษณะเดียวกันทดสอบนะครับ ผลลัพธ์จะได้ไม่ผิดพลาด

ส่วนของ source code management ผมแปะ path ของ Git ลงไป

กำหนด credentials ให้เรียบร้อย (username & password)

ส่วนของ Build ผลสืบเนื่องจาก Gradle Plugin ที่ได้ติดตั้งลงไป เลือก Invoke Gradle script

จะได้หน้าตา

เสร็จแล้วบันทึกไว้ก่อน ภายหลังส่วนนี้ค่อยกลับมาเพิ่มเติมอีกที

ติดตั้ง Gradle บน Amazon EC2 Instance

โอ๊ะโอ๋~น้ำมันรถหมด ได้เวลาเข็นกันแล้ว อีก 2 กิโลเมตรข้างหน้านั่นไงจุดหมายของเรา

remote ไปยัง server ที่ได้ลง Jenkins ไว้

sudo ssh -i ~/Downloads/ec2-red-hat-t2micro-devops.pem ec2-user@X.X.X.X

แสดงตนเป็น root

sudo su -

มองหาแหล่งเก็บ .zip

cd /optls

เราต้องการ Gradle ตัวเป็นๆมาขังไว้ตรงนี้ ดังนั้น เปิด Browser แล้ว Google หาก่อน

gradle install

เลื่อนลงมา หาหัวข้อ Installing manually คลิก Download

ผมมองหาเวอร์ชันที่คุ้นเคย ผมขอเลือก 5.6.2 นะครับ

จากนั้นมองหาลิงก์ binary-only คลิกเข้าไป

มันจะโหลดลงเครื่องเราทันที ให้ cancel ไปก่อน จากนั้นคลิกขวาที่ลิงก์ direct link เลือก copy link address ตามภาพด้านล่าง

กลับมาที่ Amazon EC2 Instance ที่ได้ลง Jenkins ไว้ (ต่อจากเมื่อกี้) แน่ใจว่าเราอยู่ที่

/opt

จัด

wget https://services.gradle.org/distributions/gradle-5.6.2-bin.zip

แตก .zip ด้วย unzip แต่เครื่องนี้ไม่ได้ติดตั้ง unzip ไว้ เช่นนั้นติดตั้งมันก่อน

yum install unzip

แล้วดึงดาว

unzip gradle-5.6.2-bin.zip

ได้แล้ว

กลับไปบอกกับ OS ว่า gradle-5.6.2/bin อยู่ที่ไหน ด้วยการใช้โปรแกรม vi เปิดไฟล์ .bash_profile

จากนั้นเพิ่ม path ของ Gradle ซะ

vi ~/.bash_profile

บันทึกแล้ว reload

source ~/.bash_profile

ทดสอบเรียก

gradle -version
งดงามเหลือเกิน

ในเมื่อเครื่องมี Gradle พร้อมแล้ว ขั้นตอนถัดมาคือเอาเรื่องนี้ไปบอก Jenkins

Jenkins Global Tool Configuration

ที่เมนู Manage Jenkins > Global Tool Configuration

  • name ตั้งเอาเลยตามใจฝัน
  • GRADLE_HOME ระบุไปยัง path ที่เราทำเอาไว้

ตามนี้

บันทึกแล้วกลับมาที่โปรเจกต์

เลือกเมนู Configure

ส่วนของ Build ที่จัดการไม่แล้วเสร็จ ให้ทำต่อ

  • Gradle Version เลือกชื่อ Gradle ตามที่ตั้งไว้ในขั้นตอน Jenkins Global Tool Configuration
  • และ Tasks ใส่คำสั่งไปว่า build

บันทึก

เป็นอันว่าเราครบถ้วนแล้วใน part ของ CI

กลับไปที่โปรเจกต์แล้วกดเมนู Build Now ให้เวลาสักพักใหญ่เพื่อโหลด dependencies ของ Spring Boot อาจครึ่งชั่วโมงหรือเป็นชั่วโมงหากว่านี่เป็นครั้งแรกที่ build นะครับ (ค่าใช้จ่ายมาเต็มแน่ๆ)

ลาด้วยภาพแห่งการรอคอย

นานเหลือเกิน

หมายเหตุ โปรเจ็กต์ Spring Boot จะสามารถ build เป็น .war ได้ก็ต่อเมื่อได้เพิ่ม war plugin ลงไปในไฟล์ build.gradle

plugins {
id 'org.springframework.boot' version '2.1.6.RELEASE'
id 'java'
id 'war'
}

สมมติถ้าอยาก restart jenkins ล่ะ? คำตอบ ไปรันทีละคำสั่งต่อไปนี้

service jenkins stopservice jenkins start

แหล่งอ้างอิง

--

--

No responses yet