
GitHub หรือ GitLab: ที่นั่งห่าง 7 เท่า แต่ CI และ Self-host พลิกคำตอบ

สำหรับทีมพัฒนา 30 คนที่ใช้บริการคลาวด์เก็บโค้ดและรัน CI ทั่วไป GitHub Team เป็นตัวเลือกที่มีต้นทุนเริ่มต้นต่ำกว่า: GitHub Team ราคา 4 ดอลลาร์ต่อผู้ใช้ต่อเดือนพร้อม 3,000 นาที CI ขณะที่ GitLab Premium ราคา 29 ดอลลาร์ต่อผู้ใช้ต่อเดือนพร้อม 10,000 นาทีบน GitLab.com โดยราคา Premium คิดตามสัญญารายปี ราคาต่อที่นั่งจึงห่างกันมากกว่า 7 เท่า หรือ 7.25 เท่าเมื่อหารตรงตัว
โควตา CI ที่มากกว่าเพียงอย่างเดียวยังไม่ทำให้ GitLab Premium ถูกกว่าสำหรับทีมนี้ แต่คำตอบเรื่องแพลตฟอร์มที่เหมาะสมอาจเปลี่ยนเมื่อทีมต้องซื้อการสแกนสำหรับ repository ส่วนตัว ใช้เครื่องรันงานของตนเอง หรือเก็บทั้งระบบจัดการโค้ดไว้ในองค์กร กรณีสุดท้ายต้องเทียบ GitLab Self-Managed กับ GitHub Enterprise Server แทนการนำ GitHub Team มาเป็นฐานราคา
ค่าสมาชิกของทีม 30 คนเป็นเพียงฐานของแบบจำลอง
สมมติให้ผู้พัฒนาทั้ง 30 คนต้องมีที่นั่งแบบชำระเงิน GitHub Team จะมีค่าสมาชิก 120 ดอลลาร์ต่อเดือน ส่วน GitLab Premium เป็น 870 ดอลลาร์ต่อเดือนเมื่อเฉลี่ยจากราคาที่เรียกเก็บรายปี ส่วนต่างเท่ากับ 750 ดอลลาร์ต่อเดือน หรือ 9,000 ดอลลาร์ต่อปีหากจำนวนที่นั่งคงเดิม การเฉลี่ยรายเดือนช่วยเปรียบเทียบต้นทุน แต่ไม่ได้หมายความว่าสองบริษัทมีเงื่อนไขการชำระเงินเหมือนกัน
ตัวเลขนี้ยังไม่รวมภาษี อัตราแลกเปลี่ยน พื้นที่จัดเก็บที่เกินสิทธิ์ บริการเสริม และส่วนลดที่อาจเจรจาได้สำหรับองค์กรไทย อีกทั้งที่นั่งกับโควตานาทีเป็นคนละหน่วย: การเพิ่มผู้ใช้หนึ่งคนทำให้ค่าสมาชิกสูงขึ้น แต่ไม่ได้เพิ่มโควตา CI ให้ทีมหนึ่งชุดโดยอัตโนมัติ ทีมที่มีผู้พัฒนาเท่ากันอาจใช้เวลา CI ต่างกันมากตามจำนวน repository ความถี่ของการส่งโค้ด และจำนวนงานที่รันต่อการเปลี่ยนแปลงหนึ่งครั้ง
แบบจำลองต่อไปจึงกำหนดขอบเขตให้ชัดว่าเป็นงานใน repository ส่วนตัว ใช้ runner ที่ผู้ให้บริการโฮสต์ และถือว่านาทีในแต่ละระดับคือ นาทีที่ถูกคิดค่าบริการแล้ว ไม่ใช่ระยะเวลาบนนาฬิกาของ pipeline หนึ่งรอบ งาน build และ test ที่รันพร้อมกันหลายชุดต้องนับเวลาของแต่ละงานเข้าด้วยกัน ขอบเขตนี้ทำให้เห็นราคาของปริมาณงาน โดยไม่สมมติว่าเครื่องของสองบริการประมวลผลงานเดียวกันได้เร็วเท่ากัน
เมื่อเพิ่มงาน CI สามระดับ ส่วนต่างเปลี่ยนอย่างไร

