DevOps มันคืออะไรกันแน่นะ ??

Song Intouch
Gofive
Published in
2 min readOct 12, 2020

เชื่อว่าหลายๆคนที่อยู่ในแวดวง IT น่าจะเคยได้คำว่า DevOps ไม่ว่าคุณจะอยู่ในทีมของ Developer, QA, Infrastructure หรือแม้แต่ Product owner เอง ว่าแต่มันคืออะไรกันแน่นะ การที่จะนำ DevOps มาใช้นั้นง่ายที่สุดคือเปลี่ยนชื่อทีมของเราให้เป็น DevOps (Spartan DevOps, Pegasus DevOps ล้อเล่นครับ 😆 กลับไปจริงจังกันต่อนะดีกว่า)

นิยามของ DevOps เองนั้นมีความเป็นนามธรรมอยู่ระดับหนึ่งรวมถึงความยืดหยุ่น ซึ่งไม่มี process ที่ตายตัว การนำไปปรับไปใช้ของแต่ละบริษัทเพื่อให้เข้ากับวัฒนธรรมของการทำงานและโครงสร้าง ทำให้กระบวนการทำงานของ DevOps แต่ละที่นั้นอาจแตกต่างกัน แต่ Core ของ DevOps นั้นยังคงอยู่และให้ผลลัพธ์ที่ไปในทิศทางเดียวกัน

ตกลงว่า DevOps มันคืออะไรกันแน่นะ ถ้าจะให้อธิบายแบบง่ายๆ DevOps คือ development culture & practices ที่ช่วยให้การพัฒนา software นั้นสามารถทำงานได้อย่างราบรื่น สามารถ deliver software ได้อย่างรวดเร็วและมีความน่าเชื่อถือ ซึ่งมีการนำ tools ต่างๆ มาช่วยในกระบวนการ development ทำให้ DevOps นั้นสามารถเกิดได้ง่ายขึ้นมากในปัจจุบัน

DevOps culture

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

โดยบทความนี้จะขอยกตัวอย่างสำหรับบาง culture ที่สำคัญๆก่อนดังนี้

Shared responsible

Developer, QA, Operation teamต้องทำงานร่วมกันเป็นทีมเดียวกันและมีความรู้สึกที่ไม่ว่างานจะสำเร็จหรือว่าติดปัญหา ก็คือความรับผิดชอบร่วมกัน แทนที่การจะแบ่งแยกเป็นความรับผิดชอบของทีมย่อยๆ ซึ่งจะทำให้เกิดการคิดแก้ไขปัญหาร่วมกันเพื่อให้การส่งมอบงานต่อให้ผู้อื่นทำงานต่อนั้นง่ายขึ้น และลดปัญหาการกล่าวโทษและหาความผิดว่าเป็นของใครได้ด้วย

Autonomous team

การตัดสินใจของทีมนั้นจะสามารถทำได้เอง และลดกระบวนการที่ซับซ้อนในการต้องอนุมัติในการทำงาน ซึ่งจะเป็นผลให้เกิด wait & delay (แต่จะต้องมีกระบวนการในการพิสูจน์คุณภาพก่อนการส่งต่อ)

Value feedback

ให้ความสำคัญกับ feedback ที่ได้รับและ feedback กลับอย่างรวดเร็วและตลอดกระบวนการ โดยไม่ว่า feedback นั้นจะมาจากที่ใดก็ควรที่จะพิจารณาและนำไปเติมเต็มเพื่อลดช่องว่างน้ันๆ

Automation of everything

Automation คือสิ่งที่ขาดไม่ได้เลย ที่จะต้องอยู่ในทุกกระบวนการที่ทำได้เพื่อลดการทำงานแบบ manual ให้ได้มากที่สุด ซึ่งมีโอกาสที่จะเกิด human error ได้ ไม่ว่าจะเป็น Testing, Deployment, Configuration, Issue tracking

DevOps practices

หากจะมองว่า DevOps practices นั้นคือการต่อยอดจาก Agile นั้นก็ไม่ผิดซะทีเดียว เพราะ DevOps ได้แก้ไขจุดอ่อนบางอย่างที่ Agile มีอยู่ หลักๆคือการทำงานร่วมกันระหว่างทีมและเพิ่มความน่าเชื่อถือของแต่ละ state ด้วยการใช้ automation

Process ที่เพิ่มเติมมาจาก Agile มี 5 ขั้นตอนต่อไปนี้

Continuous Integrations

