CI/CD tự host trên VPS: nhanh hơn và rẻ hơn dịch vụ trả phí

Chia sẻ bài viết

Mục lục
CI/CD tự host trên VPS: nhanh hơn và rẻ hơn dịch vụ trả phí

Trả lời nhanh: Tự host đáng làm khi bạn chạy nhiều lượt build mỗi ngày và mỗi lượt kéo dài vài phút. Lợi thế lớn nhất không phải tiền mà là bộ nhớ đệm: máy tự host giữ nguyên kho thư viện và kho build giữa các lượt, trong khi dịch vụ đám mây thường bắt đầu từ máy sạch nên phải tải lại mọi thứ. Điều kiện để đáng: có người biết vận hành, và lượng build đủ nhiều. Vài lượt mỗi tuần thì dịch vụ sẵn có tiện hơn nhiều.

Mỗi lượt build trên dịch vụ đám mây mất bốn phút, trong đó ba phút chỉ để tải lại thư viện đã tải hàng trăm lần trước đó.

Tóm tắt nhanh
  • Lợi thế lớn nhất của tự host là giữ được bộ nhớ đệm giữa các lượt.
  • Máy sạch mỗi lượt nghĩa là tải lại toàn bộ thư viện, đó là phần lớn thời gian.
  • Đáng làm khi build nhiều lượt mỗi ngày và có người vận hành.
  • Ổ NVMe quan trọng vì CI là đọc ghi hàng chục nghìn file nhỏ liên tục.

Vì sao tự host nhanh hơn

KhâuDịch vụ đám mâyTự host
Chuẩn bị máyKhởi tạo máy sạch mỗi lượtMáy đã sẵn sàng
Tải thư việnTải lại gần như toàn bộCòn nguyên trong kho đệm
Bộ nhớ đệm buildPhải khôi phục từ kho lưu trữNằm sẵn trên ổ
Chạy testNhư nhauNhư nhau

Ba hàng đầu là nơi khác biệt nằm. Với dự án nhiều phụ thuộc, ba khâu này có thể chiếm phần lớn thời gian mỗi lượt build.

Khi nào đáng và khi nào không

Đáng làm khi: chạy trên mười lượt build mỗi ngày, mỗi lượt vài phút trở lên, dự án nhiều phụ thuộc, và trong nhóm có người quen vận hành máy chủ.

Không đáng khi: vài lượt build mỗi tuần, dự án nhỏ build trong ba mươi giây, hoặc không ai trong nhóm muốn nhận việc vận hành. Trong những trường hợp này, thời gian bạn bỏ ra để duy trì máy tự host đắt hơn tiền tiết kiệm được.

Cấu hình và lưu ý

  • Ổ NVMe là bắt buộc. CI là đọc ghi hàng chục nghìn file nhỏ liên tục, đúng chỗ ổ thường thành nút thắt.
  • RAM theo dự án, thường 8GB cho dự án web vừa, hơn nếu build song song nhiều nhánh.
  • Dung lượng dư dả. Kho bộ nhớ đệm và các bản build phình rất nhanh, đặt lịch dọn tự động.
  • Cách ly khi cần. Chạy mỗi lượt build trong container để lượt này không làm bẩn lượt sau.

Một rủi ro ít người nói tới

Máy tự host giữ bộ nhớ đệm nên nhanh, nhưng cũng vì thế mà nó tích tụ trạng thái. Có trường hợp build thành công trên máy tự host nhưng thất bại ở nơi khác, vì máy còn giữ thứ gì đó từ lần trước.

Cách phòng: định kỳ chạy một lượt build từ máy sạch hoàn toàn để kiểm chứng, ví dụ mỗi tuần một lần hoặc trước mỗi lần phát hành.

Khi nào đáng tự host và khi nào không

Tình huốngĐáng khôngVì sao
Dự án nhỏ, vài lần dựng mỗi tuầnKhôngMức miễn phí của dịch vụ đã đủ
Dựng nhiều lần mỗi ngày, thời gian dựng dàiĐángTiết kiệm cả tiền lẫn thời gian chờ
Cần truy cập vào mạng nội bộ khi dựngĐángMáy chạy trên dịch vụ không vào được mạng riêng của bạn
Mã nguồn có ràng buộc không được rời hạ tầng công tyĐángĐây là lý do chính đáng nhất
Đội chưa ai vận hành máy chủKhôngMáy chạy tác vụ hỏng lúc gấp là mất nhiều hơn phần tiết kiệm

