ว่าด้วยเรื่อง Continuous Integration นั้น
มันช่วยลดปัญหา หรือ ช่วยหาข้อผิดพลาดของระบบ
ที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา
แน่นอนว่ามีคุณค่า (Value) มากมาย
แต่บ่อยครั้งกลับพบว่า
คุณค่าเหล่านั้นของ Continuous Integration ถูกลดค่าหรือทำลายลงไป
ดังนั้นมาดูกันหน่อย

เริ่มต้นด้วยคุณค่าของ Continuous Integration (CI)

ประกอบไปด้วย

ลดความเสี่ยงของการพัฒนา
ทั้งการตรวจจับข้อผิดพลาดได้รวดเร็ว
นั่นคือต้องมีกระบวนการทดสอบที่ดีและเร็วด้วย
ทั้งการวัดค่าต่าง ๆ ของระบบงาน
เปรียบเสมือนการตรวจสุขภาพประจำปี
แต่สำหรับระบบงาน เราทำการตรวจสุขภาพในทุก ๆ การเปลี่ยนแปลง
ทั้งปัญหาจากความไม่แน่ใจ หรือ จากข้อสันนิษฐานต่าง ๆ
บ่อยครั้งทีมพัฒนามักจะคิดไปเองว่า
สิ่งที่ทำลงไป ไม่กระทบส่วนไหนหรอก
เช่นการเปลี่ยนแปลง code การเปลี่ยน configuration การแก้ไข database

ลดกระบวนการทำงานแบบ manual ลงไป
ซึ่งลดทั้งเวลา ค่าใช้จ่าย และความพยายามต่าง ๆ
ดูเหมือนจะดีนะ
แต่เรากลับพบว่า ในการพัฒนาระบบงานนั้น
มีกระบวนการทำงานที่ซ้ำ ๆ เยอะมาก
ทั้งการ compile code
ทั้งการแก้ไข database
ทั้งการทดสอบ
ทั้งการ deployment
มันแปลก ๆ นะ

สร้างระบบงานหรือ software ที่พร้อม deploy ได้เสมอ
ทำให้เห็นภาพรวมที่แท้จริงของระบบว่าเป็นอย่างไร ?
ช่วยให้การตัดสินใจเรื่องต่าง ๆ ดีขึ้น
รวมทั้งทีมพัฒนามีความเชื่อมั่นต่อระบบที่พัฒนา

แต่เมื่อมีการนำ Continuous Integration มาใช้กลับมีแต่ข้อเสียมากกว่าข้อดี !!

ส่งผลให้ไม่มีใครเห็นประโยชน์
ส่งผลให้เลิกใช้งานไปในที่สุด
มาดูตัวอย่างของปัญหากันดู

ระบบ Continuous Integration เพิ่มงานเรื่องการดูแลรักษา
นั่นคือการเริ่มเปลี่ยนจาก manual process มาเป็น automation process
โดยไม่ได้เปลี่ยนแปลง หรือ ปรับปรุง process อะไรเลย
process การทำงานมันวุ่นวาย เทอะทะมาก ๆ
ผลที่ตามมาคือ ต้องใช้เวลามากมายไปกับ
การพยายามทำให้ manual process มาเป็น automation process
มีการทำงานที่ช้า !!
นั่นคือ ความเข้าใจผิดอย่างมาก

เนื่องจากต้องเริ่มด้วยการออกแบบให้ตรงตามกับระบบงาน
จากนั้นต้องเน้นไปที่ process ที่มีประสิทธิภาพ
ผลที่ตามมาคือ
ระบบ Continuous Integration มีความน่าเชื่อถือ

