Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

Continuous Integration (CI): รวมโค้ดอย่างต่อเนื่อง

บทความนี้กล่าวถึง **Continuous Integration (CI)** ซึ่งเป็นแนวปฏิบัติในการรวมโค้ดของนักพัฒนาเข้าด้วยกันอย่างสม่ำเสมอ พร้อมทั้งทำการสร้างและทดสอบโค้ดโดยอัตโนมัติ...

Continuous Integration (CI): รวมโค้ดอย่างต่อเนื่อง

จากบทที่แล้ว เราได้เน้นย้ำถึงความสำคัญของวัฒนธรรม DevOps โดยเฉพาะการทำงานร่วมกันและการสื่อสารที่มีประสิทธิภาพ ซึ่งเป็นรากฐานสำคัญในการนำ DevOps ไปใช้จริง ในบทนี้ เราจะมาเจาะลึกถึงหนึ่งในแนวปฏิบัติหลักของ DevOps ที่ช่วยสนับสนุนวัฒนธรรมดังกล่าว นั่นคือ Continuous Integration (CI) หรือการรวมโค้ดอย่างต่อเนื่อง

ความหมายและประโยชน์ของ CI

Continuous Integration (CI) คือแนวปฏิบัติในการพัฒนาซอฟต์แวร์ที่นักพัฒนาทำการรวมโค้ดที่เขียนขึ้น (merge) เข้ากับ repository กลาง (เช่น Git) บ่อยครั้ง อย่างน้อยวันละครั้ง หรือหลายครั้งต่อวัน เมื่อมีการรวมโค้ดแล้ว ระบบจะทำการสร้าง (build) และทดสอบโค้ดโดยอัตโนมัติ เพื่อตรวจสอบว่าการเปลี่ยนแปลงที่เกิดขึ้นไม่ทำให้เกิดปัญหาหรือข้อผิดพลาด

ทำไม CI ถึงสำคัญ? ลองนึกภาพสถานการณ์ที่นักพัฒนาหลายคนทำงานบน feature ต่างๆ แยกกันเป็นเวลานาน โดยไม่ได้รวมโค้ดเข้าด้วยกัน เมื่อถึงเวลาที่จะรวมโค้ดทั้งหมดเข้าด้วยกัน อาจเจอปัญหาความขัดแย้ง (conflict) ของโค้ดจำนวนมาก, bug ที่คาดไม่ถึง, และเสียเวลาในการแก้ไขเป็นอย่างมาก CI เข้ามาช่วยแก้ปัญหานี้ได้ด้วยการ:

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

เครื่องมือ CI ที่นิยมใช้

มีเครื่องมือ CI มากมายให้เลือกใช้ แต่ที่ได้รับความนิยมและใช้งานกันอย่างแพร่หลาย ได้แก่:

  • Jenkins: เป็นเครื่องมือ CI แบบโอเพนซอร์สที่ได้รับความนิยมมากที่สุด มี plugin ให้เลือกใช้มากมาย ทำให้สามารถปรับแต่งให้เข้ากับความต้องการของแต่ละโครงการได้
  • GitLab CI: เป็นส่วนหนึ่งของ GitLab platform ซึ่งเป็นเครื่องมือบริหารจัดการ source code ที่ครบวงจร GitLab CI ช่วยให้การตั้งค่า CI pipeline เป็นเรื่องง่ายและสามารถทำงานร่วมกับ GitLab features อื่นๆ ได้อย่างราบรื่น
  • GitHub Actions: เป็นเครื่องมือ CI/CD ที่ทำงานบน GitHub platform โดยตรง ช่วยให้การสร้าง workflow อัตโนมัติเป็นเรื่องง่ายและสะดวก
  • CircleCI: เป็นเครื่องมือ CI/CD บนคลาวด์ที่ใช้งานง่ายและมีความยืดหยุ่นสูง เหมาะสำหรับโครงการขนาดเล็กและขนาดใหญ่
  • Travis CI: เป็นเครื่องมือ CI ที่เน้นการใช้งานกับโครงการโอเพนซอร์ส มีความเรียบง่ายและใช้งานง่าย

ในบทความนี้ เราจะเน้นการใช้งาน Jenkins เป็นหลัก เนื่องจากเป็นเครื่องมือที่ได้รับความนิยมและมีความยืดหยุ่นสูง

การตั้งค่า CI Pipeline ด้วย Jenkins

ขั้นตอนที่ 1: ติดตั้งและตั้งค่า Jenkins

ก่อนอื่น คุณต้องติดตั้ง Jenkins บน server ของคุณ สามารถดาวน์โหลดและติดตั้ง Jenkins ได้จาก เว็บไซต์ Jenkins หลังจากติดตั้งเสร็จเรียบร้อยแล้ว ให้เริ่มต้น Jenkins และทำตามขั้นตอนการตั้งค่าเริ่มต้น เช่น การสร้าง user และการติดตั้ง plugin ที่จำเป็น

ขั้นตอนที่ 2: สร้าง Jenkins Job

หลังจากติดตั้ง Jenkins แล้ว ให้สร้าง Jenkins Job ใหม่ ซึ่งเป็นหน่วยการทำงานพื้นฐานใน Jenkins Job แต่ละ job จะกำหนดขั้นตอนต่างๆ ที่ Jenkins จะต้องทำ เช่น การดึงโค้ดจาก repository, การสร้าง (build) โค้ด, การทดสอบโค้ด, และการส่งมอบ (deploy) โค้ด

  1. เข้าสู่ระบบ Jenkins
  2. คลิกที่ "New Item"
  3. ใส่ชื่อ Job (เช่น "MyProject-CI")
  4. เลือก "Freestyle project" หรือ "Pipeline" (เราจะใช้ "Freestyle project" ในตัวอย่างนี้)
  5. คลิก "OK"