Vì sao tự host thường nhanh hơn

  • Giữ được bộ nhớ đệm giữa các lần dựng. Máy trên dịch vụ khởi tạo mới mỗi lần, phải tải lại toàn bộ thư viện. Đây là phần chiếm nhiều thời gian nhất.
  • Ổ NVMe cục bộ nhanh hơn ổ mạng mà nhiều dịch vụ dùng.
  • Không phải xếp hàng chờ máy vào giờ cao điểm.
  • Đổi lại: bạn phải tự dọn bộ nhớ đệm khi nó phình, tự vá bảo mật, tự xử lý khi máy chết.

Rủi ro ít người nói tới

Máy chạy tác vụ tự host có quyền đọc mã nguồn và có các khóa triển khai. Nếu bạn để nó chạy tác vụ từ các nhánh do người ngoài gửi tới, thì người ngoài chạy được lệnh trên máy chủ của bạn. Đây là lỗ hổng nghiêm trọng và rất dễ mắc.

  • Không bao giờ chạy tác vụ từ kho mã công khai trên máy tự host, trừ khi có lớp duyệt trước.
  • Mỗi lần chạy nên bắt đầu từ môi trường sạch, để tác vụ trước không để lại gì cho tác vụ sau.
  • Máy chạy tác vụ không nên nằm cùng máy với dịch vụ đang phục vụ khách.
  • Khóa triển khai phải giới hạn quyền, chỉ chạy được đúng tập lệnh triển khai.

Cấu hình và việc phải làm định kỳ

# Cau hinh goi y cho may chay tac vu
#   2 den 4 nhan, 8 GB bo nho, NVMe 100 GB tro len
#   Bo nho la thu cham tran truoc voi du an lon

# Don bo nho dem dinh ky, neu khong o day sau vai tuan
docker system prune -a --volumes --filter "until=168h"
df -h && du -sh ~/.cache /var/lib/docker 2>/dev/null

# Dat canh bao khi o dia con duoi 20%
# Day la nguyen nhan so mot lam tac vu that bai hang loat

# Kiem may chay tac vu con ket noi khong
systemctl status actions.runner.* 2>/dev/null || systemctl status gitlab-runner

Câu hỏi thường gặp

Tự host CI có rẻ hơn không?

Rẻ hơn khi lượng build lớn, vì bạn trả tiền thuê máy cố định thay vì trả theo phút. Lượng build ít thì dịch vụ sẵn có rẻ hơn cả về tiền lẫn công.

Cấu hình VPS cho CI thế nào?

Ổ NVMe là quan trọng nhất, RAM khoảng 8GB cho dự án web vừa, dung lượng dư dả cho kho bộ nhớ đệm.

Rủi ro của máy tự host là gì?

Tích tụ trạng thái giữa các lượt build, dẫn tới build được ở đây mà hỏng ở nơi khác. Định kỳ chạy thử từ máy sạch để kiểm chứng.

Có nên chạy CI chung máy với ứng dụng thật không?

Không nên. Build ngốn tài nguyên và sẽ làm chậm ứng dụng đang phục vụ khách.

Hạ tầng NVMe Enterprise của TND
VPS ổ Enterprise U.2 NVMe, CPU xung cao, đặt tại Việt Nam
Truy vấn SQL, PHP dựng trang, build Next.js hay đóng gói app iOS và Android: phần lớn các bước này chạy đơn luồng và đập liên tục vào ổ đĩa. Nghẽn nằm ở tốc độ đọc ghi và xung nhịp CPU, không phải ở việc có thật nhiều nhân. Ổ Enterprise U.2 NVMe chuẩn máy chủ chạy RAID 10 cho IOPS đọc ghi ngẫu nhiên gấp 5 đến 7 lần ổ SATA SSD, khác hẳn NVMe M.2 phổ thông. Chạy trên chip Intel Xeon Platinum dòng xung cao, backup tự động hàng tuần, bàn giao trong 5 phút.
Xem VPS Enterprise U.2 NVMe RAID 10, CPU xung cao

Bài viết liên quan