ปกติเมื่อเราพูดคุยเรื่อง Continuous Integration แล้ว
คำถามแรกหรือคำถามยอดฮิตก็คือ คุณใช้ Continuous Integration ตัวไหน ?
สิ่งที่ผมตอบกลับไปก็คือ Continuous Integration มันไม่ใช่เครื่องมือ
แต่มันคือแนวคิด ทัศนะคติ รวมไปถึงวัฒนธรรมของทีมและองค์กรกันเลย
สิ่งที่ทีมพัฒนาควรจะตกลงร่วมกันในการพัฒนา (Team Working Agreement) ดังนี้
- เมื่อมีเราทำการดึง code จาก repository ล่าสุดลงมาแล้ว จะต้องสามารถ build และทดสอบผ่านทั้งหมดอยู่เสมอ
- ทุกๆ คนจะต้องทำการ check-in code ไปยัง repository ทุกๆ ชั่วโมง หรือ ทุกๆ การเปลี่ยนแปลง ยิ่งทำบ่อยยิ่งดี เพราะว่าการ check-in มันจะทำให้เกิดการพูดคุยภายในทีมอยู่เสมอ
จากข้อตกลงข้างบนนั้น เราจะทำให้มันเกิดขึ้นได้อย่างไรล่ะ
จากที่พบเจอ มันมีหลายเส้นทางและวิธีการมากมาย โดยขอแนะนำดังนี้
- ก่อนที่จะทำการ Check-in code ของคุณไปยัง repository นั้นจะต้องทำการ build และต้องทดสอบผ่านทั้งหมด
- แจ้งหรือตะโกนบอกให้ทีมรู้ว่า เราทำการแก้ไข code แล้วนะ เพื่อให้แต่ละคนทำการดึง code ล่าสุดลงมา เพื่อทำให้มั่นใจว่าการ integrate มันผ่านและทำงานได้จริงๆ นะ
- ทำการ Check-in code ไปยัง repository
- จะต้องมีเครื่อง server หรือเครื่องแยกออกมา ทำการดึง code ล่าสุดจาก repository ลงมา แล้วทำการ build และ ทดสอบทั้งหมดอีกครั้ง เพื่อให้มั่นใจว่าทุกๆ อย่างผ่านนะ และในขั้นตอนนี้จะทำให้ไม่เกิดคำพูดที่ว่า มันสามารถทำงานได้บนเครื่องผม/หนู นะ!! ดังนั้นถ้าเกิดปัญหาหรือข้อผิดพลาดขึ้นมาก็กลับไปแก้ไขใหม่หรือ rollback กลับไป และกลับไปทำข้อ 1 อีกครั้ง
- เมื่อข้อ 4 ผ่านแล้ว ให้บอกทุกๆ คนในทีมทำการดึง code ชุดล่าสุดจาก repository ลงมาอีกครั้งหนึ่ง
จะสังเกตได้ว่า
มาถึงตรงนี้ไม่มีการพูดถึงเครื่องมืออะไรเลย
แต่มันคือวิธีการทำงานของทีมเท่านั้น ว่าต้องทำอะไรบ้าง
เมื่อทีมเข้าใจขั้นตอนการทำงานต่างๆ แล้วนั้น
จะพบว่ามีขั้นตอนการทำงานเยอะพอสมควร
แล้วเราจะลดขั้นตอนการทำงานได้อย่างไรล่ะ ?
คำถามนี้แหละ เป็นเหตุผลที่ต้องให้ทีมเริ่มมองหาเครื่องมือมาช่วยทำในข้อ 4
เพื่อรวบรวมขั้นตอนการทำงานจากขั้นตอนการทำงานของแต่ละคนในทีม
ซึ่งทุกคนจะต้องทำงานด้วยขั้นตอนเหมือนกันด้วยนะ
ดังนั้นก่อนที่จะเริ่มหาเครื่องมือมาช่วย
ทีมจะต้องหาวิธีการทำงานแบบ manual ก่อน
เมื่อได้ขั้นตอนการทำแบบ manual ที่ทุกคนในทีมสามารถทำงานได้แล้ว
ก็สามารถนำเครื่องมือที่เหมาะสมกับทีมของเราได้ง่าย
และสุดท้ายมันจะทำให้เกิดระบบ Continuous Integration ที่เหมาะสมกับทีมของคุณครับ
ดังนั้น Continuous Integration ไม่ใช่เครื่องมือนะครับ !!
Reference Website
Wikipedia :: Continuous Integration
Martin Folwer :: Continuous Integration