ขั้นตอนที่ 3: กำหนด Source Code Management

ในส่วน "Source Code Management" ให้เลือก Git และใส่รายละเอียดของ repository ของคุณ เช่น URL ของ repository, branch ที่ต้องการติดตาม, และ credentials (ถ้าจำเป็น)

Repository URL: https://github.com/your-username/your-project.git
Branches to build: */main

ขั้นตอนที่ 4: กำหนด Build Triggers

ในส่วน "Build Triggers" ให้กำหนดเงื่อนไขที่จะทำให้ Jenkins เริ่มทำการ build โดยอัตโนมัติ ที่นิยมใช้กันคือ "Poll SCM" ซึ่งจะให้ Jenkins ตรวจสอบ repository เป็นระยะๆ ว่ามีการเปลี่ยนแปลงหรือไม่ ถ้ามีการเปลี่ยนแปลง Jenkins จะเริ่มทำการ build

Schedule: H/5 * * * *  (ตรวจสอบทุก 5 นาที)

ขั้นตอนที่ 5: กำหนด Build Steps

ในส่วน "Build Steps" ให้กำหนดขั้นตอนต่างๆ ที่ Jenkins จะต้องทำในการ build โค้ด ตัวอย่างเช่น ถ้าคุณใช้ Maven ในการ build Java project คุณสามารถเพิ่ม "Invoke top-level Maven targets" step และระบุ goals ที่ต้องการ เช่น "clean install"

Goals: clean install

ถ้าคุณใช้ Node.js คุณสามารถใช้ "Execute shell" step และรันคำสั่งต่างๆ เช่น:

npm install
npm test

ขั้นตอนที่ 6: กำหนด Post-build Actions

ในส่วน "Post-build Actions" ให้กำหนดสิ่งที่ Jenkins จะทำหลังจาก build เสร็จสิ้น เช่น การส่ง email แจ้งผลการ build, การ archive artifacts, หรือการ deploy โค้ด

ขั้นตอนที่ 7: บันทึกและรัน Job

หลังจากกำหนดค่าต่างๆ เสร็จเรียบร้อยแล้ว ให้บันทึก Job และคลิกที่ "Build Now" เพื่อเริ่มทำการ build ครั้งแรก Jenkins จะดึงโค้ดจาก repository ของคุณ, ทำตามขั้นตอน build ที่คุณกำหนด, และแจ้งผลการ build ให้คุณทราบ

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย

กรณีใช้งานจริง: สมมติว่าคุณกำลังพัฒนา web application โดยใช้ Node.js และ Git คุณสามารถตั้งค่า Jenkins CI pipeline ให้ทำงานดังนี้:

  1. นักพัฒนา push code ไปยัง Git repository
  2. Jenkins ตรวจพบการเปลี่ยนแปลงและเริ่มทำการ build
  3. Jenkins รันคำสั่ง npm install เพื่อติดตั้ง dependencies
  4. Jenkins รันคำสั่ง npm test เพื่อรัน unit tests
  5. ถ้า tests ผ่าน Jenkins จะสร้าง Docker image ของ application
  6. Jenkins push Docker image ไปยัง Docker registry
  7. Jenkins deploy Docker image ไปยัง staging environment

ข้อผิดพลาดที่พบบ่อย:

  • Code conflicts: นักพัฒนาควรรวมโค้ดบ่อยๆ เพื่อหลีกเลี่ยง code conflicts ที่ซับซ้อน
  • Broken builds: ตรวจสอบ logs ของ Jenkins อย่างละเอียดเพื่อหาสาเหตุของ broken builds
  • Failing tests: แก้ไข tests ที่ failing ก่อนที่จะรวมโค้ด
  • Incorrect configuration: ตรวจสอบ Jenkins Job configuration อย่างละเอียดเพื่อหลีกเลี่ยงข้อผิดพลาดในการ build
  • Insufficient resources: ตรวจสอบให้แน่ใจว่า Jenkins server มี resources เพียงพอสำหรับการ build

สรุป

Continuous Integration (CI) เป็นแนวปฏิบัติที่สำคัญในการพัฒนาซอฟต์แวร์ที่ช่วยลดความเสี่ยง, ปรับปรุงคุณภาพ, และเพิ่มความเร็วในการพัฒนา การใช้เครื่องมือ CI เช่น Jenkins ช่วยให้การตั้งค่า CI pipeline เป็นเรื่องง่ายและสามารถปรับแต่งให้เข้ากับความต้องการของแต่ละโครงการได้ การนำ CI ไปใช้จริงอาจต้องเผชิญกับความท้าทายต่างๆ แต่การแก้ไขปัญหาอย่างสม่ำเสมอและการปรับปรุงกระบวนการอย่างต่อเนื่องจะช่วยให้ทีมพัฒนาสามารถใช้ประโยชน์จาก CI ได้อย่างเต็มที่

ในบทถัดไป เราจะมาพูดถึง Continuous Delivery (CD) ซึ่งเป็นส่วนต่อขยายของ CI ที่ช่วยให้การส่งมอบซอฟต์แวร์เป็นไปอย่างรวดเร็วและอัตโนมัติ

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service