เครื่องมือโอเพนซอร์ส Act ที่สัญญาว่าจะให้นักพัฒนาสามารถรันเวิร์กโฟลว์ของ GitHub Actions ในเครื่องโลคอลได้ ได้จุดประกายการถกเถียงอย่างมากในหมู่นักพัฒนาที่พบผลลัพธ์แตกต่างกันเมื่อพยายามใช้งาน แม้ว่า Act จะมีเป้าหมายที่จะให้วงจรผลตอบรับที่เร็วขึ้นและแทนที่เครื่องมือรันงานแบบดั้งเดิมอย่าง Make แต่ผู้ใช้หลายคนรายงานว่าพบความท้าทายที่สำคัญเมื่อนำไปใช้ในสถานการณ์จริง
Act ถูกออกแบบมาด้วยเป้าหมายหลักสองประการ: การให้ผลตอบรับอย่างรวดเร็วสำหรับการเปลี่ยนแปลงเวิร์กโฟลว์ของ GitHub Actions โดยไม่ต้องคอมมิตและพุช และการทำหน้าที่เป็นตัวรันงานในเครื่องโลคอล เครื่องมือนี้ทำงานโดยอ่านไฟล์เวิร์กโฟลว์จากไดเรกทอรี .github/workflows/
ใช้ Docker เพื่อดึงหรือสร้างอิมเมจที่จำเป็น และจากนั้นดำเนินการแอคชันในคอนเทนเนอร์ที่กำหนดค่าให้ตรงกับสภาพแวดล้อมของ GitHub
ปัญหาความเข้ากันได้ของแพลตฟอร์ม
ผู้ใช้ที่พยายามรัน Act บนสถาปัตยกรรมฮาร์ดแวร์ที่แตกต่างกันเผชิญกับอุปสรรคที่สำคัญ นักพัฒนาคนหนึ่งรายงานว่าล้มเหลวอย่างต่อเนื่องเมื่อพยายามดีบักปัญหา CI บนแมคซีรีส์ M ซึ่งเน้นให้เห็นถึงความไม่ตรงกันของแพลตฟอร์มระหว่างสภาพแวดล้อมโลคอลและตัวรัน CI แม้แต่การใช้อิมเมจเฉพาะทางเช่นจาก catthehacker - ซึ่งตามรายงานใช้พื้นที่มากกว่า 60GB เมื่อไม่ได้บีบอัด - ก็ไม่สามารถแก้ไขปัญหาความเข้ากันได้
เพิ่งสัปดาห์นี้เองผมลองให้โอกาสมันอีกครั้งเพื่อดีบักความล้มเหลวแปลกๆ ของ CI สำหรับการทดสอบ ruby ผมใช้แมคซีรีส์ M ดังนั้นจึงมีความไม่ตรงกันของแพลตฟอร์มโดยธรรมชาติ... ผมไม่เคยสามารถทำให้มันทำงานได้เลยนอกจากขั้นตอน dry-run
ปัญหาความเข้ากันได้ของแพลตฟอร์มขยายไปไกลกว่าแค่ Apple Silicon โดยมีข้อจำกัดสำคัญอีกอย่างคือ Act ไม่รองรับ Podman ซึ่งเป็นเอนจินคอนเทนเนอร์ทางเลือก ผู้ใช้รายงานว่าความพยายามในการหารือเกี่ยวกับความเข้ากันได้กับ Podman มักถูกปฏิเสธอย่างรวดเร็ว ซึ่งบางคนรู้สึกว่าผิดปกติสำหรับโครงการโอเพนซอร์ส
คุณสมบัติหลักของ Act:
- รัน GitHub Actions workflows ในเครื่องท้องถิ่น
- ใช้ Docker เพื่อจำลองสภาพแวดล้อมการทำงานของ GitHub
- กำหนดค่าตัวแปรสภาพแวดล้อมและระบบไฟล์ให้ตรงกับ GitHub
- ต้องการเครื่องมือ Go 1.20+ สำหรับการสร้างจากซอร์สโค้ด
ปัญหาทั่วไปที่มีการรายงาน:
- ปัญหาความเข้ากันได้ของแพลตฟอร์ม (โดยเฉพาะบน Mac ซีรีส์ M)
- ไม่รองรับ Podman
- ขนาดของ container images ใหญ่ (สูงถึง 60GB เมื่อไม่ได้บีบอัด)
- ความยากลำบากในการจัดการตัวแปรสภาพแวดล้อมและข้อมูลลับ
- ความท้าทายในการใช้งาน workload identity federation
- ต้องการการปรับเปลี่ยน workflow สำหรับการรันในเครื่องท้องถิ่น
ความซับซ้อนของการกำหนดค่า
แม้เมื่อเครื่องมือทำงานสำเร็จ นักพัฒนาก็ยังเผชิญกับความท้าทายในการกำหนดค่าสภาพแวดล้อม เวิร์กโฟลว์ CI หลายตัวขึ้นอยู่กับตัวแปรสภาพแวดล้อมเฉพาะและซีเคร็ตที่ต้องกำหนดค่าใหม่ในเครื่องโลคอล แม้ว่า Act จะมีโซลูชันสำหรับการโหลดซีเคร็ตจากไฟล์ แต่การใช้งาน workload identity federation และกลไกการยืนยันตัวตนขั้นสูงอื่นๆ ในเครื่องโลคอลก็เพิ่มความซับซ้อนเพิ่มเติม
เวิร์กโฟลว์ที่ใช้โทเค็น OpenID Connect (OIDC) ของ GitHub สำหรับการเข้าถึงทรัพยากรคลาวด์เช่น AWS ต้องการตรรกะเงื่อนไขพิเศษเพื่อให้ทำงานได้อย่างถูกต้องทั้งในสภาพแวดล้อม GitHub และโลคอล ซึ่งจำเป็นต้องมีการแก้ไขไฟล์เวิร์กโฟลว์โดยเฉพาะเพื่อรองรับการทดสอบในเครื่องโลคอล
ความเป็นจริงของการจำลอง CI แบบโลคอล
ความเห็นร่วมกันในหมู่นักพัฒนาหลายคนคือการพยายามรันเวิร์กโฟลว์ CI ที่ซับซ้อนในเครื่องโลคอลอาจเป็นปัญหาโดยพื้นฐาน ผู้แสดงความคิดเห็นคนหนึ่งอธิบายว่ามันเป็นความพยายามที่ค่อนข้างสิ้นหวังยกเว้นสำหรับเวิร์กโฟลว์ที่คอนเทนเนอร์ไรซ์เต็มรูปแบบ แม้กระนั้น การจำลองตัวแปรสภาพแวดล้อมเฉพาะ CI และการแชร์อาร์ติแฟกต์ระหว่างงานก็ยังคงเป็นความท้าทาย
นักพัฒนาบางคนแนะนำว่าแทนที่จะมุ่งเน้นไปที่การจำลองโลคอลที่สมบูรณ์แบบ แนวทางที่ดีกว่าอาจเป็นเครื่องมือที่ช่วยในการสร้างระยะไกลโดยไม่ต้องพุช git รวมกับการเข้าถึง SSH เพื่อตรวจสอบสภาพแวดล้อมการสร้างจริง แนวทางนี้ยอมรับความแตกต่างโดยธรรมชาติระหว่างสภาพแวดล้อมโลคอลและ CI ในขณะที่ยังคงให้ความสามารถในการดีบักที่ดีขึ้น
แม้จะมีความท้าทายเหล่านี้ ผู้ใช้บางคนรายงานว่า Act ได้ช่วยให้พวกเขาก้าวหน้าในเวิร์กโฟลว์การพัฒนา ซึ่งแนะนำว่าแม้จะมีข้อจำกัด เครื่องมือนี้ก็ให้คุณค่าสำหรับกรณีการใช้งานและสภาพแวดล้อมบางอย่าง
การอภิปรายเกี่ยวกับ Act เน้นให้เห็นถึงปัญหาที่กว้างขึ้นในระบบนิเวศของ GitHub Actions: ในขณะที่ GitHub ได้สร้างแพลตฟอร์ม CI/CD ที่ครอบคลุม เครื่องมือดีบักส่วนใหญ่ถูกปล่อยให้ชุมชนเป็นผู้พัฒนา ช่องว่างระหว่างความสามารถของแพลตฟอร์มและเครื่องมือดีบักนี้เป็นโอกาสสำหรับทั้ง GitHub หรือนักพัฒนาบุคคลที่สามในการสร้างโซลูชันที่แข็งแกร่งยิ่งขึ้น
อ้างอิง: act