Auto-retry là thuốc giảm đau, không phải cách chữa — bật vô điều kiện thì bạn mất luôn khả năng phân biệt bug thật với nhiễu, và một race condition thật ngoài production sẽ bị retry che đi.
Quy trình xử lý dùng được:
1. Cách ly ngay (quarantine). Test đỏ ngẫu nhiên phải bị tách khỏi pipeline chặn merge trong ngày, ghi issue kèm log. Để nó ở lại vài tuần thì cả nhóm quen với "CI đỏ là bình thường" — lúc đó bug thật cũng bị bỏ qua.
2. Truy nguyên nhân theo nhóm phổ biến: phụ thuộc thời gian/timeout; phụ thuộc thứ tự chạy hoặc dữ liệu còn sót từ test trước; chạy song song dùng chung tài nguyên (cùng bản ghi DB, cùng port); chờ theo sleep cố định thay vì chờ theo điều kiện; nguồn ngoài thật (API bên thứ ba) chưa được chặn.
3. Sửa gốc, rồi mới đưa test trở lại pipeline.
4. Theo dõi số liệu. Ghi lại tần suất fail của từng test; đo được thì mới biết đang tệ đi hay tốt lên.
Retry chấp nhận được ở một chỗ: E2E chạm hạ tầng thật, giới hạn 1 lần retry và phải log lại mọi lần retry. Retry im lặng, không giới hạn thì tương đương xoá test đi mà vẫn tốn thời gian CI.