ฝั่ง GitHub แบบจำลองใช้ Linux x64 แบบ 2 คอร์สำหรับงานทั้งหมด หลักเกณฑ์คิดเงิน GitHub Actions ให้อัตรา 0.006 ดอลลาร์ต่อนาทีสำหรับ runner ชนิดนี้ และระบุว่าการใช้ self-hosted runner ไม่มีค่าบริการ Actions จาก GitHub อัตราของ Windows, macOS และเครื่องขนาดอื่นแตกต่างออกไป ส่วนงานใน repository สาธารณะที่ใช้ standard GitHub-hosted runner มีเงื่อนไขใช้งานฟรี จึงไม่ควรนำมาปนกับตัวอย่าง repository ส่วนตัว
ฝั่ง GitLab ใช้โควตาของ Premium บน GitLab.com และสมมติว่านาทีที่แสดงเป็น compute minutes ที่ถูกหักจริง คำอธิบาย compute minutes ของ GitLab ระบุว่าซื้อเพิ่มได้ในราคา 10 ดอลลาร์ต่อ 1,000 นาทีสำหรับกลุ่มระดับบนสุด และนาทีที่รันบน runner ของลูกค้าเองไม่ถูกหักจากโควตานี้ นาทีที่ซื้อเพิ่มมีอายุ 12 เดือนและไม่ต่ออายุอัตโนมัติ ตัวอย่างรายเดือนสมมติว่าไม่มีนาทีที่ซื้อค้างจากเดือนก่อน
- งานเบา 2,000 นาทีต่อเดือน: ทั้งสองบริการยังอยู่ในโควตาที่รวมไว้ ค่า seat และ CI จึงเป็น 120 ดอลลาร์สำหรับ GitHub Team และ 870 ดอลลาร์สำหรับ GitLab Premium ส่วนต่าง 750 ดอลลาร์มาจากค่าสมาชิกทั้งหมด
- งานปานกลาง 8,000 นาทีต่อเดือน: GitHub ใช้เกินโควตา 5,000 นาที คิดเพิ่ม 30 ดอลลาร์ รวมเป็น 150 ดอลลาร์ GitLab ยังไม่ต้องซื้อนาทีเพิ่ม จึงอยู่ที่ 870 ดอลลาร์ ส่วนต่างลดเหลือ 720 ดอลลาร์ แต่ยังมากกว่าค่า CI ส่วนเพิ่มหลายเท่า
- งานหนัก 20,000 นาทีต่อเดือน: GitHub ใช้เกินโควตา 17,000 นาที คิดเพิ่ม 102 ดอลลาร์ รวมเป็น 222 ดอลลาร์ GitLab ต้องซื้อนาทีเพิ่ม 10,000 นาที ราคา 100 ดอลลาร์ รวมเป็น 970 ดอลลาร์ ภายใต้สมมติฐานนี้ส่วนต่างกลับเป็น 748 ดอลลาร์
จุดที่ช่วยอธิบายผลคือราคาส่วนเพิ่ม หลังโควตา GitHub ในตัวอย่างนี้คิด 6 ดอลลาร์ต่อ 1,000 นาที ขณะที่แพ็กของ GitLab คิด 10 ดอลลาร์ต่อ 1,000 นาที เมื่อจำนวนที่นั่งและชนิด runner คงเดิม การเพิ่มนาทีเกินโควตาจึงไม่ได้ทำให้เส้นต้นทุนของ GitLab Premium ตัดลงมาต่ำกว่า GitHub Team แม้ GitLab จะเริ่มด้วยโควตาที่มากกว่า ความต่าง 7,000 นาทีแรกมีมูลค่า แต่เล็กกว่าส่วนต่างค่าสมาชิกรายเดือน
ผลด้านราคาไม่ใช่ผลทดสอบความเร็ว งานเดียวกันอาจใช้เวลาต่างกันเมื่อขนาดเครื่อง cache ระบบปฏิบัติการ หรือจำนวนงานที่รันพร้อมกันต่างกัน และเวลารอคิวไม่เท่ากับนาทีประมวลผลที่ถูกคิดเงิน หากทีมให้ความสำคัญกับเวลาจากการส่งโค้ดถึงผลทดสอบ การเปรียบเทียบ ต้นทุนนาที CI กับเวลาที่งานเสร็จ เป็นคนละคำถามกับการดูบิลรายเดือน การใช้ runner ที่แรงกว่าอาจลดเวลารอของทีม แม้อัตราต่อนาทีหรือการใช้โควตาจะสูงขึ้น
การสแกนความปลอดภัยทำให้ราคาเริ่มต้นเปรียบกันยากขึ้น
สำหรับ repository ส่วนตัว เครื่องคำนวณราคาของ GitHub แยก Code Security ที่ 30 ดอลลาร์และ Secret Protection ที่ 19 ดอลลาร์ต่อผู้ส่งโค้ดที่เข้าเกณฑ์ต่อเดือน โดยนับผู้ส่งโค้ดไม่ซ้ำที่มีส่วนร่วมกับ repository ที่เปิดใช้ผลิตภัณฑ์นั้นในช่วง 90 วันที่ผ่านมา จำนวนนี้อาจไม่เท่ากับจำนวนที่นั่ง เช่น ผู้จัดการโครงการมีที่นั่งแต่ไม่ได้ส่งโค้ด หรือผู้พัฒนาบางคนไม่ได้ทำงานใน repository ที่เปิดการสแกน
หากสมมติว่าผู้พัฒนาทั้ง 30 คนเข้าเกณฑ์และทีมซื้อทั้งสองผลิตภัณฑ์ ค่า Code Security จะเป็น 900 ดอลลาร์ และ Secret Protection อีก 570 ดอลลาร์ต่อเดือน เมื่อบวก GitHub Team ฐานค่าใช้จ่ายจะเป็น 1,590 ดอลลาร์ก่อนนาที CI ที่เกินโควตา หากมีผู้ส่งโค้ดเข้าเกณฑ์เพียง 10 คน ค่าเสริมสองรายการรวมกันจะเป็น 490 ดอลลาร์ และฐานเดียวกันลดเหลือ 610 ดอลลาร์ ผลต่างนี้เกิดจากวิธีนับผู้ใช้การสแกน ไม่ใช่จากการเปลี่ยนราคาที่นั่ง
อย่างไรก็ตาม การนำ 1,590 ดอลลาร์ไปเทียบกับ GitLab Premium ที่ 870 ดอลลาร์แล้วประกาศว่าฝั่งใดคุ้มกว่ายังเร็วเกินไป GitLab มี Static Application Security Testing ระดับพื้นฐานในสายแผนเริ่มต้น แต่ความสามารถอย่างการจัดการช่องโหว่ในภาพรวม การทดสอบความปลอดภัยของแอปพลิเคชันที่กว้างขึ้น และการกำกับดูแลระดับองค์กรอยู่ใน Ultimate ซึ่งต้องขอราคาเสนอ Premium จึงไม่ควรถูกสมมติว่าแทนชุด Code Security และ Secret Protection ที่ซื้อเพิ่มบน GitHub ได้ครบทุกความต้องการ
การเลือกฟีเจอร์ควรเริ่มจากข้อกำหนดที่ตรวจสอบได้ของทีม: ต้องสแกนโค้ดชนิดใด ต้องตรวจ secret ในขั้นตอนไหน ใครต้องเห็นและจัดการผลการสแกน และต้องมีนโยบายหรือหลักฐานสำหรับการตรวจสอบภายในหรือไม่ หากต้องการเพียงการตรวจบางประเภท ค่า add-on ทั้งชุดอาจสูงเกินงานจริง แต่หากต้องมีการจัดการช่องโหว่รวมศูนย์ ราคาของ GitLab Ultimate ไม่ใช่ราคาของ Premium ในแบบจำลองนี้ งานสแกนที่ใช้ CI ยังอาจเพิ่มนาทีและพื้นที่เก็บผลลัพธ์อีกต่างหาก
เครื่อง runner ของทีมเองลดค่านาที แต่เพิ่มต้นทุนที่ต้องรับผิดชอบ

