Skip to main content
Case Studies

เว็บไซต์ Deploy แต่ไม่อัปเดต? — เบื้องหลังการไล่จับบั๊กที่ Dashboard บอกว่า "สำเร็จ" แต่จริง ๆ ไม่ใช่

เมื่อระบบ CI/CD รายงานว่า deploy สำเร็จทุกครั้ง แต่เว็บไซต์กลับแสดงข้อมูลเก่า 3 วัน — บันทึกกระบวนการไล่หาสาเหตุแบบ step-by-step ที่ DevOps ทุกคนควรรู้

17 มี.ค. 20268 นาที
DevOpsKubernetesCI/CDDebuggingInfrastructureCase Study

เกิดอะไรขึ้น?

วันหนึ่ง เราเพิ่มบทความใหม่ลงเว็บไซต์ ระบบ CI/CD build สำเร็จ ✅ deploy สำเร็จ ✅ Dashboard สีเขียวทุกอย่าง — แต่พอเปิดเว็บไซต์ดู ข้อมูลเก่า 3 วันยังอยู่ บทความใหม่หายไปหมด

ไม่ใช่แค่ครั้งเดียว — ย้อนกลับไปดูพบว่า deploy 3 ครั้งติดต่อกัน ถูกรายงานว่า "สำเร็จ" ทั้งหมด แต่ไม่มีครั้งไหนที่อัปเดตจริง

นี่คือบันทึกกระบวนการไล่หาสาเหตุ ตั้งแต่สิ่งที่เราเห็น → สิ่งที่เราคิด → สิ่งที่เราพบ


ขั้นที่ 1 — ยืนยันว่า "สำเร็จ" จริงหรือ?

สิ่งแรกที่ทำคือตรวจสอบ pipeline ทุกขั้นตอน:

  • Build — image ถูกสร้างและ push ขึ้น registry ✅
  • Deploy — ระบบ apply configuration เข้า cluster สำเร็จ ✅
  • Rolloutค้าง! timeout หลัง 2 นาที แต่ถูกจัดการด้วย fallback message แทนที่จะเป็น error ❌

จุดสำคัญ: ระบบรายงานว่า "สำเร็จ" เพราะ timeout ถูกจัดการเป็น warning ไม่ใช่ error — pipeline ผ่านหมดแม้ว่าขั้นตอนสุดท้ายจะล้มเหลว

บทเรียนแรก: "ไม่มี error" ไม่ได้แปลว่า "สำเร็จ" — Silent failure อันตรายกว่า loud failure เสมอ


ขั้นที่ 2 — ตรวจสอบสมมติฐานที่เห็นได้ชัดก่อน

เมื่อรู้ว่า rollout ค้าง คำถามต่อไปคือ "ทำไม?" เราเริ่มจากสมมติฐานที่พบบ่อยที่สุด:

สมมติฐาน A: ทรัพยากรไม่พอ?

เปิด monitoring dashboard ดู — CPU ใช้แค่ 7%, Memory ใช้แค่ 38%, Load Average ต่ำมาก

❌ ตัดออก — ทรัพยากรเหลือเฟือ

สมมติฐาน B: Health check ล้มเหลว?

ตรวจสอบ configuration — endpoint ที่ใช้ตรวจสุขภาพถูกตั้งค่าไว้ถูกต้อง เคยทำงานได้ในเวอร์ชันก่อนหน้า

❌ ตัดออก — configuration ไม่มีอะไรเปลี่ยน

สมมติฐาน C: Image ดึงไม่ได้?

ตรวจ registry — image ถูก push สำเร็จและดึงได้ปกติ

❌ ตัดออก — ไม่ใช่ปัญหา image


ขั้นที่ 3 — ย้อนเวลาหาจุดที่ "พัง"

เมื่อสมมติฐานแรก ๆ ตกหมด เราเปลี่ยนมุม — ย้อนกลับไปหาครั้งสุดท้ายที่สำเร็จจริง แล้วเปรียบเทียบ:

