· github-actions / circleci / cicd

GitHub Actions vs CircleCI — CI nào thắng trong 2026?

GitHub Actions rẻ hơn CircleCI rất nhiều cho team trên GitHub. Đây là những trường hợp CircleCI xứng đáng với mức giá — và những trường hợp không.

Bởi

2.352 từ · 12 phút đọc

GitHub Actions chiến thắng về chi phí và độ dễ thiết lập cho các team đang dùng GitHub. CircleCI xứng đáng với mức giá khi bạn cần 100+ job chạy song song mà không bị queue, workflow nặng Docker mà DLC tiết kiệm được nhiều thời gian build, hoặc nền tảng CI không gắn chặt với một code host duy nhất. Nếu chi phí CI hằng tháng của team đang tiến gần $5,000, tự dựng runner trên spot instance sẽ rẻ hơn cả hai.

Bài này dành cho ai

Các team đang chọn CI lần đầu, các team đang xem lại hóa đơn CircleCI, hoặc các engineer đang chạy pipeline nặng Docker mà tốc độ build thực sự là điểm nghẽn. Nếu bạn đang dùng GitHub và pipeline hoàn thành trong dưới 10 phút — dừng đọc ở đây, GitHub Actions sẽ đủ dùng và rẻ hơn.

Cách chúng tôi kiểm thử

Chúng tôi chạy một TypeScript monorepo 60 module (Jest, ESLint, TypeScript type-check, Docker build cho từng service) trên runner GitHub-hosted mặc định 2 vCPU và resource class medium tương đương của CircleCI. Nếu bạn đang thiết lập monorepo tương tự, hướng dẫn thiết lập pnpm + Turborepo của chúng tôi đề cập cách tổ chức task caching để CI nhanh hơn. Mỗi điều kiện được kiểm thử qua 20 build cycle, ghi lại thời gian median và p90. Queue time được đo bằng cách gửi pipeline giống nhau trong điều kiện tải song song — 10 push đồng thời từ các branch khác nhau. Thời gian benchmark: tháng 4–5/2026. Chúng tôi không chạy GPU job trong lần so sánh này.

Dữ liệu benchmark tốc độ dẫn phía dưới lấy từ nghiên cứu do CircleCI tài trợ (tháng 2/2025). Chúng tôi xem đây là dữ liệu có giá trị tham khảo về xu hướng, nhưng cần lưu ý xung đột lợi ích được đề cập ở phần caveats.


Giá cả: con số thực tế

Về compute thuần túy thì hai bên ngang nhau. Với 2 vCPU tương đương, cả hai nền tảng đều tính $0.006/phút tính đến tháng 5/2026. GitHub đã giảm giá runner hosted tới 39% vào ngày 1/1/2026, xóa bỏ khoảng cách từng có lợi cho gói credit của CircleCI.

Sự khác biệt nằm ở phần còn lại.

CircleCI tính thêm:

  • $15/user/tháng cho Performance plan
  • Docker Layer Caching (DLC): $0.12 cho mỗi Docker job (200 credit tiêu thụ mỗi job)
  • Mô hình credit khiến chi phí vượt hạn mức không phải lúc nào cũng nhìn thấy cho đến khi hóa đơn về

GitHub Actions tính thêm:

  • Không có gì thêm ngoài compute cho repo trên GitHub.com (storage tính riêng nhưng hiếm khi thành vấn đề)
  • Miễn phí 2,000 phút/tháng ở Free plan, 3,000 phút ở Team

LeanOps Tech đã tính toán cho một team 50 developer (50 dev × 4 build/ngày × 22 ngày làm việc, 90% Linux job) trong 2026. GitHub Actions Team plan ra $845/tháng. CircleCI Performance ra $3,711/tháng — chênh lệch 4.4 lần, chủ yếu do chi phí compute hiệu quả của CircleCI cao hơn ($0.060/phút so với $0.008/phút của GitHub cho Linux, tức 7.5× mỗi phút), cộng thêm DLC trên từng job.

Điểm cần xem lại: DLC của CircleCI thực sự giảm thời gian build đủ để giảm tổng số phút compute tiêu thụ. Bài toán này có lời hay không phụ thuộc vào Docker build của bạn chậm đến mức nào khi không có cache, và team có bao nhiêu người. Ở 10 developer, khoảng cách phí user là $150/tháng — DLC hoàn toàn có thể hòa vốn. Ở 50 developer, con số đó là $750/tháng trước khi bật DLC.


Tốc độ: CircleCI thực sự nhanh hơn ở đây

CircleCI nhanh hơn trong benchmark. Và không phải chênh lệch nhỏ.

Nghiên cứu do CircleCI tài trợ ghi nhận thời gian build median nhanh hơn 40% so với runner mặc định của GitHub, và queue time ít hơn 90%. Runner mặc định của GitHub có queue time median vượt 153 giây. Khi chịu tải nặng — bài test đẩy đến giới hạn concurrent job — các runner lớn hơn của GitHub đạt queue time median hơn 22 phút.

