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