เวอร์ชัน ผลลัพธ์ เวลาที่ใช้
v1.1.195 ✅ สำเร็จ ~14 วินาที
v1.1.196 ❌ timeout >120 วินาที
v1.1.197 ❌ timeout >120 วินาที
v1.1.198 ❌ timeout >120 วินาที

แพทเทิร์นชัดเจน: v1.1.195 สำเร็จปกติ ตั้งแต่ v1.1.196 เป็นต้นมาค้างทุกครั้ง

ตรวจสอบว่ามีอะไรเปลี่ยนระหว่าง 2 เวอร์ชันนี้ — ไม่มีอะไรเปลี่ยนเลย ในส่วน infrastructure มีแต่การเพิ่มเนื้อหาใหม่


ขั้นที่ 4 — Root Cause: "โดมิโน" ที่ล้มต่อกัน

เมื่อวิเคราะห์ลึกขึ้น จึงเข้าใจว่าเกิดอะไรขึ้น:

กลไกของ Rolling Update

ระบบ container orchestration ใช้กลยุทธ์ rolling update เพื่อ zero-downtime deployment:

  1. สร้าง container ใหม่ ก่อน (surge)
  2. รอจนใหม่พร้อม (readiness check ผ่าน)
  3. ค่อยปิดเก่า (terminate)

ด้วยการตั้งค่า "ห้ามลดจำนวนที่ทำงานได้" — container เก่าจะถูกปิดได้ก็ต่อเมื่อ container ใหม่พร้อมแล้วเท่านั้น

ปัญหา: Chain Reaction

  1. v1.1.196 timeout — rollout ไม่เสร็จภายในเวลาที่กำหนด ระบบทิ้ง rollout ไว้ใน "สถานะกำลังดำเนินการ" (in-progress)
  2. v1.1.197 มา deploy ทับ — แต่ระบบยังประมวลผล rollout เก่าอยู่ ทำให้ใหม่ก็ค้างตาม
  3. v1.1.198 มาอีก — ซ้อนอีกชั้น เหมือน โดมิโนที่ล้มต่อกัน

บทเรียนที่สอง: Rollout ที่ timeout ไม่ได้หายไป — มันค้างรอจนกว่าจะมีคนมาแก้


ขั้นที่ 5 — ทำไม Pipeline ไม่แจ้งเตือน?

นี่คือส่วนที่ "เจ็บ" ที่สุด: pipeline ทำงานเสร็จทุกครั้ง เพราะ timeout ถูกจัดการเป็นแค่ warning

กลไกมันทำงานแบบนี้:

  • ถ้า rollout สำเร็จ → แสดง "สำเร็จ"
  • ถ้า rollout timeout → แสดง "⚠️ timeout" แต่ pipeline ยังถือว่าผ่าน

ผลลัพธ์: Dashboard สีเขียว ✅ ทุกครั้ง ไม่มีใครรู้ว่าเว็บค้างอยู่ที่เวอร์ชันเก่ามา 3 วัน

บทเรียนที่สาม: ทุก warning ที่ถูกเพิกเฉยคือ error ในอนาคต — timeout ควรเป็น failure ไม่ใช่ warning


วิธีแก้ — 3 ระดับ

ระดับ 1: แก้ไขเฉพาะหน้า

บังคับ restart ให้ระบบล้าง rollout ที่ค้างทิ้ง แล้วเริ่ม deploy ใหม่สะอาด

ระดับ 2: ป้องกันไม่ให้เกิดซ้ำ

  • เปลี่ยน pipeline ให้ rollout timeout = failure ไม่ใช่ warning
  • เพิ่มขั้นตอน "ล้าง rollout เก่า" ก่อนเริ่ม deploy ใหม่ทุกครั้ง
  • Deploy ทีละ service — ไม่ deploy web + API พร้อมกัน

ระดับ 3: Monitoring & Alerting

  • ตั้ง alert เมื่อ "เวอร์ชันที่ deploy ≠ เวอร์ชันที่ serve อยู่"
  • ตรวจสอบ response header หลัง deploy ว่าตรงกับ version ล่าสุด
  • ใช้ smoke test หลัง deploy — ถ้าเนื้อหาไม่ตรง ให้ rollback อัตโนมัติ

