ปกติเมื่อเราพูดคุยเรื่อง Continuous Integration แล้ว
คำถามแรกหรือคำถามยอดฮิตก็คือ คุณใช้ Continuous Integration ตัวไหน ?
สิ่งที่ผมตอบกลับไปก็คือ Continuous Integration มันไม่ใช่เครื่องมือ
แต่มันคือแนวคิด ทัศนะคติ รวมไปถึงวัฒนธรรมของทีมและองค์กรกันเลย

สิ่งที่ทีมพัฒนาควรจะตกลงร่วมกันในการพัฒนา (Team Working Agreement) ดังนี้

Screen Shot 2557-09-19 at 12.22.31 PM

  1. เมื่อมีเราทำการดึง code จาก repository ล่าสุดลงมาแล้ว จะต้องสามารถ build และทดสอบผ่านทั้งหมดอยู่เสมอ
  2. ทุกๆ คนจะต้องทำการ check-in code ไปยัง repository ทุกๆ ชั่วโมง หรือ ทุกๆ การเปลี่ยนแปลง ยิ่งทำบ่อยยิ่งดี เพราะว่าการ check-in มันจะทำให้เกิดการพูดคุยภายในทีมอยู่เสมอ

จากข้อตกลงข้างบนนั้น เราจะทำให้มันเกิดขึ้นได้อย่างไรล่ะ

จากที่พบเจอ มันมีหลายเส้นทางและวิธีการมากมาย โดยขอแนะนำดังนี้

  1. ก่อนที่จะทำการ Check-in code ของคุณไปยัง repository นั้นจะต้องทำการ build และต้องทดสอบผ่านทั้งหมด
  2. แจ้งหรือตะโกนบอกให้ทีมรู้ว่า เราทำการแก้ไข code แล้วนะ เพื่อให้แต่ละคนทำการดึง code ล่าสุดลงมา เพื่อทำให้มั่นใจว่าการ integrate มันผ่านและทำงานได้จริงๆ นะ
  3. ทำการ Check-in code ไปยัง repository
  4. จะต้องมีเครื่อง server หรือเครื่องแยกออกมา ทำการดึง code ล่าสุดจาก repository ลงมา แล้วทำการ build และ ทดสอบทั้งหมดอีกครั้ง เพื่อให้มั่นใจว่าทุกๆ อย่างผ่านนะ  และในขั้นตอนนี้จะทำให้ไม่เกิดคำพูดที่ว่า มันสามารถทำงานได้บนเครื่องผม/หนู นะ!!  ดังนั้นถ้าเกิดปัญหาหรือข้อผิดพลาดขึ้นมาก็กลับไปแก้ไขใหม่หรือ rollback กลับไป และกลับไปทำข้อ 1 อีกครั้ง
  5. เมื่อข้อ 4 ผ่านแล้ว ให้บอกทุกๆ คนในทีมทำการดึง code ชุดล่าสุดจาก repository ลงมาอีกครั้งหนึ่ง

จะสังเกตได้ว่า

มาถึงตรงนี้ไม่มีการพูดถึงเครื่องมืออะไรเลย
แต่มันคือวิธีการทำงานของทีมเท่านั้น ว่าต้องทำอะไรบ้าง
เมื่อทีมเข้าใจขั้นตอนการทำงานต่างๆ แล้วนั้น
จะพบว่ามีขั้นตอนการทำงานเยอะพอสมควร

แล้วเราจะลดขั้นตอนการทำงานได้อย่างไรล่ะ ?

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

ดังนั้นก่อนที่จะเริ่มหาเครื่องมือมาช่วย

ทีมจะต้องหาวิธีการทำงานแบบ manual ก่อน
เมื่อได้ขั้นตอนการทำแบบ manual ที่ทุกคนในทีมสามารถทำงานได้แล้ว
ก็สามารถนำเครื่องมือที่เหมาะสมกับทีมของเราได้ง่าย
และสุดท้ายมันจะทำให้เกิดระบบ Continuous Integration ที่เหมาะสมกับทีมของคุณครับ

ดังนั้น Continuous Integration ไม่ใช่เครื่องมือนะครับ !!

Reference Website
Wikipedia :: Continuous Integration
Martin Folwer :: Continuous Integration