devops-in-practice
กระบวนการส่งมอบ Software (Delivery) ไปยัง Production server นั้น
มันเป็นสิ่งที่มีความท้าทายและความเสี่ยงอย่างมาก
ทั้งฝ่าย business ต้องคิดและวางแผนของ product
ทั้งฝ่าย architect ต้องวางโครงสร้างและ technical solution
ทั้งฝ่าย development ต้องสร้าง product ที่มีคุณภาพออกมา

แน่นอนว่าต้องผ่านการทดสอบในรูปแบบต่าง ๆ มาอย่างหนักหน่วง
ถึงแม้จะมีการเตรียมการและลงมือทำดีอย่างไรก็ตาม
กระบวนการส่งมอบ Software ยังคงยากและอันตรายอย่างมาก

ปัญหาที่พบเห็นได้บ่อย ๆ คือ

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

  • ลดเวลา
  • ลดจำนวนคน

แต่เมื่อพิจารณาในส่วนของการส่งมอบ software
เราต้องมีกระบวนการและเครื่องมือที่เหมาะสม
เพื่อลดปัญหาต่าง ๆ ที่เกิดขึ้น
ซึ่งเป็นความท้าทายของทุก ๆ บริษัทอย่างมาก
ว่าจะจัดการเรื่องนี้กันอย่างไร ?

เริ่มที่กระบวนการส่งมอบ software

ContinousDeliverypipeline

จากรูปนั้นพบว่า กระบวนการ deploy มักจะเป็นปัญหาคอขวดเสมอ
ซึ่งนั่นเป็นงานของทีม Operation !!

ส่วนใหญ่มีกระบวนการ deploy แบบ manual
รวมทั้งมีขั้นตอนการทำงานที่เยอะมาก ๆ
ทำให้เกิดปัญหาต่าง ๆ มากมาย ส่งผลการ deploy ช้าลงไปอีกด้วย
และบ่อยครั้งก็ไม่สามารถทำการ deploy ได้บ่อยเท่าที่ต้องการ

จากปัญหาเหล่านี้จึงทำให้เกิดแนวคิด DevOps ขึ้นมา
เพื่อลดช่องว่าง และ แก้ไขปัญหาที่เกิดขึ้น
ระหว่างทีมพัฒนาและทีม Operation
เพื่อทำให้กระบวนการส่งมอบ software มีคุณภาพและรวดเร็วขึ้น

แนวคิดหลัก ๆ ของ DevOps ประกอบไปด้วย

  1. การพัฒนาและทดสอบต้องอยู่บน environment ที่คล้ายหรือเหมือน production server
  2. ทำการ deploy บ่อย ๆ
  3. ทำการตรวจสอบเรื่องของคุณภาพอยู่ตลอดเวลา

จากแนวคิดของ DevOps นั้นมีแนวปฏิบัติที่ตอบได้นั่นก็คือ Continuous Delivery
ในหนังสือ Continuous Delivery กล่าวไว้ว่า

The essence of my philosophy to software delivery is to build software so that it is always in a state where it could be put into production. We call this Continuous Delivery because we are continuously running a deployment pipeline that tests if this software is in a state to be delivered.

By Jez Humble and Dave Farley

โดย Continuous Delivery คือวินัยในการพัฒนา software

เพื่อให้สามารถส่งมอบ software ไปยัง production server ได้ทุกเมื่อตามที่ต้องการ
เนื่องจาก software นั้นจะไม่มีคุณค่าและประโยชน์อะไรเลย
ถ้ายังไม่ส่งมอบไปยัง production server หรือถึงผู้ใช้งาน
จำเป็นต้องมีส่วนประกอบต่าง ๆ ดังรูป

ContinuousDelivery

จากรูปนั้นจะพบเจอคำต่าง ๆ มากมาย เช่น

  • Continuous Integration
  • Configuration Management
  • Deployment Automation
  • Continuous Deployment

โดยสิ่งต่าง ๆ เหล่านี้ต้องทำงานแบบอัตโนมัติ
เพื่อลดความผิดพลาดต่าง ๆ ที่เกิดจากคน
เพื่อลดการทำงานเดิมซ้ำ ๆ
เพื่อจัดการ dependency ต่าง ๆ ได้ทั้งจากภายในและภายนอก
เพื่อทำให้สามารถ deploy ระบบงานได้บ่อย ๆ
เพื่อทำให้สามารถทดสอบระบบงานได้บ่อย ๆ
เพื่อทำให้รู้ว่าขั้นตอนการทำงานมีปัญหาอะไรบ้าง
เพื่อทำให้สามารถแก้ไขปัญหาได้อย่างรวดเร็ว
เพื่อแสดงให้เห็นว่ากำลังทำอะไรและแต่ละขั้นตอนทำงานเป็นอย่างไร
เพื่อทำให้มั่นใจว่า สามารถ deploy ในแต่ละ environment ได้
เพื่อทำให้การส่งมอบ software มันง่าย ๆ และทำได้ตามที่ต้องการ
โดยทำงานเป็นรอบสั้น ๆ อาจจะเรียกว่า Iteration หรือ Sprint

และนี่คือแนวคิดและแนวปฏิบัติที่น่าสนใจ
แน่นอนว่าต้องการคนที่มีความรู้ความสามารถ (People and Skill)
และเครื่องมือที่เหมาะสมมาจัดการด้วยเสมอ (Toolsets)

Reference Websites
DevOps in practice
http://martinfowler.com/bliki/DevOpsCulture.html
http://martinfowler.com/delivery.html