มีส่วนการทำงานที่ผิดพลาดเยอะมาก ๆ
ยกตัวอย่างเช่น ในระบบ Continuous Integration
มีขั้นตอนการทำงานที่ผิดพลาดเยอะมาก ๆ
เช่น นักพัฒนาไม่ทำการทดสอบใด ๆ บนเครื่องตนเอง
ก่อนที่จะ commit code ไปยัง version control เลย
ทำให้เกิดข้อผิดพลาดในส่วนของระบบ Continuous Integration
ทั้ง compile ไม่ผ่าน
ทั้งทดสอบไม่ผ่าน
ถ้าเป็นเช่นนี้ แสดงว่ามีปัญหาในการ Continuous Integration มาใช้อย่างชัดมาก ๆ
นั่นคือ ปัญหาเรื่องความเข้าใจในการทำงานของคน
ต้องรีบแก้ไขโดยด่วน

ยังไม่พอนะ ระบบที่ต้องทำงานด้วยไม่มีความเสถียร
ยิ่งส่งปัญหามากมาย
ดังนั้นใครละจะมาแก้ไขปัญหานี้ ?

มีการเปลี่ยนแปลงที่มากจนเกินไป
Continuous Integration นั้นจะมีประสิทธิภาพสูงมาก ๆ
ถ้าการเปลี่ยนแปลงเป็นแบบ incremental คือ ค่อย ๆ เปลี่ยนแปลงทีละเล็กทีละน้อย
แต่ถ้ามีการเปลี่ยนแปลงแต่ละครั้งที่มากจนเกินไป
เช่นเปลี่ยนการทำงานจากหน้ามือเป็นหลังมือเลย
ไม่น่าจะส่งผลดีใด ๆ เลย
เนื่องจากต้องเสียเวลามาแก้ไขขั้นตอนการทำงานใหม่ทั้งหมด

ระบบ Continuous Integration นั้นต้องมีค่าใช้จ่ายเพิ่ม
ทั้งเรื่องของ Hardware และ Software
ซึ่งหลาย ๆ ครั้งพบว่า
กลุ่มคนที่ดูแลค่าใช้จ่ายของระบบงานมักจะไม่เห็นคุณค่า หรือ ลงทุนมากนัก
เพราะว่าไม่เข้าใจ และ ไม่เห็นประโยชน์ คุณค่านั่นเอง
ทำให้ไม่มีระบบ หรือ มีก็ทำงานช้ามาก ๆ

ปัญหาจากนักพัฒนา
เป็นเรื่องที่สำคัญสุด ๆ คือ นักพัฒนา นั่นเอง
ถึงแม้จะมีข้อตกลงในการทำงานแล้วก็ตาม
ทั้งไม่ชอบ commit การเปลี่ยนแปลงบ่อย ๆ
ทั้งไม่ทำการทดสอบการเปลี่ยนแปลงใด ๆ เลย
ทั้งไม่มีหรือไม่เขียนชุดการทดสอบ
หนักไปกว่านั้น
ถ้าพบว่าชุดการทดสอบใดทำงานผิดพลาด
ก็ไปลบ หรือ ยกเลิก ไปเลย น่ากลัวมาก ๆ
ทั้งมีการใช้ environment ต่าง ๆ ที่แตกต่างกัน

ซึ่งสิ่งเหล่านี้จะทำลายคุณค่าของ Continuous Integration ไปอย่างมาก

วันนี้ระบบ Continuous Integration ของระบบงานคุณเป็นอย่างไร
แต่แนะนำว่า ให้ลองทำตามขั้นตอนนี้นะครับ

  1. Identify ระบบจุดที่ต้องการระบบการทำงานแบบอัตโนมัติ
  2. Build สร้าง script สำหรับการทำงาน
  3. Share โดยที่ script ต่าง ๆ เหล่านี้ต้องถูก share หรือจัดเก็บใน version control
  4. Make it continuous นำ script ต่าง ๆ เหล่านี้ไปอยู่ในขั้นตอนการทำงานในระบบ Continuous Integration เพื่อให้ทำงานทุก ๆ ครั้งเมื่อมีการเปลี่ยนแปลงเกิดขึ้น
  5. วนกลับไปข้อ 1 (Continuous Improvement)

ขอให้สนุกกับการ coding ครับ