Họ đang đo gì
Bạn có tách được artifact khỏi môi trường không — nền của mọi quy trình deploy đáng tin.
Trả lời ngắn~30 giây
Trong biến môi trường, và MỘT bản build duy nhất chạy được ở cả ba nơi. Nếu bạn phải build lại để deploy lên production thì thứ bạn kiểm thử ở staging không phải thứ bạn chạy ở production — và mọi bảo đảm từ vòng kiểm thử biến mất. Phép thử nhanh của Twelve-Factor: mở mã nguồn ra công khai ngay bây giờ có lộ gì không? Nếu có thì cấu hình đang nằm nhầm chỗ.
Giải thích sâu
Ranh giới hay bị mờ: cấu hình theo MÔI TRƯỜNG (URL database, khoá API) thuộc về môi trường, còn cấu hình theo SẢN PHẨM (danh sách bậc thuế, thứ tự các bước trong luồng) thuộc về code — nó cần được review, cần lịch sử thay đổi, và cần test. Đẩy mọi thứ vào biến môi trường tạo ra một tầng cấu hình mà không ai đọc được và không test được, và nó hỏng lúc 2 giờ sáng vì một biến bị gõ sai.
Thực hành đáng làm là kiểm tra cấu hình lúc KHỞI ĐỘNG chứ không lúc dùng: phân tích toàn bộ biến môi trường qua một schema ngay khi tiến trình lên, và thoát ngay với thông báo rõ ràng nếu thiếu. Nếu không, một biến thiếu chỉ lộ ra khi ai đó bấm vào tính năng dùng nó — có thể là ba ngày sau khi deploy, và lúc đó không ai còn nghĩ tới lần deploy ấy nữa.
Câu hỏi tiếp theo họ sẽ hỏi
?File .env thì sao?
Tốt cho máy dev, và không nên là cách production nhận cấu hình — production nên lấy từ nền tảng hoặc kho bí mật. .env.example được commit để liệt kê những biến cần có; .env thì không bao giờ.
Trả lời thế này là mất điểm
if (env === 'production')rải rác trong code nghiệp vụ. Đường đi ở production khác đường bạn test, nên bạn chưa từng test cái đang chạy.