Nhóm của tôi hiện đang sử dụng quy trình triển khai / phân nhánh khá đơn giản giống như sau:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
Mỗi môi trường có nhánh riêng (chúng tôi sử dụng git ) và bản dựng riêng sử dụng nhánh đó. Khi chúng tôi muốn quảng bá từ môi trường này sang môi trường khác, ví dụ, từ DEV sang QA, chúng tôi hợp nhất master
chi nhánh vào qa
và khởi động một bản dựng QA mới (sau đó được tự động triển khai vào môi trường QA).
Chúng tôi đang xem xét chuyển sang một quy trình mới sẽ loại bỏ việc có một nhánh chuyên dụng và xây dựng cho từng môi trường. Thay vào đó, một bản phát hành duy nhất sẽ tạo ra một "gói triển khai" mà sau đó có thể được triển khai cho bất kỳ môi trường nào. Chúng tôi đang tưởng tượng một quy trình công việc điển hình sẽ trông giống như thế này:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
Quảng bá từ môi trường này sang môi trường khác sẽ không còn được xử lý trong kiểm soát nguồn; thay vào đó, chúng tôi chỉ lấy các nhị phân đã được xây dựng ("gói triển khai") và thả nó vào môi trường mới.
Hệ thống mới này sẽ cho phép chúng tôi triển khai bất kỳ bản dựng nào cho bất kỳ môi trường nào, có một số lợi thế. Ví dụ, việc kiểm tra sửa lỗi lỗi trong DEV và QA là chuyện nhỏ. Hệ thống hiện tại của chúng tôi không cung cấp một cách dễ dàng để làm điều này mà không cần quay lại một chi nhánh, điều mà rõ ràng chúng tôi muốn tránh.
Hạn chế lớn nhất với hệ thống mới này là chúng tôi không còn có cách tự động theo dõi mã nào trong môi trường nào. Nếu chúng ta cần sửa lỗi trong SẢN XUẤT, chúng ta không còn có một nhánh chuyên dụng đồng bộ với cơ sở sản xuất hiện tại. Điều tương tự cũng xảy ra với QA - nếu chúng ta muốn thúc đẩy thay đổi nhanh chóng thành QA mà không cần nạo vét công việc đang tiến hành master
, chúng ta không còn có một chi nhánh phản ánh tình trạng hiện tại của môi trường QA.
Làm thế nào chúng ta có thể theo dõi mã nào trong mỗi môi trường?
Một số tùy chọn chúng tôi đang xem xét:
- sử dụng thẻ git để theo dõi cam kết nào trong môi trường nào
- nhúng cam kết git được sử dụng bởi bản dựng vào mỗi gói triển khai