Lý lịch
Tôi đang làm việc để tạo ra một quy trình phát triển mới cho một nhóm web nhỏ gồm khoảng 4 lập trình viên và 4 nhà thiết kế, với tiềm năng rõ ràng để phát triển nhóm trong tương lai. Sản phẩm của chúng tôi là một ứng dụng trung tâm cung cấp năng lượng cho các trang web của khách hàng mà chúng tôi cũng thiết kế và lưu trữ.
Trước đây, tất cả chúng ta đều làm việc qua FTP trên máy chủ dev, với một cơ sở dữ liệu dev. Nó "hoạt động" * trong một thời gian, nhưng chúng tôi đang chuyển sang một hướng mới, vì vậy đây là lúc để trưởng thành quá trình của chúng tôi.
Chúng tôi sử dụng Percona Server 5.5, nhưng đây không phải là cơ sở dữ liệu, với ý tưởng giữ chi phí thấp.
Mục tiêu :
Tôi đang xem xét việc tạo ra một quy trình tích hợp liên tục (CI) để phát triển cơ sở dữ liệu với ý tưởng sau:
- Các nhà phát triển có bản sao dữ liệu cục bộ để chạy mã phát triển
- Có thể khôi phục cấu trúc cơ sở dữ liệu để thay đổi trước đó
- Có thể tách các thay đổi lược đồ tính năng mới so với thay đổi thiết kế lược đồ
- Có thể sửa đổi cấu trúc cơ sở dữ liệu cục bộ để thử nghiệm
Khái niệm ban đầu
Tôi đã phác thảo một quy trình dưới đây bằng SVN và LiquiBase, mặc dù nó hoàn toàn loại bỏ #4
.
- tạo một nhánh 'phát triển' từ thân cây
- máy chủ db 'phát triển' trung tâm chạy khỏi nhánh 'phát triển'
- các nhà phát triển địa phương được thiết lập làm nô lệ cho nhánh phát triển (cung cấp
#1
ở trên)- Các bộ thay đổi hóa lỏng được cam kết thường xuyên cho nhánh phát triển, thực thi một móc nối sau cam kết để cập nhật cơ sở dữ liệu phát triển trung tâm (sẽ chuyển xuống các máy cục bộ đang hoạt động như nô lệ cho máy chủ phát triển này) (Liquidibase cung cấp
#2
ở trên)- khi các tính năng hoặc sửa lỗi lược đồ đã sẵn sàng để đi đến QA, DBA (tôi) sẽ hợp nhất các thay đổi phù hợp từ nhánh phát triển vào trung kế. Hành động này sẽ tạo ra một kịch bản sql để áp dụng cho một máy chủ cơ sở dữ liệu dàn dựng.
- Máy chủ dàn sẽ phản ánh TRUNK, có cấu trúc giống như Sản xuất, cộng với các thay đổi trong QA
- Sau khi thực hiện tập lệnh sql trên máy chủ dàn, thực hiện một số QA về các thay đổi.
- Nếu tất cả có vẻ tốt, TAG cấu trúc. Điều này sẽ tạo ra tập lệnh .sql được DBA chạy trong sản xuất thủ công (cho giờ thấp điểm nếu được yêu cầu)
Quá trình này yêu cầu tất cả các nhà phát triển chạy cùng một nhánh 'phát triển', nghĩa là chỉ có một phiên bản của lược đồ cơ sở dữ liệu tại bất kỳ thời điểm nào (không chắc chắn rằng tôi muốn điều này).
Điều đó cũng có nghĩa là mọi thay đổi đối với lược đồ không thể được kiểm tra cục bộ và có thể ảnh hưởng đến các nhà phát triển khác nếu không được thực hiện đúng. Trong môi trường của chúng tôi, các nhà phát triển có thể thêm các bảng mới nhưng hiếm khi sửa đổi cấu trúc hiện có. Là DBA, sửa lỗi thiết kế được thực hiện bởi tôi. Nhưng việc không thể kiểm tra các bản sửa lỗi cục bộ là quá trình treo máy lớn nhất của tôi.
Làm thế nào quá trình trên có thể được điều chỉnh để cho phép phát triển cục bộ, trong khi vẫn duy trì một bản sao dữ liệu tương đối cập nhật (như được cung cấp bởi sao chép trong quy trình đề xuất của tôi)? Tôi không yêu cầu dữ liệu phải được cập nhật cho đến tuần trước.
* Bởi 'đã hoạt động', ý tôi là nó không hiệu quả nhưng là Pita.