Self-hosted runner คือเครื่องที่องค์กรจัดหาเพื่อรันงาน build, test หรือ deploy โดยเชื่อมกับบริการ GitHub.com หรือ GitLab.com ที่ยังเก็บ repository อยู่บนคลาวด์ การย้ายเฉพาะ runner จึงเปลี่ยนที่ประมวลผลงาน ไม่ได้ย้ายระบบจัดการ source code ความแตกต่างนี้สำคัญสำหรับทีมที่ต้องให้ runner เข้าถึงบริการภายในเครือข่าย เพราะเครื่องอาจทำงานใกล้ระบบปลายทางได้ โดยไม่ต้องดูแลแพลตฟอร์มเก็บโค้ดทั้งชุด
กำหนดตัวแปร H เป็นค่าเครื่อง runner ต่อเดือน รวมค่าเครื่องหรือคลาวด์ พื้นที่จัดเก็บ เครือข่าย การอัปเดต และเวลาผู้ดูแล สมมติ H เท่ากับ 200 ดอลลาร์และงานทั้งหมดไปรันบนเครื่องนี้ ต้นทุน GitHub Team จะเป็น 120 + 200 หรือ 320 ดอลลาร์ต่อเดือน ส่วน GitLab.com Premium จะเป็น 870 + 200 หรือ 1,070 ดอลลาร์ เมื่อไม่นับค่าบริการจากการใช้ hosted runner เพิ่ม ผลนี้แสดงผลของการย้ายภาระประมวลผลภายใต้ค่าเครื่องเดียวกันเท่านั้น ไม่ใช่ราคาเครื่องที่รับรองว่ารองรับงานหนักทุกระดับได้
ปริมาณ 20,000 นาทีต่อเดือนบนบิล hosted runner ไม่ได้แปลว่าเครื่องหนึ่งเครื่องจะรับงานทั้งหมดได้โดยไม่กระทบเวลาส่งมอบ หากหลาย job ต้องรันพร้อมกัน ทีมอาจต้องเพิ่มจำนวน runner หรือใช้เครื่องที่มีหน่วยประมวลผลและหน่วยความจำมากขึ้น งานที่ใช้ macOS หรือสภาพแวดล้อมเฉพาะก็อาจต้องใช้อุปกรณ์ต่างชนิด การประหยัดค่านาทีจึงต้องหักกับค่าเครื่องสำรอง การบำรุงรักษา และความเสี่ยงที่คิวงานยาวขึ้นเมื่อกำลังประมวลผลไม่พอ
อีกผลหนึ่งของการใช้ runner ส่วนตัวคือทีมควบคุมซอฟต์แวร์ที่ติดตั้ง เส้นทางเครือข่าย และการเข้าถึงระบบภายในได้มากขึ้น แต่ต้องจัดการสิทธิ์และข้อมูลลับที่งาน CI ใช้ด้วยตนเอง หาก runner รับงานจาก repository ที่มีผู้ร่วมพัฒนาหลายกลุ่ม ขอบเขตความเชื่อถือของโค้ดที่ถูกรันจะมีผลต่อการออกแบบเครื่องและเครือข่าย ประเด็นนี้เป็นต้นทุนการดำเนินงานที่ราคา seat และ compute minute ไม่แสดง
การโฮสต์แพลตฟอร์มเองเป็นอีกการตัดสินใจ
หากข้อกำหนดคือให้ repository และบริการจัดการโค้ดอยู่บนโครงสร้างพื้นฐานที่องค์กรควบคุม GitLab มีทางเลือก Self-Managed ในสายแผนของตน ส่วนทางเลือกของ GitHub คือ Enterprise Server ไม่ใช่ GitHub Team การใช้ราคา Team มาเทียบกับ GitLab Self-Managed จะทำให้ฐานของสองฝั่งไม่เท่ากันตั้งแต่ต้น และโควตา 10,000 นาทีที่กล่าวในตัวอย่างเป็นสิทธิ์สำหรับ GitLab.com ไม่ใช่ค่าประหยัดที่ยกไปใส่ระบบ Self-Managed ได้ตรง ๆ
บิลของการโฮสต์ทั้งแพลตฟอร์มต้องรวมไลเซนส์ เครื่องสำหรับบริการจัดการโค้ด เครื่อง runner พื้นที่เก็บ repository และ artifact ระบบสำรองข้อมูล การอัปเดต และแรงดูแลระบบ แต่ละองค์ประกอบอาจใช้ทรัพยากรต่างกันตามจำนวน repository ขนาดไฟล์ และรูปแบบการสำรองข้อมูล การใส่ค่า H ของ runner เพียงก้อนเดียวแทนค่าโครงสร้างพื้นฐานทั้งหมดจะประเมินต้นทุนต่ำเกินไป
ในทางกลับกัน องค์กรที่มีโครงสร้างพื้นฐานและทีมปฏิบัติการพร้อมอยู่แล้วอาจประเมินต้นทุนส่วนเพิ่มของการโฮสต์ได้ต่างจากทีมที่ต้องเริ่มจัดหาเครื่องและผู้ดูแลใหม่ ข้อกำหนดเรื่องที่เก็บข้อมูล สิทธิ์ผู้ดูแล และการเชื่อมกับระบบภายในอาจมีน้ำหนักมากกว่าส่วนต่างค่าสมาชิกบนคลาวด์ จึงต้องเปรียบเทียบสิทธิ์ของ GitHub Enterprise Server กับระดับ GitLab Self-Managed ที่มีฟีเจอร์ครบตามข้อกำหนด พร้อมต้นทุนเครื่องของแต่ละสถาปัตยกรรม
ข้อเลือกที่ได้จากตัวเลขและข้อกำหนด
สำหรับทีม 30 คนที่เก็บโค้ดบนคลาวด์ได้ ใช้ Linux runner ตามสมมติฐาน และไม่ได้ต้องซื้อการสแกนเพิ่มทั้งชุด GitHub Team มีค่า seat และ CI ต่ำกว่าในงานทั้งสามระดับที่คำนวณไว้ GitLab Premium ซื้อโควตา CI ที่มากกว่า พร้อมความสามารถด้าน workflow และการจัดการโครงการในแผนเดียว แต่ภายใต้อัตรานาทีที่ใช้ในแบบจำลอง โควตานั้นยังไม่ชดเชยส่วนต่างค่าสมาชิก
คำตอบเปลี่ยนเมื่อข้อกำหนดบังคับให้ใช้ผลิตภัณฑ์ความปลอดภัยที่มีค่าไลเซนส์เพิ่ม ต้องควบคุมเครื่องรันงาน หรือจำเป็นต้องโฮสต์แพลตฟอร์มเก็บโค้ดเอง ตัวเลขที่ตัดสินได้จริงจึงประกอบด้วยที่นั่ง นาทีที่ถูกคิดตามชนิด runner จำนวนผู้ส่งโค้ดที่เข้าเกณฑ์ซื้อการสแกน และต้นทุนเครื่องพร้อมผู้ดูแล หากฟีเจอร์ที่ต้องใช้ไปถึง GitLab Ultimate หรือ GitHub Enterprise Server ต้องนำราคาของแผนเหล่านั้นเข้ามาแทนฐาน Premium หรือ Team ก่อนตัดสินใจ
อ่านเพิ่มเติม:
บทความที่เกี่ยวข้อง


กัน API key หลุดบน GitHub: Push Protection ข้ามไฟล์เกิน 50 MB

เปิด Push Protection ใน GitHub: ปุ่มข้ามต้องมีคนตรวจ ไม่ใช่ทางลัด

GitHub Actions หรือ CircleCI: งาน Docker 40 นาทีอาจเหลือ 18 นาที

เผยแพร่แพ็กเกจ npm ด้วย OIDC: เลิกเก็บโทเค็นเขียนถาวรใน CI

ช่องโหว่ GitLab AI Gateway ได้ 9.9—ผู้ใช้คลาวด์ไม่ต้องแก้เหมือนกัน
สมัครรับจดหมายข่าวของเรา
รับข่าวสารล่าสุดเกี่ยวกับ Web3, AI และคริปโตส่งตรงถึงกล่องจดหมายของคุณ