หลังจากที่มีการ commit code ขึ้น repository แล้ว จะต้องมี build automation และ unit test เพื่อให้ developer, operation team รู้ว่ามี side-effect บ้างหรือเปล่า ทั้งนี้ทั้งนั้นถ้าหากการเขียน unit test ไม่ครอบคลุมมากพอก็อาจจะทำให้ไม่ได้รับ failed feedback จาก unit test (แต่เราจะเพิ่มเคสอีกครั้งเมื่อได้รับ feedback จากช่องทางอื่น ถ้าเรา respect DevOps culture 😎)

Continuous Testing

เมื่อมี package ใหม่หลังจาก CI แล้วนั้น automation test จะต้องถูก trigger ในทันทีเพื่อทำ use cases testing ที่เป็น business concern ตรงนี้จะช่วยให้เพิ่มความมั่นใจได้ว่าสิ่งที่เป็น business core ของ software นั้นไม่ได้รับผลกระทบจากการแก้ไขล่าสุด

Continuous Delivery (Continuous Deployment)

หลังจากที่ package ที่ผ่านการ test อย่างหนักหน่วงมาเรียบร้อยแล้วนั้น เราก็มั่นใจได้ระดับหนึงหละว่าส่ิงที่เราได้แก้ไขไปนั้นพร้อมที่จะส่งให้ผู้ใช้ เพื่อมอบประสบการณ์ใหม่ๆให้ users ที่รักของเรา process CD จึงถูก trigger เพื่อนำ package version ล่าสุดขึ้นไปที่ server (UAT, QA) เพื่อส่งมอบขั้นสุดท้ายก่อนการขึ้น Production ต่อไป

ความแตกต่างระหว่าง Continuous Delivery และ Continuous Deployment นั้นคือ Continuous Deployment ต้องการมีกระบวนการ approve ก่อนการขึ้น Production แต่จากประสบการณ์ของผมถึงแม้จะเป็นการ Deploy production นั้น ก็ยังจำเป็นจะต้องมี Staging slot เพื่อให้ผู้ที่สามารถใช้ได้นั้นอยู่ในวงจำกัด (Beta phase) เพื่อลดความเสี่ยงต่อการเกิด Production issue ซึ่งเมื่อทำการ Observe ได้ระดับหนึง (ขึ้นอยู่กับความเสี่ยงต่อความเสียหายของหลายๆอย่าง) จึงสามารถ Swap staging slot ไปยัง Live slot ได้ในทันที หรือถ้ามี Bug ใดๆเกิดขึ้นก็สามารถ Rollback ได้ทันทีเช่นกัน

Continuous Monitoring

เมื่อ package ได้ถูก deploy production แล้วนั้น จะต้องถูก monitor ในหลายๆอย่างเช่น performance, availability, resource consumed, etc… ซึ่งต้องสามารถแสดงรายงานแบบ real-time รวมถึงมี measurement และ criteria เพื่อ feedback ได้เมื่อมีความผิดปกติเกิดขึ้น

Continuous Business Planing

ความต้องการของลูกค้านั้นเปลี่ยนแปลงได้เสมอ(และรวดเร็วมาก) เพราะฉะนั้นการขอ feedback จากผู้ใช้(ทั้ง feature เก่าและใหม่) จึงจำเป็นสำหรับการทำ business planning เพื่อนำมาวิเคราะห์เพื่อให้เข้ากับระบบ Agile(breakdown and prioritize task) และปรับให้เข้ากับความต้องการของผู้ใช้งานรวมและนำมาวางแผนเพื่อการพัฒนาใน iteration ต่อไป

นี่เป็นเพียงเรื่องราวเล็กๆของ DevOps ซึ่งยังมีอีกมากมายที่ไม่สามารถอธิบายได้หมดภายในบทความเดียว ถ้าใครที่ได้อ่านตั้งแต่ต้นจนถึงจุดนี้แล้วยังสงสัยว่า เอ๊ะทำไมเราต้องทำอะไรมากมายขนาดนี้ ทำไมเราไม่แค่เขียนๆโปรแกรมไปแล้วก็ส่งไปให้ QA test หรือว่าคุณก็ commit code มาซิเดี๋ยวผม deploy production นั่นอาจจะเป็นสัญญาณบางอย่างที่บอกว่าคุณอาจจะยังไม่สามารถสัมผัส Sense of ownership ที่จะทำให้การทำงานในแต่ละวันของเราไม่น่าเบื่ออีกต่อไป การเปลี่ยนแปลงนั้นอาจจะเป็นเรื่องยากแต่ยังไงก็ขอเป็นกำลังใจให้ทุกคนครับ 🙌👏🏻

--

--