- แนะนำประสบการณ์การใช้งาน GitLab ระยะยาว โดยเน้นที่การจัดการโปรเจกต์ส่วนตัวและ การผสานรวม CI/CD
- ในช่วงแรก การมี private repository ฟรี เป็นข้อได้เปรียบหลักเมื่อเทียบกับ GitHub และหลังจากนั้นเวิร์กโฟลว์ก็ลงตัวอย่างสมบูรณ์
- ใช้งานฟีเจอร์ Container Registry บ่อยที่สุด โดยสามารถเก็บอิมเมจได้โดยไม่ต้องมีบัญชี Docker Hub แยกหรือต้องจัดการโทเคน
- GitLab CI ถูกกล่าวถึงว่าเด่นในด้าน pipeline แบบอิงไฟล์คอนฟิก, shared runner ฟรี, และเอกสารที่ครบถ้วน
- อย่างไรก็ตาม ความช้าของเว็บอินเทอร์เฟซ และ ฟีเจอร์ที่มากเกินไป ถูกชี้ว่าเป็นข้อเสีย และการใช้ GitHub กับ GitLab ควบคู่กันตามวัตถุประสงค์เป็นวิธีที่มีประสิทธิภาพที่สุด
พื้นหลังการใช้งาน GitLab
- เริ่มใช้ GitLab ในช่วงที่ GitHub ยังคิดค่าบริการสำหรับ private repository และ GitLab ให้ private repository ฟรี
- ทำให้สามารถจัดการหลายโปรเจกต์เชิงทดลองได้โดยไม่ต้องเปิดเผยสู่สาธารณะ
- หลังจากนั้น GitHub ก็เริ่มใช้นโยบายฟรีเช่นกัน แต่เพราะได้สร้าง CI pipeline, Docker image และ deployment script ไว้โดยมี GitLab เป็นศูนย์กลางแล้ว จึงไม่จำเป็นต้องย้าย
ฟีเจอร์ Docker Registry
- ทุกโปรเจกต์บน GitLab มี Container Registry รวมมาให้เป็นค่าเริ่มต้น
- โฟลว์เรียบง่ายคือ build อิมเมจจาก local หรือ CI แล้ว push จากนั้นค่อย pull ไปใช้ในที่ที่ต้องการ
- ไม่ต้องมีบัญชี Docker Hub แยกหรือจัดการโทเคน และไม่ต้องกังวลเรื่องข้อจำกัดการ pull
- สำหรับโปรเจกต์ส่วนตัวถือว่าฟังก์ชันเพียงพอ และ ข้อจำกัดความจุ 10GB ก็แทบไม่เป็นปัญหาในทางปฏิบัติ
- รักษาประสิทธิภาพการใช้พื้นที่ได้ด้วยการลบแท็กเก่าและการแชร์เลเยอร์
สภาพแวดล้อม CI/CD
- GitLab CI ได้นำแนวคิด ‘CI แบบอิงไฟล์คอนฟิก’ มาใช้ตั้งแต่ช่วงแรก
- เพียงเพิ่มไฟล์
.gitlab-ci.yml pipeline ก็จะทำงานอัตโนมัติ
- คอนฟิกถูกเก็บไว้ในระบบ version control จึงสามารถติดตามสถานะของ pipeline ในอดีตได้
- pipeline พื้นฐานประกอบด้วย การ build อิมเมจ·push·deployment แบบเลือกได้
- ขั้น deployment สามารถควบคุมด้วยการ trigger แบบแมนนวลได้
- shared runner ใช้งานได้ฟรีแต่ค่อนข้างช้า และหากจำเป็นก็สามารถติดตั้ง runner ของตัวเอง บน VPS ได้อย่างง่ายดาย
- เอกสาร CI/CD มีปริมาณมากและครอบคลุมมาก และเมื่อคุ้นเคยกับแพตเทิร์นแล้วก็สามารถจัดการได้อย่างมีประสิทธิภาพด้วย การคัดลอกคอนฟิกเดิมมาใช้ซ้ำ
จุดที่ไม่สะดวก
- ความเร็วของเว็บอินเทอร์เฟซ ช้า และมีช่วงรอระหว่างการสลับดู merge request, pipeline และ log
- แม้ช่วงหลังดูเหมือนจะดีขึ้นบ้าง แต่ก็ยังช้ากว่า GitHub
- มีปัญหาเรื่อง ฟีเจอร์มากเกินไป
- แม้จะมีฟีเจอร์หลากหลายอย่าง issue tracking, wiki, package registry, security scanning ฯลฯ แต่สัดส่วนที่ใช้งานจริงมีเพียงราว 10%
- อย่างไรก็ตาม เมื่อจำเป็นก็ยังมีข้อดีเชิงศักยภาพตรงที่สามารถใช้ฟีเจอร์ซึ่งมีมาให้ในตัวได้ทันที
ค่าใช้จ่ายและเวิร์กโฟลว์
- กำลังรันโปรเจกต์ส่วนตัวประมาณ 12 โปรเจกต์ ได้ฟรี รวมทั้งโปรเจกต์ที่ยัง active และการทดลองที่หยุดไปแล้ว
- GitLab ถูกแยกบทบาทเป็น พื้นที่ทำงานแบบ private ส่วน GitHub เป็น พื้นที่แชร์โปรเจกต์แบบ public
- GitHub เหมาะกับการทำงานร่วมกันและการเพิ่มการมองเห็น ส่วน GitLab เหมาะกับการทดลองและการจัดการระบบอัตโนมัติ
- โครงสร้างที่ใช้ทั้งสองแพลตฟอร์มควบคู่กันทำหน้าที่รักษา ความสมดุลและประสิทธิภาพของเวิร์กโฟลว์
3 ความคิดเห็น
มีคนประเมินว่า GitLab เด่นเรื่อง CI/CD อยู่แล้ว
แต่สำหรับผม เพราะข้อจำกัดของบัญชีฟรี ต่อให้รองรับภาษาเกาหลี สุดท้ายก็ยังเผลอไปหยิบ GitHub มาใช้อยู่ดี
ส่วน Forgejo กับ Gitea ซึ่งเป็นฐานของมัน ก็ให้ความรู้สึกเหมือน GitHub เลียนแบบ เลยไม่ค่อยอยากใช้ครับ
พวกเราใช้ Gitea อยู่ครับ เลยนำมาใช้เพราะมีเส้นโค้งการเรียนรู้ต่ำจากภาพลักษณ์ที่คล้ายของต้นฉบับนั้น
ส่วน GitLab มีเสียงสะท้อนเยอะว่าฟังก์ชันเยอะเกินไป ทำให้ใช้งานยาก และค่อนข้างหนัก..
ความคิดเห็นจาก Hacker News
เจ้าหน้าที่ฝ่ายซัพพอร์ตลูกค้าหายไป และทุกคำถามต้องผ่านทีมขาย โดยฟีเจอร์ส่วนใหญ่ก็ถูกผูกไว้กับแพ็กเกจ Ultimate ราคาแพง
ฟีเจอร์ที่ไม่ใช่ “AI” ก็ถูกปล่อยทิ้งไว้ทั้งที่มีปัญหาเดิมมาหลายปี
ตอนนี้เลยกลายเป็นว่าทุกครั้งที่มีอีเมลจากฝ่ายขายเข้ามา ก็จะเล่นเกมว่า “เมื่อไหร่จะได้เห็นความเร็วในการพัฒนาแบบเมื่อก่อนอีกนะ?”
ช่วงราว ๆ 2015~2020 ใช้อย่างสนุกดี แต่ทุกฟีเจอร์ยังหยาบ ๆ และเน้นเติมเช็กลิสต์ฟีเจอร์มากกว่าความสมบูรณ์
ถ้าทีมเล็กต้องแข่งกับบริษัทใหญ่ นี่อาจเป็นทางเลือกที่เลี่ยงไม่ได้ก็ได้
ผ่านมา 10 ปีก็ยังเหมือนเดิม ส่วน Gitea กับ Forgejo เร็วกว่าเยอะ และหลัง Go 1.26 ออกก็น่าจะยิ่งดีขึ้นอีก
โดยเฉพาะความเร็วในการค้นหา issue ที่ช้ามาก จนไม่คิดจะกลับไปใช้อีก
ปี 2018 ย้ายจาก Bitbucket กับ Confluence มา GitLab Cloud แล้วพบว่าผลิตภัณฑ์ของ Atlassian ช้ากว่าและซับซ้อนกว่ามาก
GitLab ให้ความรู้สึกเบาและเร็วกว่า และตอนนี้ก็ยังใช้งานได้ดีเป็นส่วนใหญ่
พอลองใช้ Jira Cloud ล่าสุด ก็รู้สึกว่าช้ากว่าและใช้งานลำบากกว่ามาก
เป็นพฤติกรรมที่น่าตกใจจริง ๆ
การใช้พลังงานของเซิร์ฟเวอร์ลดลง 10% และ GitLab มีฟีเจอร์ที่ไม่จำเป็นเยอะเกินไปจน UI อึดอัด
Forgejo เรียบง่ายและซ่อนฟีเจอร์ตามโปรเจกต์ได้
แต่ก็ยังไม่มี auto update ความสมบูรณ์ต่ำกว่า และบางฟีเจอร์ทำงานไม่ค่อยถูกต้อง
ไม่แน่ใจว่าเป็นธีม Jekyll หรือทำขึ้นเอง แต่แค่การนำทางในเว็บก็สนุกแล้ว
ยังมี CI, issue tracking และสิ่งที่ต้องใช้ครบเหมือนเดิม แต่อินเทอร์เฟซโหลดขึ้นมาทันทีและไม่มีฟีเจอร์เกินจำเป็น
ผมชอบ syntax ของ GitLab CI มากกว่า แต่ API ของ Forgejo ยังขัดเกลามาไม่ดีเท่า
ถึงอย่างนั้นก็ยังเข้าถึง DB โดยตรงได้ เลยแก้ด้วยสคริปต์ custom ได้
ยก Kubernetes cluster ขึ้นมาแล้วเชื่อม Forgejo กับ Argo เพื่อทดสอบ
ไม่แน่ใจว่าควรใช้ทรัพยากรของ Codeberg แทน Microsoft หรือเปล่า
เห็นว่า CI น่าจะใช้โปรเจกต์ชื่อ Woodpecker เลยสงสัยว่าเทียบกับ GitLab CI แล้วเป็นอย่างไร
GitLab แม้จะไม่ถึงระดับ Gerrit แต่ก็รองรับ stackable MR และยังดูคอมเมนต์ได้แม้จะ force push ไปแล้ว
คิดว่าวัฒนธรรมแบบ GitHub ที่ยึด PR ขนาดใหญ่เป็นศูนย์กลางนั้นทำร้ายทั้ง productivity และวัฒนธรรมการรีวิว
ฟังก์ชันแอดมินอย่างการตั้งค่า LDAP sync ยังมีจุดให้ปรับปรุง แต่ syntax ของ CI/CD โดยรวมถือว่าสะดวก
ช่วง 2021~2024 ใช้ทุกวันจนถึงขั้นต้องจดบันทึก bug log แยกไว้เอง
เคยเขียนประสบการณ์ไว้ในคอมเมนต์ก่อนหน้า
issue tracker แบบเรียบง่ายของ GitHub ใช้งานง่ายกว่ามาก
ผู้จัดการโปรเจกต์อาจชอบ GitLab แต่ในมุมผู้ใช้รู้สึกว่า GitHub ดีกว่า
ตอนนี้ใช้ GitHub อยู่ ซึ่งง่ายและมีประสิทธิภาพกว่ามาก
เกลียด GitLab จริง ๆ
สำหรับ Docker image จะมีแค่ ข้อจำกัดต่อเลเยอร์ และขนาดรวมทั้งหมดอาจใหญ่กว่านั้นได้มาก
เอกสารที่เกี่ยวข้อง: Storage Usage Quotas, Container Registry Issue
อยากลองอัปโหลด Interstellar REMUX ขนาด 70GB ดู
รูปแบบ “กำลังจะทำอะไรบางอย่าง → error → ค้นหา → เจอรายงานบั๊กทางการที่มีอายุ 3~8 ปี” เกิดซ้ำไปซ้ำมา
ฟีเจอร์จำนวนมากยังอยู่แค่ระดับความสมบูรณ์แบบ 80/20 และหน้า MR ก็ช้าจนน่าทรมาน
เคยเขียนเรื่องนี้ไว้ในคอมเมนต์ก่อนหน้า
ชอบตรงที่รวม Maven, NPM, Python package registry เข้ากับ CI pipeline ได้
แต่ฟีเจอร์มันเยอะเกินไป และทุกหน้าก็ช้ากว่าเดิมประมาณสองเท่า
หลังจากนั้นเปลี่ยนไป Azure DevOps ซึ่ง ช้าและ quality gate ก็ไม่ดี
พอ build server เปลี่ยนเป็น VM แล้ว build ก็ช้าลงเพราะข้อจำกัด IOPS
อยากกลับไปใช้ GitLab และยินดีช่วยพัฒนาด้านประสิทธิภาพด้วย