Chúng tôi tái hiện được vấn đề queue này. Với 10 push đồng thời, pipeline GitHub của chúng tôi bị queue từ 8–18 phút tùy thời điểm trong ngày. Cùng workload đó trên CircleCI queue dưới 60 giây.

Giới hạn concurrent job là con số nói lên tất cả: CircleCI đạt 500 concurrent job. GitHub Actions không vượt quá ~124 trong cùng workload.

Nếu bạn đang build monorepo mà parallelism là đòn bẩy chính để rút ngắn wall-clock time, giới hạn này rất quan trọng. Một fanout 500 job chạy song song được lượng công việc nhiều gấp 4 lần trên CircleCI so với GitHub ở peak load.


Caching

GitHub Actions cho bạn 10 GB mỗi repo, thời hạn 7 ngày, không có Docker layer caching gốc. Dependency caching (node_modules, ~/.gradle, v.v.) hoạt động tốt trong giới hạn đó. Thời hạn 7 ngày đồng nghĩa cache sẽ lạnh vào sáng thứ Hai với các repo không có push vào cuối tuần.

CircleCI cho bạn thời hạn 15 ngày, không giới hạn theo branch, và tùy chọn Docker Layer Caching (DLC) với thêm $0.12 mỗi Docker job. DLC thực sự có giá trị nếu Docker build của bạn chậm: cache từng layer riêng biệt nghĩa là chỉ những layer thay đổi mới cần build lại. Với một service có 6 layer mà 4 layer đầu là dependency ổn định, bạn có thể build lại 10 giây thay vì 3 phút.

GitHub không có tính năng tương đương với DLC. Bạn có thể dùng BuildKit cache mount kết hợp cache action của GitHub để làm được điều tương tự, nhưng cách này không ổn định và không giữ được cache sau khi runner bị tắt trong mọi cấu hình.


Phân chia test

Đây là nơi tuổi đời của CircleCI trở thành lợi thế, không phải bất lợi.

CircleCI có native test splitting dựa trên timing tích hợp sẵn trong CLI: circleci tests split --split-by=timings. Nó đọc dữ liệu timing lịch sử, cân bằng test suite giữa các runner song song, và chạy test chậm nhất trước. Bạn chỉ cần cấu hình mức độ parallelism, CircleCI tự xác định file nào chạy ở đâu.

GitHub Actions không có tính năng này. Phân chia test giữa các parallel job đòi hỏi tự dựng matrix strategy — hoặc hardcode nhóm file, hoặc viết script chia theo index. Không có cơ chế thông minh về timing — nếu file test chậm nhất luôn rơi vào shard 1, container đó sẽ chạy lâu hơn trong khi các container khác ngồi chờ.

Với team có test suite chạy 30 phút, test splitting dựa trên timing có thể giảm wall-clock time 40–60% so với cách chia thủ công. Đó không phải là khác biệt nhỏ về tiện ích.


Self-hosted runner

Cả hai nền tảng đều hỗ trợ self-hosted runner cho team muốn kiểm soát infrastructure.

Self-hosted runner của GitHub đã cải thiện đáng kể: họ hoãn vô thời hạn kế hoạch thu phí $0.002/phút sau phản ứng tiêu cực của cộng đồng vào tháng 12/2025, và custom runner image snapshot ra mắt GA vào cuối tháng 3/2026. Bạn có thể đưa sẵn dependency vào versioned VM image và boot trong vài giây. Bộ lập lịch của GitHub-hosted runner vẫn khá mờ đục — bạn không kiểm soát được region, loại máy ngoài kích thước, hay cách ưu tiên queue được xác định.

Self-hosted runner của CircleCI (gọi là “self-hosted runner”, trước đây là “runner”) tích hợp vào cùng config YAML và kéo job từ cùng queue. CircleCI cho bạn nhiều quyền kiểm soát lập lịch hơn và resource class gắn trực tiếp với phần cứng của bạn mà không cần lớp chuyển đổi.

Cả hai nền tảng đều không hỗ trợ spot instance ngay từ đầu. Đó là lựa chọn thứ ba — Actuated, Buildjet, hoặc tự xây fleet qua GitHub’s larger runners API — mà cả hai nền tảng đều giao cho bên thứ ba.


GPU

Cả hai nền tảng đều hỗ trợ GPU runner. GitHub rẻ hơn về đơn giá: $0.052/phút cho Linux 4-core GPU runner của GitHub Actions so với $0.096/phút cho class tương đương của CircleCI. Phần cứng GPU thực tế khác nhau giữa hai nền tảng — so sánh giá theo phút là tham khảo về xu hướng, không phải so sánh trực tiếp về năng lực tính toán. GPU runner của GitHub ra mắt GA vào tháng 7/2024. Nếu GPU là workload chính, GitHub thắng về chi phí; nếu bạn cần toàn bộ mô hình lập lịch và parallelism của CircleCI cho GPU job, sự linh hoạt của CircleCI có thể bù đắp mức giá cao hơn.


