วันเสาร์ที่ 19 และอาทิตย์ที่ 20 กรกฎาคม 2557
มีโอกาสสอนเรื่อง Continuous Integration and Continuous Delivery  with Jenkins
เป็นครั้งที่ 3 โดยครั้งนี้มีผู้เข้าร่วมเรียน แบ่งปัน กัน 14 คน และมี TA อีก 4 คน
เลยขอมาเล่าสรุปว่า ใน course นี้มีเรื่องราวอะไรบ้าง

2014-07-20

รูปถ่ายโดย พี่ @roofimon

โดยในครั้งนี้ได้ทำการปรับรูปแบบการสอนกับพี่ @boyone กันพอสมควร
ซึ่งหัวข้อที่ได้พูดและสอนกันไปในครั้งนี้ ประกอบไปด้วย

  • ความรู้พื้นฐานเกี่ยวกับ Continuous Integration (CI)
  • แนวปฏิบัติของ Continuous Integration ที่ไม่ค่อยมีใครคนสนใจศึกษาก่อนนำไปใช้งานมากเท่าไร
  • ทำความเข้าใจกับคำว่า Build pipeline
  • ออกแบบ Build pipeline ของขั้นตอนการทำงาน
  • เน้นเรื่อง Self-testing ซึ่งเป็นแนวปฏิบัติหลัก ที่เน้นมากๆ
  • การติดตั้ง และ ใช้งาน Jenkins ตั้งแต่เริ่มต้น
  • การ configuration พื้นฐานต่างๆ
  • การ configuration เรื่อง Security
  • เรื่องคุณภาพของ code เช่น unit test, test coverage และ การ review code
  • การ deploy ระบบงานขึ้น Cloud server โดยผมเลือกใช้ Heroku

สิ่งที่คาดหวังจาก course นี้ก็คือ

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

ในครั้งนี้ทางผมกับทีมสอนและแบ่งปัน ต้องการเน้นเรื่อง

1. การออกแบบ build pipeline
การออกแบบสิ่งที่กำลังจะสร้างในระบบ Continuous Integration ซึ่งมันคือหัวใจของการทำงาน
เพื่อให้แต่ละคน แต่ละทีม รู้และเข้าใจขั้นตอนการทำงานตั้งแต่หลังจาก commit code ถึงการ release เลยทีเดียว

2. Self testing
เป็นสิ่งที่ผมคาดหวัง และ อยากให้ทุกๆ คนสามารถ run ระบบงานบนเครื่องพัฒนาได้
สามารถสั่งให้ทำงานคำสั่งต่างๆ ในเครื่องพัฒนา ด้วยเพียง 1 คำสั่ง
สามารถตรวจสอบเรื่องคุณภาพของระบบ ก่อนที่จะ commit ไปยัง source control
หรือก่อนที่จะไปสร้างระบบ Continuous Integration Server ขึ้นมา

โดยในช่วงนี้จะเป็น workshop ซึ่งแบ่งผู้เข้ามาเรียนเป็นกลุ่มๆ ตามภาษาโปรแกรมที่เลือก
ใน course นี้ใช้ภาษาโปรแกรม 4 ภาษา คือ Java, PHP, Python และ Node.js
เป็นบรรยากาศที่สนุกและวุ่นวายมาก แต่สิ่งที่เราต้องการคือ อยากให้ทุกๆ คนนำกลับไปใช้งานได้

3. เริ่มใช้งาน Jenkins
ใน course จะใช้เวลาในสองข้อแรกเยอะมากๆ เพื่อทำให้มั่นใจว่าทุกๆ คนทำได้
แล้วเราจึงมาเริ่มติดตั้ง และ configuration ตัว Jenkins ซึ่งเป็น Continuous Integration Server
สอนไปกับแบบ step-by-step และมีเนื้อหาเรื่อง Security เพิ่มเข้ามา
ซึ่งทำให้ Jenkins มันมีความปลอดภัย และ สามารถกำหนดทั้งการ Authentication และ Authorization ได้

4. การติดตั้ง plug-ins ต่างๆ ที่จำเป็น
เนื่องจากการใช้งาน Jenkins นั้น สิ่งที่ขาดไม่ได้เลยก็คือ การใช้งาน plug-in
แต่สิ่งที่ยากก็คือ เราจะใช้ plug-in อะไรดีล่ะ
ซึ่งตรงนี้เราได้แนะนำ plug-in ต่างๆ ที่จำเป็นต่อการใช้งานต่างๆ ให้

5. เรื่องคุณภาพของ software 
ในส่วนนี้ถือว่าเป้นส่วนที่ ขาดไปไม่ได้เลย
เพราะว่า คุณภาพ นั้น ไม่สามารถต่อรองได้เลย
จะต้อง build-in เข้ามาด้วยเสมอ
โดยจะเน้นตั้งแต่ unit test การตรวจสอบ test coverage
ตลอดจนเรื่องการวิเคราะห์ sourcecode ด้วย SonarQube
ซึ่งในส่วนนี้ เราคาดหวังไว้ว่า ทุกๆ คนจะเห็นคุณค่าของมัน
และนำไปใช้ในทีม เพื่อปรับปรุงให้ software ที่สร้างดีขึ้นอยู่เสมอ
รวมทั้ง วิธีการนำการวิเคราะห์เหล่านี้ ไปใส่ไว้ใน Jenkins ด้วย

เรื่อง feedback จากผู้เรียน

เมื่อจบการเรียน course นี้ เราได้ขอ feedback จากผู้เรียน ทันที
โดยสิ่งที่เราได้ feedback กลับมา เพื่อให้เรานำกลับไปปรับปรุงการสอนให้ดียิ่งขึ้นไป ประกอบไปด้วย

กลุ่มที่ 1 คือ สิ่งที่ดีๆ

  • เรื่องดีๆ ซึ่งทุกๆ คน สนุกสนาน และ ได้ความรู้

กลุ่มที่ 2 คือ สิ่งที่แย่ๆ  

  • เรื่องหลักๆ คือ เรื่องที่เราสอนเร็วไปในบางช่วง เป็น feedback ที่ดีมาก ซึ่งเราจะใช้ในการปรับปรุงครั้งต่อไป

กลุ่มที่ 3 คือ อยากให้เราปรับปรุงเรื่องอะไร

  • เรื่องของการทดสอบในทุกๆ ระดับ ทั้ง functional และ non-functional requirement
  • เรื่องการการทดสอบ และ integration กับ Mobile application
  • เรื่องของเวลาการสอนมากกว่านี้ เช่น 3 วัน
  • เรื่องของเอกสารการสอน ที่ควรจะส่งให้ก่อนเรียน

สุดท้ายแล้ว

ผมขอเน้นย้ำว่า ระบบ Continuous Integration ที่คุณสร้างขึ้นมานั้น
มันไม่ใช่ Blame system ที่มาคอยดูว่าใครทำผิด
แต่มันคือ สิ่งที่เข้ามาช่วยให้ทีมพัฒนาอยู่อย่างต่อเนื่อง
ทำการแก้ไขปัญหาอยู่อย่างต่อเนื่อง
และทำให้เห็นสุขภาพของ software ที่เรากำลังพัฒนาว่า มันเป็นอย่างไร

ขอบคุณทุกๆ คนที่เข้ามาร่วม เรียน สอน ฮา ไปกับพวกเราครับ
เจอกันใน course ต่อๆ ไปครับ by SPRINT3R