Automating Android Play Store Releases: ปัญหาโควตาจัดเก็บ
เจาะลึกบทเรียนจากซีรีส์การสร้างระบบอัตโนมัติปล่อยแอป Android ตอนที่ 3 เมื่อระบบต้องชนกำแพงโควตาจัดเก็บฟรี 500MB ของ GitHub Actions จนสะดุด

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- ซีรีส์อัตโนมัติปล่อยแอป Android ตอนที่ 3 เผยปัญหาค่าใช้จ่ายแฝงจากโควตาจัดเก็บ
- GitHub Actions ฟรีเทียร์ให้โควตาจัดเก็บรวมทั่วองค์กรจำกัดเพียง 500MB
- สาเหตุหลักมาจากแคช Gradle ที่แยกตามกิ่งและคีย์แคชที่ใช้งานไม่ได้จริง
- ทางออกระยะยาวคือการย้ายไปใช้เซิร์ฟเวอร์รันเนอร์ที่ดูแลจัดการเอง
นี่คือตอนที่ 3 ของซีรีส์ 5 ตอนเกี่ยวกับการสร้างไปป์ไลน์อัตโนมัติสำหรับปล่อยแอปพลิเคชัน Android หลายตัว โดยในสองตอนแรกได้ครอบคลุมเรื่องการตั้งค่า การลงนามโค้ด การกำหนดเวอร์ชัน และระเบียบวินัยในการปล่อยแอป แต่ทว่าในตอนนี้จะพาไปสำรวจปัญหาที่เกิดขึ้นเมื่อไปป์ไลน์ที่ทำงานเสร็จสมบูรณ์แล้วกลับซ่อนปัญหาเรื่องต้นทุนที่ไม่มีใครคาดคิดไว้ล่วงหน้า
หลังจากไปป์ไลน์ทำงานได้อย่างเสถียรมานานหลายสัปดาห์ การปล่อยแอปกลับเริ่มล้มเหลวด้วยข้อความแจ้งเตือนว่าโควตาการจัดเก็บอาร์ติแฟกต์เต็ม ซึ่งเป็นปัญหาที่ไม่เกี่ยวกับโค้ดในโปรแกรมเลยแม้แต่น้อย โดย GitHub Actions สำหรับแผนใช้งานฟรีมีโควตาการจัดเก็บอาร์ติแฟกต์รวมทั่วทั้งองค์กรจำกัดไว้ที่ 500MB เท่านั้น และไปป์ไลน์ของเราได้ใช้โควตานี้หมดอย่างรวดเร็วภายในเวลาประมาณสิบวัน
กระบวนการตรวจสอบหาสาเหตุพบว่ามีสำเนาแคช Gradle ที่ซ้ำกันถึงสิบชุดเนื่องจากการตั้งค่าขอบเขตตามกิ่ง (branch-scoped) คีย์แคชที่ใช้งานไม่ได้ตั้งแต่เริ่มเขียน และการตั้งค่าเก็บรักษาไฟล์รุ่นที่ปล่อยไว้ถึง 30 วัน ซึ่งแม้การล้างข้อมูลเหล่านี้จะช่วยได้ชั่วคราว แต่นั่นไม่ใช่การแก้ปัญหาที่แท้จริง

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
เมื่อเจาะลึกถึงสาเหตุของการมีแคชที่ซ้ำกันถึงสิบชุด แทนที่จะใช้แคชอันเดียวร่วมกันทุกกิ่ง พบว่าเกิดจากข้อผิดพลาดที่คีย์แคชถูกทำลาย นอกจากนี้ไฟล์ AAB ที่ลงนามแล้วซึ่งมีขนาดใหญ่ถึง 70MB ยังถูกตั้งค่าให้เก็บรักษาไว้นานถึง 30 วันโดยปริยาย ทั้งที่ไฟล์เหล่านี้ถูกส่งขึ้น Play Store ไปแล้วทันทีหลังสร้างเสร็จ ทำให้การเก็บสำเนาไว้บน GitHub เป็นเพียงความสะดวกในการดีบักที่ไม่เคยมีใครต้องย้อนกลับไปใช้จริง
"Error: Failed to CreateArtifact: Artifact storage quota has been hit."
GitHub Actions Error Message
การจำกัดโควตาจัดเก็บของระบบ CI/CD ภายนอกมักเป็นอุปสรรคเงียบที่ทีมพัฒนาซอฟต์แวร์มักมองข้ามในช่วงแรก การที่ระบบฟรีเทียร์กำหนดโควตารวมทั้งองค์กรทำให้โครงการขนาดใหญ่ที่มีหลายกิ่งการพัฒนาชนเพดานนี้ได้ง่าย การย้ายไปใช้ Infrastructure ของตนเอง (Self-hosted runner) จึงเป็นทางเลือกที่ช่วยปลดล็อกข้อจำกัดด้านทรัพยากรเหล่านี้ แม้จะต้องแลกมากับการดูแลจัดการสภาพแวดล้อมและเครื่องมือภายในด้วยตนเองก็ตาม
การแก้ปัญหาที่ยั่งยืนจึงไม่ใช่แค่การล้างข้อมูลเก่าหรือปรับลดเวลาเก็บรักษาไฟล์ แต่เป็นการยอมรับว่าไปป์ไลน์นี้ไม่ควรพึ่งพาโครงสร้างพื้นฐานที่ใช้ร่วมกันของ GitHub อีกต่อไป การย้ายงานสร้างทั้งหมดไปยังรันเนอร์ที่ดูแลเอง (Self-hosted runner) จึงเป็นทางออกสุดท้าย แม้จะเจออุปสรรคเล็กน้อยในตอนเริ่มต้น เช่น ขาดเครื่องมือวิเคราะห์เวลาอย่าง /usr/bin/time แต่ก็ทำให้ทีมเรียนรู้ว่าคำว่าดูแลเองหมายถึงการรับผิดชอบทุกรายละเอียด
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น