Hệ sinh thái và debugging

GitHub Actions có hơn 10,000 marketplace action cho đủ loại tác vụ từ Slack notification đến deploy wrapper cho mọi cloud provider. Hệ sinh thái rộng vì mọi tool chạy trên GitHub đều ship một Action như artifact cốt lõi.

CircleCI có hơn 3,000 orb (gói config có thể tái sử dụng). Độ phủ của các cloud provider lớn tốt. Với tool ít phổ biến hơn, bạn sẽ phải dùng lệnh run: thô nhiều hơn — trong khi GitHub đã có action được duy trì sẵn.

Debugging là điểm khiến GitHub Actions gây bực bội và CircleCI thì không. CircleCI có SSH access gốc vào failed job: một click trong UI mở terminal trực tiếp vào container đã chạy build thất bại. Bạn có thể chạy lệnh và tìm ra nguyên nhân trong vài phút.

GitHub Actions không có SSH debug mode chính thức. Các cách xử lý khác có tồn tại — action mxschmitt/action-tmate tạo tmux session qua SSH — nhưng đây là giải pháp không chính thức, chậm hơn để thiết lập, và thêm một vòng đi qua infrastructure của tmate.

Với team thường xuyên phải xử lý build phức tạp, sự thiếu vắng SSH debug là chi phí vận hành thực sự.


Vendor lock-in

GitHub Actions gắn chặt với GitHub. Cú pháp YAML là proprietary (on:, jobs:, steps:), và marketplace action chỉ dùng được trên GitHub. Di chuyển sang GitLab hay Bitbucket đồng nghĩa viết lại toàn bộ pipeline.

Orb và config của CircleCI hoạt động trên mọi VCS được hỗ trợ: GitHub, GitLab, Bitbucket. Nếu bạn đang vận hành infrastructure đa VCS hoặc muốn tránh phụ thuộc vào một nền tảng duy nhất, lớp trừu tượng của CircleCI có giá trị.

Không nền tảng nào thực sự portable theo nghĩa đầy đủ — “CI config có thể chuyển đổi tự do” phần lớn là ảo tưởng, vì pipeline của bạn chứa đầy giả định về môi trường runner. Nhưng mức độ phụ thuộc thấp hơn vào một code host duy nhất của CircleCI là phòng bị thực sự nếu đa dạng hóa nền tảng là yêu cầu được đặt ra. Nếu GitLab CI cũng trong danh sách cân nhắc, xem thêm so sánh GitHub Actions vs GitLab CI về quét bảo mật và chi phí khi scale.


Kết luận

Chọn GitHub Actions nếu…Chọn CircleCI nếu…
Code của bạn đang trên GitHubCần 100+ concurrent job ổn định
Team dưới 20 developerBuild nặng Docker và DLC tiết kiệm nhiều hơn chi phí bỏ ra
Chi phí CI hằng tháng dưới $500Multi-VCS: GitHub + GitLab hoặc Bitbucket
Thời gian build dưới 15 phútSSH debugging là quy trình thường xuyên
Cần hệ sinh thái rộngTest splitting dựa trên timing quan trọng với thời gian test

Tình huống mà cả hai đều không phải lựa chọn tốt nhất: team đang chi hơn $5,000/tháng cho managed CI. Đó là mức mà tự dựng runner trên AWS spot instance hoặc GCP preemptible VM sẽ rẻ hơn 60–80% so với compute hosted của bất kỳ nền tảng nào, và chi phí vận hành là xứng đáng.


Lưu ý quan trọng

Nguồn dữ liệu benchmark tốc độ. Số liệu nhanh hơn 40% / queue time ít hơn 90% / queue median 153 giây đến từ nghiên cứu do CircleCI tài trợ. Chúng tôi xem đây là dữ liệu có giá trị tham khảo về xu hướng — vấn đề queue trên runner mặc định của GitHub là có thực và tái hiện được — nhưng các con số chính xác là của CircleCI. Kết quả tái hiện độc lập ở quy mô của bạn có thể khác.

Mức giá tại thời điểm chụp. Cả hai nền tảng đều điều chỉnh giá. Mọi con số trong bài là tính đến tháng 5/2026 và đã tính đợt giảm giá ngày 1/1/2026 của GitHub. Hãy kiểm tra mức giá hiện hành trước khi cam kết.

Những gì chúng tôi không kiểm thử. Tích hợp security scanning (CodeQL, SonarCloud, Snyk), hiệu suất build mobile (iOS/Android), hiệu suất ARM runner ở quy mô lớn, hoặc mức độ tương đương chi phí Windows runner.

Minh bạch. Chúng tôi không có quan hệ affiliate với nền tảng nào. Không nhận thù lao từ bất kỳ vendor nào. Phân tích giá của LeanOps Tech là tài liệu tham khảo từ bên thứ ba, không phải nội dung tài trợ.


Tài liệu tham khảo