-
ปัญหาของ GitHub Actions
- เมื่อไม่นานมานี้ ผู้เขียนใช้เวลาไปมากกับการเขียนสคริปต์ CI ใหม่ด้วย GitHub Actions ก่อนหน้านี้เคยใช้ Earthly แต่โครงการนั้นยุติไปแล้วจึงต้องกลับมาใช้ GitHub Actions อีกครั้ง
- CI มีความซับซ้อน โดยมีทั้ง merge queue, runner หลายตัว, การ build Rust, Docker image, integration test และอื่น ๆ ทุกครั้งที่ merge PR จะใช้เวลา CI จำนวนมาก
- ตามแนวปฏิบัติซอฟต์แวร์ที่ดี ทุกการทดสอบควรผ่าน ความผิดพลาดเล็กน้อยควรถูกแก้ไขอัตโนมัติ และ artifact ที่ผ่านการทดสอบแล้วควรเป็นตัวเดียวกับที่ใช้ปล่อย release ซึ่ง GitHub Actions ทำสิ่งเหล่านี้ได้ แต่การตั้งค่านั้นซับซ้อนและไม่สม่ำเสมอ
-
Status check และ merge queue
- merge queue ของ GitHub จะนำ PR ไป rebase บน main branch แล้วจึงรัน CI แต่จำเป็นต้องรัน CI ทั้งก่อนและหลังนำเข้า queue และการตั้งค่าเรื่องนี้ทำได้ยาก
- วิธีแก้คือกำหนดชื่องานให้เหมือนกันในทั้งสองขั้นตอน เพื่อให้จำเป็นต้องผ่านทั้งสองขั้นตอน
-
ปัญหาด้านความปลอดภัย
- เมื่อไม่นานมานี้ GitHub Action ยอดนิยมตัวหนึ่งถูกเจาะ แนวทางตอบสนองที่มีการแนะนำคือให้ pin dependency ด้วย hash แต่ผู้ใช้ส่วนใหญ่ไม่ได้ทำเช่นนั้น
- โมเดลความปลอดภัยของ GitHub มีความซับซ้อนและทำความเข้าใจได้ยาก แม้จะตั้งค่าสิทธิ์เริ่มต้นของ
GITHUB_TOKEN ได้ แต่การเอาสิทธิ์ออกกลับไม่ชัดเจน
- สิทธิ์ของ workflow ไม่ได้ขึ้นอยู่กับตัว action เอง และการยกระดับสิทธิ์จากภายในโค้ดก็ดูแปลกประหลาด
-
การใช้ Docker ร่วมกับ GitHub Actions
- GitHub Actions สามารถรันงานภายในคอนเทนเนอร์ได้ แต่มีปัญหาเกิดขึ้นจากสิทธิ์ไฟล์และการเปลี่ยนตำแหน่งของไดเรกทอรี
$HOME
- ฟิลด์ container มีข้อจำกัดหลายอย่าง เช่น ไม่สามารถ override entrypoint หรือรันเฉพาะบางขั้นตอนภายในคอนเทนเนอร์ได้
-
การพัฒนา workflow ด้วย YAML
- การเขียน logic ด้วย YAML อาจซับซ้อนและพลาดได้ง่าย ผู้เขียนใช้ IDE อย่าง RustRover เพื่อช่วยตรวจสอบบางส่วน แต่ยังต้องการการตรวจสอบแบบ static ที่ดีกว่านี้
- การทดสอบบนเครื่อง local ทำได้ยาก จึงต้องสร้าง repo แยกที่เหมือนกัน แล้ว commit และ push ซ้ำ ๆ จนกว่า CI จะทำงานได้
- ผู้เขียนพยายามทำให้ workflow มีขนาดเล็ก และ push artifact เพื่อให้นำไปใช้ซ้ำใน workflow อื่นได้ แต่การดาวน์โหลด artifact ต้องใช้ token
-
สรุป
- แม้สคริปต์ CI ชุดใหม่จะช่วยลดเวลา merge ลงได้มาก แต่กระบวนการตั้งค่ายังซับซ้อนและ debug ได้ยาก จึงจำเป็นต้องมีนวัตกรรมใหม่
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
มีความเห็นว่า GitLab ดีกว่า แต่ GitLab ก็มีปัญหาในแบบของตัวเองเช่นกัน
น่าสนใจที่ GitHub Actions และ DevOps ถูกวิจารณ์อย่างกว้างขวาง
เคยใช้ GitLab แล้วเปลี่ยนมา GitHub แต่รู้สึกผิดหวัง
วงจร feedback ที่กินเวลา 30-60 วินาทีนั้นแย่มาก
ไม่ต้องการให้ CI แก้โค้ดโดยอัตโนมัติ
รู้สึกผิดหวังที่ดูเหมือนการพัฒนาของ GitHub Actions จะหยุดชะงัก
GitHub Actions ทำให้มีการใช้คอนเทนเนอร์ในทางที่ผิดเป็นเหมือนสคริปต์ติดตั้ง
การเลือกเครื่องมือให้เหมาะสมเป็นเรื่องสำคัญ
เนื่องจากปัญหาด้านความปลอดภัยของ GitHub Action จึงควรตรึง dependency ด้วยแฮช
GitHub Actions มีปัญหาหลายอย่าง