Điều này thỉnh thoảng xuất hiện trong một số nhóm phát triển của chúng tôi, mà chúng tôi không tìm ra cách "đúng":
Chúng tôi sử dụng rất nhiều ứng dụng web dựa trên phản ứng "biên dịch" vào các trang web tĩnh chỉ là một vài tệp html, js và css.
Tuy nhiên, "tòa nhà" của các ứng dụng này có một số biến cho phép / vô hiệu hóa cờ tính năng, định cấu hình các url phụ trợ, v.v. Điều này có nghĩa là chúng ta không thể "xây dựng" một nhị phân theo nghĩa truyền thống và chỉ áp dụng tệp cấu hình khi triển khai- thời gian - bản thân "bản dựng" cần phải có các biến cụ thể cho môi trường này và do đó, lần duy nhất chúng ta có thể "xây dựng" là tại thời điểm triển khai.
Hiện tại, chúng tôi giải quyết điều này bằng cách đưa các biến môi trường cần thiết vào bộ chứa Docker và chạy cmd bắt đầu dọc theo dòng
npm build && nginx run
Điều này có một vài nhược điểm:
- Quá trình xây dựng cần rất nhiều cpu / bộ nhớ so với yêu cầu thời gian chạy của container. Điều đó có nghĩa là chúng ta cần mở rộng quy mô container cho quá trình xây dựng thay vì các yêu cầu về thời gian chạy - điều này cảm thấy sai
- Thất bại xây dựng là khó để "theo dõi". Chúng tôi có thể sử dụng kiểm tra sức khỏe trong Kubernetes, nhưng nếu quá trình xây dựng mất 2 phút, chúng tôi vẫn phải chờ 3 phút (thêm 1 lần cho an toàn) trước khi chúng tôi có thể bắt đầu kiểm tra điểm cuối kiểm tra sức khỏe của người chứa để xem nó còn sống hay không.
- Việc triển khai có thể mất nhiều thời gian: Nếu chúng tôi định cấu hình Kubernetes để thực hiện triển khai "nối tiếp", nó sẽ bắt đầu mỗi nhóm và chờ trong khoảng thời gian "initDelay" 2-3 phút trước khi bắt đầu kế tiếp. Điều này có nghĩa là chúng ta dễ dàng xem xét thời gian triển khai 10 phút nếu việc triển khai được thu nhỏ thành 3-4 nhóm.
Tất cả điều này cảm thấy rất tối ưu với tôi. Tôi rất muốn nghe cách cộng đồng giải quyết câu hỏi hóc búa "xây dựng tại thời điểm triển khai" với các ứng dụng web javascript hiện đại.
Tôi nhận ra rằng đối với Kubernetes, chúng ta có thể sử dụng "init-container" để thực hiện quá trình xây dựng, đặt các tạo phẩm vào bộ lưu trữ liên tục và sau đó các thùng chứa ứng dụng chỉ cần lấy từ bộ lưu trữ liên tục trong khi khởi động, nhưng điều này vẫn giống như "bỏ qua" vấn đề hơn giải quyết vấn đề gốc.
npm build
chỉ là một lệnh tùy ý. Có thể react build
hoặc sanity build
bất cứ điều gì mà khung công tác JS mong đợi. Chúng tôi buộc phải làm điều đó khi triển khai container vì đó là khi chúng tôi biết môi trường để build
làm.
npm build
trong thời gian chạy thay vì trong quá trình xây dựng container?