Có một cách thứ ba, như bạn nói chính mình. Tôi nghĩ rằng bạn đang trộn lẫn phát triển, thử nghiệm và triển khai. Tôi đề nghị rằng toàn bộ SDLC phải được xem xét một cách tổng thể, trước tiên, để hiểu những gì bạn đang cố gắng đạt được. Đây là một chủ đề lớn, nhưng tôi sẽ cố gắng hết sức để tóm tắt.
TL; DR;
Nói tóm lại, bạn cần tách ra:
- mã của bạn, từ
- cấu hình ứng dụng, từ
- cấu hình môi trường hệ thống.
Mỗi người cần độc lập với nhau và phù hợp:
- kiểm soát phiên bản
- thử nghiệm
- có thể triển khai
Phiên bản dài hơn
Đầu tiên, bạn có một ứng dụng được tạo thành từ mã và (các bộ cấu hình) riêng biệt. Điều này cần phải được kiểm tra, đối với cả chức năng xây dựng và chức năng có chủ ý - đây được gọi là tích hợp liên tục (CI). Có nhiều nhà cung cấp dịch vụ này cả trực tuyến và cục bộ - ví dụ CircleCI cho nhà cung cấp đám mây liên kết với kho lưu trữ của bạn, xây dựng và kiểm tra bất cứ khi nào bạn cam kết. Nếu kho lưu trữ của bạn tại chỗ và không thể sử dụng nhà cung cấp đám mây, một cái gì đó như Jenkinssẽ là một tương đương. Nếu ứng dụng của bạn khá chuẩn, có thể có hình ảnh Docker hiện có mà dịch vụ CI có thể sử dụng. Nếu không, bạn sẽ phải tạo một hoặc một cụm như vậy, mã ứng dụng và cấu hình của bạn có thể được triển khai. Cấu hình chính xác, bạn sẽ có rất nhiều số liệu thống kê về chất lượng mã ứng dụng của bạn.
Tiếp theo, một khi bạn hài lòng với chức năng và tính chính xác của ứng dụng của mình, cơ sở mã phải được gắn thẻ phù hợp cho một bản phát hành cụ thể. Bản dựng này sau đó nên được triển khai vào môi trường thử nghiệm. Lưu ý rằng mã sẽ giống như được kiểm tra trong CI của bạn (có thể chứng minh là như vậy, nếu bạn đã thực hiện điều này một cách chính xác), nhưng cấu hình của bạn có thể khác. Một lần nữa, một số nhà cung cấp CI có thể cung cấp bước này để bạn có thể kiểm tra việc triển khai ứng dụng đóng gói và cấu hình riêng biệt. Giai đoạn này thường sẽ bao gồm kiểm tra chức năng người dùng (cho chức năng mới), cũng như kiểm tra tự động (cho chức năng đã biết). Nếu bản phát hành vượt qua giai đoạn này, bạn có một ứng cử viên phát hành để thử nghiệm tích hợp. Bạn có thể chạy thử nghiệm tự động hóa từ một container Docker khác,một số số liệu cho thấy nỗ lực kiểm tra trạng thái là 1: 1 cho nỗ lực mã hóa (mặc dù bản thân tôi không chắc chắn về điều này).
Áp chót, bước tiếp theo là nơi bạn xây dựng môi trường (hệ thống) của mình như thể nó đang sản xuất. Nếu bạn đang sử dụng Docker trong sản xuất, đây là nơi bạn sẽ nghĩ đến việc tăng cường bảo mật, tối ưu hóa mạng và máy chủ, v.v. Hình ảnh Docker của bạn có thể dựa trên những gì bạn đã sử dụng trong Phát triển (lý tưởng là như vậy), nhưng có thể có những thay đổi để mở rộng và bảo mật , như tôi đã nói. Đến bây giờ việc kiểm tra chức năng của ứng dụng đã hoàn tất, bạn quan tâm nhiều hơn đến bảo mật và hiệu suất. Theo thử nghiệm chức năng, các thử nghiệm của bạn ở đây có thể được phát triển, triển khai và chạy từ các hình ảnh Docker khác. Bước này từng rất tốn kém và hiếm khi được thực hiện để bạn cần phần cứng chuyên dụng thay thế cho sản xuất. Ngày nay, điều này là hoàn toàn khả thi khi bạn có thể đứng lên và phá hủy toàn bộ môi trường của hầu hết mọi quy mô theo yêu cầu.
Cuối cùng, bạn có một bản phát hành nên sẵn sàng sản xuất chỉ với một bộ deltas cấu hình nhỏ từ thử nghiệm tích hợp của bạn (địa chỉ IP, URI cơ sở dữ liệu, mật khẩu, v.v.) Cơ sở mã của bạn đã được kiểm tra ít nhất trong ba môi trường khác nhau điểm và phần lớn cấu hình hệ thống ít nhất một lần.