Jenkins คืออะไร?

Jenkins คือเครื่องมือ Open-Source ยอดนิยมที่เขียนด้วยภาษา Java ใช้สำหรับทำระบบ CI/CD (Continuous Integration / Continuous Delivery) หน้าที่หลักของมันคือการสร้าง “ระบบอัตโนมัติ” (Automate) ในขั้นตอนต่างๆ ของการพัฒนาซอฟต์แวร์ ตั้งแต่การนำโค้ดมารวมกัน, การทดสอบ (Testing), ไปจนถึงการนำซอฟต์แวร์ไปติดตั้งบนเซิร์ฟเวอร์ (Deployment)

เพื่อให้เข้าใจ Jenkins ต้องเข้าใจแนวคิด CI/CD ก่อนครับ:

  • CI (Continuous Integration): การนำโค้ดที่นักพัฒนาแต่ละคนเขียนมารวมกันที่ส่วนกลาง (เช่น Git) และระบบจะทำการรันการทดสอบ (Automated Test) ทันที เพื่อหาข้อผิดพลาดให้เจอไวที่สุด
  • CD (Continuous Delivery/Deployment): การนำโค้ดที่ผ่านการทดสอบแล้ว ไปแพ็กเตรียมไว้ หรือติดตั้ง (Deploy) ขึ้นไปยังเซิร์ฟเวอร์จำลอง (Staging) หรือเซิร์ฟเวอร์จริง (Production) แบบอัตโนมัติ

หลักการทำงานของ Jenkins

Jenkins มีรูปแบบการทำงานที่เป็นระบบ โดยประกอบไปด้วยโครงสร้างและขั้นตอนสำคัญดังนี้ครับ:

1. สถาปัตยกรรมแบบ Master-Agent (หรือ Controller-Node)

เพื่อไม่ให้เครื่องทำงานหนักเกินไป Jenkins มักจะถูกติดตั้งแบบกระจายงาน:

  • Jenkins Master (Controller): ทำหน้าที่เป็น “ผู้จัดการ” คอยจัดการการตั้งค่าต่างๆ, รับสัญญาณ (Trigger) จากภายนอก, แสดงผลบนหน้า Web UI และเป็นคนมอบหมายงานให้เครื่องลูกข่าย
  • Jenkins Agent (Node): ทำหน้าที่เป็น “คนงาน” (อาจจะเป็นเซิร์ฟเวอร์อีกเครื่อง หรือ Docker Container) ที่คอยรับคำสั่งจาก Master เพื่อมาประมวลผลหนักๆ เช่น การ Build โค้ด หรือการรัน Test

2. ขั้นตอนการทำงาน (Workflow มาตรฐาน)

  1. Commit & Push: นักพัฒนาเขียนโค้ดเสร็จแล้วทำการ Push โค้ดขึ้นไปเก็บไว้ในระบบ Version Control (เช่น GitHub, GitLab, Bitbucket)
  2. Trigger: เมื่อมีการอัปเดตโค้ดเข้าสู่ระบบ GitHub จะส่งสัญญาณ (Webhook) ไปบอก Jenkins ว่า “มีโค้ดใหม่มาแล้วนะ”
  3. Build & Test: Jenkins Master จะสั่งให้ Agent ไปดึงโค้ดล่าสุดลงมา ทำการคอมไพล์หรือ Build โค้ด และรันชุดทดสอบ (Automated Tests)
    • ถ้าโค้ดพัง (Failed): ระบบจะหยุดทำงาน และแจ้งเตือนนักพัฒนา (เช่น ผ่าน Slack หรือ Email) ให้มาแก้
    • ถ้าโค้ดผ่าน (Success): ไปสู่ขั้นตอนต่อไป
  4. Deliver/Deploy: Jenkins จะนำซอฟต์แวร์ที่พร้อมใช้งานไปติดตั้งบนเซิร์ฟเวอร์ หรือนำไปสร้างเป็น Docker Image เพื่อนำไปรันบนระบบคลาวด์ต่อไป

3. หัวใจสำคัญ: Jenkins Pipeline

การกำหนดขั้นตอนตั้งแต่การดึงโค้ดไปจนถึงการ Deploy จะถูกเขียนขึ้นมาเป็นสคริปต์ที่เรียกว่า Pipeline โดยมักจะเก็บไว้ในไฟล์ที่ชื่อว่า Jenkinsfile (แนวคิด Pipeline as Code) ซึ่งจะถูกเก็บรวมไว้กับโฟลเดอร์โค้ดของนักพัฒนาเลย ทำให้ตรวจสอบและแก้ไขขั้นตอนการทำงานได้ง่าย

4. ระบบ Plugins ที่มหาศาล

สิ่งที่ทำให้ Jenkins เป็นที่นิยมและทรงพลังที่สุดคือ Plugins ครับ Jenkins ตัวเปล่าๆ อาจจะทำอะไรได้ไม่มาก แต่มีระบบ Plugin มากกว่า 1,800 ตัวที่ชุมชนนักพัฒนาสร้างไว้ ทำให้มันเชื่อมต่อกับเครื่องมืออื่นได้แทบทุกชนิดบนโลก เช่น Docker, Kubernetes, AWS, Azure, Jira, SonarQube และอื่นๆ อีกมากมาย

สรุปแบบเห็นภาพ: Jenkins เปรียบเสมือน “ผู้จัดการโรงงานประกอบซอฟต์แวร์” ที่คอยรับชิ้นส่วน (โค้ด) จากช่าง (นักพัฒนา) มาประกอบเข้าด้วยกัน ทดสอบคุณภาพว่าใช้งานได้จริงไหม และขับรถนำสินค้าไปส่งขึ้นชั้นวาง (เซิร์ฟเวอร์) แบบอัตโนมัติ โดยที่นักพัฒนาไม่ต้องมานั่งทำเองทีละขั้นตอนครับ