Họ đang đo gì
Bạn có nghĩ tới hành vi của đội không — pipeline chậm hoặc hay đỏ oan sẽ bị vô hiệu hoá bằng cách này hay cách khác.
Trả lời ngắn~30 giây
Bắt buộc: lint và kiểm tra kiểu, unit test, build, quét lỗ hổng của dependency, và deploy tự động lên staging. Mục tiêu thời gian là dưới 10 phút cho phản hồi trên pull request — quá ngưỡng đó thì người ta bắt đầu gộp nhiều thay đổi vào một PR để đỡ chờ, và bạn mất chính lợi ích của CI. Test tích hợp chậm thì chạy song song hoặc chạy sau khi merge, đừng chặn PR bằng chúng.
Giải thích sâu
Thứ tự các bước nên theo nguyên tắc thất bại sớm và rẻ: lint trước (giây), kiểu (chục giây), unit test (phút), rồi mới build và test tích hợp. Chạy song song những bước độc lập. Một pipeline chạy build trước rồi mới lint là bắt lập trình viên chờ ba phút để biết mình quên dấu chấm phẩy.
Vấn đề lớn nhất trong thực tế không phải tốc độ mà là test rung (flaky). Một test thất bại ngẫu nhiên 2% nghe như nhỏ, nhưng với 200 test thì gần như PR nào cũng đỏ ít nhất một lần, và đội học được thói quen bấm “retry” mà không đọc. Từ lúc đó pipeline không còn là tín hiệu nữa. Cách xử lý là theo dõi tỷ lệ rung như một chỉ số, cách ly test rung ra khỏi luồng chặn, và sửa hoặc xoá chúng — chứ không phải thêm cơ chế tự retry.
Về bảo mật trong pipeline, hai thứ đáng làm sớm vì rẻ: quét dependency (npm audit, Dependabot, Trivy cho ảnh container) và quét bí mật bị commit nhầm. Cả hai đều gần như miễn phí về thời gian và bắt được loại lỗi mà code review không bắt được. Quét mã tĩnh sâu hơn thì thường chạy theo lịch chứ không chặn PR, vì nó chậm và nhiều báo động giả.
Câu hỏi tiếp theo họ sẽ hỏi
?Deploy production tự động hay cần người bấm?
Tuỳ vào mức độ tin cậy của test và tốc độ quay lui. Nếu quay lui mất 30 giây và test đủ tốt thì tự động là hợp lý và giảm rủi ro vì mỗi lần deploy nhỏ hơn. Nếu quay lui khó thì cổng người là hợp lý — nhưng cổng đó phải là quyết định, không phải một nút bấm theo thói quen.
Trả lời thế này là mất điểm
- Bật tự động retry cho test đỏ. Bạn vừa biến một tín hiệu thành tiếng ồn có thẩm quyền.
- Không có deploy tự động lên staging. Nếu staging phải deploy tay thì nó sẽ luôn lệch với production.