5 บทเรียนสำหรับทุกทีม

1. อย่าเชื่อ Dashboard สีเขียว

"Build สำเร็จ" ≠ "Deploy สำเร็จ" ≠ "ใช้งานได้จริง" — ต้อง verify ถึงขั้นตอนสุดท้ายเสมอ

2. Silent Failure อันตรายกว่า Loud Failure

ข้อผิดพลาดที่ส่งเสียงดังจะถูกแก้ทันที ข้อผิดพลาดที่เงียบจะสะสมจนกลายเป็นวิกฤต

3. ย้อนเวลาก่อนเดาสาเหตุ

แทนที่จะเดาว่า "น่าจะเป็นเรื่องนั้น" — หาจุดที่ระบบทำงานได้ปกติครั้งสุดท้าย แล้วเปรียบเทียบ วิธีนี้ตัดสมมติฐานที่ผิดออกได้เร็วที่สุด

4. ทุก Warning ควรมี Escalation Path

warning ที่เกิดซ้ำ 3 ครั้งติดต่อกันไม่ใช่ warning อีกต่อไป — มันคือ incident

5. ออกแบบ Pipeline ให้ "Fail Fast, Fail Loud"

ระบบที่ดีควรส่งเสียงดังเมื่อมีปัญหา ไม่ใช่ซ่อนปัญหาไว้ใต้ status สีเขียว


สรุป

ปัญหานี้ไม่ได้เกิดจากโค้ดพัง ไม่ได้เกิดจากเซิร์ฟเวอร์ล่ม และไม่ได้เกิดจากทรัพยากรไม่พอ — แต่เกิดจาก "ช่องว่าง" ระหว่าง build สำเร็จ กับ deploy จริง ที่ไม่มีใครมอนิเตอร์

ในโลกของ DevOps สิ่งที่คุณไม่ได้วัด คือสิ่งที่คุณไม่รู้ และสิ่งที่คุณไม่รู้ คือสิ่งที่จะกลับมากัดคุณในวันที่คุณคาดไม่ถึง


หากองค์กรของคุณกำลังเผชิญปัญหาคล้ายกัน — deploy ดูเหมือนสำเร็จแต่ระบบไม่อัปเดต, pipeline เงียบเกินไป, หรือต้องการวาง infrastructure ที่มั่นคง ปรึกษาทีม Enersys เราช่วยออกแบบและแก้ไขระบบ DevOps ให้ทำงานได้จริง


แหล่งข้อมูล

บทความที่เกี่ยวข้อง

เบื้องหลัง CI/CD Pipeline ของ Enersys — จาก git push ถึงเว็บไซต์ Live ใน 5 นาที

เปิดเบื้องหลังวิธีที่เราส่งมอบเว็บไซต์ enersys.co.th ขึ้น Production — ตั้งแต่ Pull Request, Docker Multi-Stage Build, DigitalOcean Registry จนถึง Kubernetes Rolling Update บน Self-Hosted Runner

PDPA Compliance Automation — เมื่อต้องจัดการข้อมูลส่วนบุคคล 500,000 Records แล้วจะรู้ได้ยังไงว่าไม่หลุด?

Case Study การสร้างระบบ PDPA Compliance อัตโนมัติสำหรับองค์กรที่มีข้อมูลส่วนบุคคลกว่า 500,000 Records — ตั้งแต่ Data Mapping, Consent Management จนถึง Breach Detection ที่ทำงาน 24/7

AI Chatbot ROI — เมื่อลูกค้าถาม 3,000 คำถาม/วัน แล้ว Bot ตอบถูกแค่ 60% จะปรับยังไง?

Case Study การปรับปรุง AI Chatbot ที่ตอบถูกแค่ 60% ให้กลายเป็นระบบที่ Accuracy 94% ลด Cost per Interaction 68% และ Handle 85% ของคำถามทั้งหมดโดยไม่ต้องส่งต่อคน

"Empowering Innovation,
Transforming Futures."

ติดต่อเราเพื่อทำให้โปรเจกต์ของคุณเป็นจริง