วันนี้มีโอกาสได้แบ่งปันความรู้เรื่อง Continuous Integration (CI)
สำหรับปรับปรุงคุณภาพของการพัฒนา Software ให้ดีขึ้น
โดยหัวใจของ CI นั้นประกอบไปด้วย 2 คำคือ
- Continuous หรือ Frequent คือ ทำบ่อย ๆ อย่างต่อเนื่อง
- Integrate หรือ Merge คือ การรวมกันของสิ่งต่าง ๆ ในระบบ
- อะไรที่ต้องนำมารวมกันบ้าง ?
- ทำการรวมกันที่ไหน ?
- source code ไงล่ะ
- รวมกันที่ Version Control System หรือ Repository ไงละ
ปล. ถ้าใครไม่ใช้งาน Version Control System เช่น Git, SVN เป็นต้น ก็น่าจะบาปอย่างแรงส์ !!
สิ่งที่ขาดไม่ได้เลยในกระบวนการของ CI คือ คำว่าคุณภาพ
เราจะรู้ได้อย่างไรว่า แต่ละการเปลี่ยนแปลงนั้น- ระบบยังสามารถทำงานได้อย่างถูกต้องหรือไม่ ?
- ระบบยังสามารถทำงานได้ตามความคาดหวังหรือไม่ ?
มาดูกันหน่อยว่าขั้นตอนใน CI ควรเป็นอย่างไรบ้าง ?
อาจจะเรียกว่า Continuous Integration Process หรือบางคนอาจจะเรียกว่า Build pipeline ซึ่งผมขออธิบายตั้งแต่เรื่องพัฒนาของ Developer แต่ละคนกันเลย มีขั้นตอนดังนี้- Developer แต่ละคนต้องสามารถ build, test และ run ระบบที่เครื่องตัวเองได้
- เมื่อทำการพัฒนา feature เสร็จ แน่นอนว่าต้องมีชุดการทดสอบแบบอัตโนมัติด้วยเสมอ
- Developer ต้องทำการ build, test และ run บนเครื่องของตัวเอง เพื่อทำให้แน่ใจว่าระบบทำงานได้ถูกต้อง
- Developer ต้องทำการ build, test และ run บนเครื่องของตัวเอง เพื่อทำให้แน่ใจว่าสิ่งที่เปลี่ยนแปลงไม่กระทบส่วนอื่น ๆ
- ให้ทำการดึง source code ล่าสุดจาก Repository ของระบบ เพื่อตรวจสอบว่ามีการเปลี่ยนแปลงหรือไม่
- ถ้ามีการเปลี่ยนแปลงก็ให้ทำการรวม หรือ merge ที่เครื่องของ Devleoper ก่อน จากนั้นจึงทำการ build, test และ run อีกรอบ
- แต่ถ้าเกิดปัญหา หรือ ข้อขัดแย้งต่าง ๆ ก็ให้ทำการแก้ไขที่เครื่อง Developer ก่อนเสมอ
- เมื่อทุกอย่างผ่านทั้งหมด ให้ทำการส่งการเปลี่ยนแปลงไปยัง Repository กลาง
- เมื่อ Repository กลางมีการเปลี่ยนแปลง จะต้องมีระบบ CI ทำการ build, test และ run อีก เพื่อทำให้มั่นใจต่อระบบ
- แต่ถ้าเกิดความผิดพลาดบนระบบ CI จะทำการแจ้งไปยังทีมพัฒนา เพื่อให้ทุกคนหยุด เพื่อทำการแก้ไขให้ผ่าน
- เมื่อทุกอย่างบนระบบ CI ทำงานเรียบร้อยก็สามารถส่งผลลัพธ์ไปยังส่วนการทำงานอื่นต่อไป เช่น การทดสอบ และ การ deploy หรือส่งต่อไปยังระบบ Continuous Delivery เป็นต้น
- ระบบจะไม่พังจริง ๆ หรอ ?
- สิ่งที่แก้ไขจะไม่กระทบส่วนอื่น ๆ จริงหรอ ?
- เสร็จจริง ๆ หรอ ?
- .....
มาดูประโยชน์ของ Continuous Integration กันบ้าง
- รู้และเห็นข้อผิดพลาดได้อย่างรวดเร็ว
- ลดจำนวน Bug ลงไป
- ทำให้ทุกคนทุกทีมเห็นความคืบหน้าของการพัฒนา
- ทำให้เราเห็นขั้นตอนการพัฒนา
- ทำให้เราเห็นขั้นตอนการทดสอบ
- ทำให้เราเห็นปัญหา และ ปรังปรุงได้อย่างทันท่วงที
- ลดค่าใช้จ่ายในเรื่องต่าง ๆ ทั้งการแก้ไขข้อผิดพลาด ทั้งการทดสอบซ้ำ ๆ ทั้งปัญหาจากความเข้าใจผิดต่าง ๆ
ปล. การทดสอบแบบอัตโนมัตินั้น ควรครอบคลุมทั้ง Functional และ Non-functional requirement
โดย Continuous Integration (CI) นั้น
เป็นพื้นฐานที่สำคัญอย่างยิ่งของ Continuous Delivery และ Continuous Deployment ทำให้เราพร้อมที่จะ deploy และ release ระบบงานได้ตามที่ต้องการ โดยเรื่องคุณภาพนั้นมันไม่สามารถต่อรองได้เลย ต้อง Build-in อยู่ในทุกขั้นตอนของการพัฒนา สามารถอ่านเรื่อง 10 แนวปฏิบัติที่ดีของ Continuous Integration ได้ ปิดท้ายด้วยเรื่องของเครื่องมือสำหรับระบบ CI ก็ลองไปดูเพิ่มเติ่มได้ที่ List of CI Toolsแต่เหนือสิ่งอื่นใดทุกสิ่งทุกอย่างมันถูกสร้างมาจากคน ดังนั้นเรื่องคุณภาพของคนจึงสำคัญอย่างมาก