Chúng tôi có một ứng dụng thương mại điện tử mà chúng tôi phát triển tại công ty của chúng tôi. Đây là một ứng dụng LAMP tiêu chuẩn hợp lý mà chúng tôi đã phát triển trong khoảng 3 năm. Chúng tôi phát triển ứng dụng trên một miền thử nghiệm, ở đây chúng tôi thêm các tính năng mới và sửa lỗi, v.v. Theo dõi lỗi và phát triển tính năng của chúng tôi đều được quản lý trong một giải pháp lật đổ được lưu trữ (unluddle.com). Khi các lỗi được báo cáo, chúng tôi thực hiện các sửa lỗi này trên miền thử nghiệm và sau đó cam kết thay đổi đối với svn khi chúng tôi hài lòng, lỗi đã được sửa. Chúng tôi làm theo quy trình tương tự với việc bổ sung các tính năng mới.
Rất đáng để chỉ ra kiến trúc chung của hệ thống và ứng dụng của chúng tôi trên các máy chủ của chúng tôi. Mỗi khi một tính năng mới được phát triển, chúng tôi sẽ cập nhật bản cập nhật này cho tất cả các trang web bằng ứng dụng của chúng tôi (luôn là máy chủ chúng tôi kiểm soát). Mỗi trang web sử dụng hệ thống của chúng tôi về cơ bản sử dụng chính xác các tệp giống nhau cho 95% cơ sở mã. Chúng tôi có một vài thư mục trong mỗi trang có chứa các tệp đặt trước cho trang đó - tệp / hình ảnh css, v.v. Khác với sự khác biệt giữa mỗi trang được xác định bởi các cài đặt cấu hình khác nhau trong mỗi cơ sở dữ liệu của trang.
Điều này nhận được vào việc triển khai thực tế chính nó. Và khi chúng tôi sẵn sàng tung ra một bản cập nhật của một số loại, chúng tôi chạy một lệnh trên máy chủ mà trang web thử nghiệm đang bật. Điều này thực hiện một lệnh sao chép (cp -fru / testsite / / otherite /) và đi qua từng lực lượng vhost cập nhật các tệp dựa trên ngày sửa đổi. Mỗi máy chủ bổ sung mà chúng tôi lưu trữ trên có một vhost mà chúng tôi đồng bộ hóa cơ sở mã sản xuất và sau đó chúng tôi lặp lại quy trình sao chép trên tất cả các trang web trên máy chủ đó. Trong quá trình này, chúng tôi chuyển các tệp mà chúng tôi không muốn ghi đè lên, di chuyển chúng trở lại khi bản sao đã hoàn thành. Kịch bản giới thiệu của chúng tôi thực hiện một số chức năng khác như áp dụng các lệnh SQL để thay đổi từng cơ sở dữ liệu, thêm các trường / bảng mới, v.v.
Chúng tôi ngày càng lo ngại rằng quy trình của chúng tôi không đủ ổn định, không chịu lỗi và cũng là một phương pháp vũ phu. Chúng tôi cũng nhận thức được rằng chúng tôi không sử dụng lật đổ tốt nhất vì chúng tôi có một vị trí làm việc trên một tính năng mới sẽ ngăn chúng tôi đưa ra một bản sửa lỗi quan trọng vì chúng tôi không sử dụng các nhánh hoặc thẻ. Có vẻ như chúng tôi đã sao chép rất nhiều tệp trên các máy chủ của mình. Chúng tôi cũng không thể dễ dàng thực hiện quay lại những gì chúng tôi vừa tung ra. Chúng tôi thực hiện một khác biệt trước mỗi lần giới thiệu để chúng tôi có thể nhận được một danh sách các tệp sẽ được thay đổi để chúng tôi biết những gì đã được thay đổi sau đó nhưng quá trình quay lại vẫn còn vấn đề. Về mặt cơ sở dữ liệu, tôi đã bắt đầu xem xét dbdeploy như một giải pháp tiềm năng. Điều chúng tôi thực sự muốn là một số hướng dẫn chung về cách chúng tôi có thể cải thiện việc quản lý và triển khai tệp của mình. Lý tưởng nhất là chúng tôi muốn quản lý tệp được liên kết chặt chẽ hơn với kho lưu trữ của chúng tôi để triển khai / rollback sẽ được kết nối nhiều hơn với svn. Một cái gì đó giống như sử dụng lệnh xuất để đảm bảo các tệp trang web giống như các tệp repo. Nó cũng sẽ là tốt mặc dù nếu giải pháp có thể cũng sẽ dừng sao chép tập tin xung quanh các máy chủ của chúng tôi.
Bỏ qua các phương pháp hiện tại của chúng tôi sẽ rất tốt khi nghe cách người khác tiếp cận vấn đề tương tự.
tóm tắt ...
- Cách tốt nhất để làm cho các tệp trên nhiều máy chủ được đồng bộ hóa với svn là gì?
- Làm thế nào chúng ta nên ngăn chặn sao chép tập tin? symlink / cái gì khác?
- Làm thế nào chúng ta nên cấu trúc repo của chúng tôi để chúng tôi có thể phát triển các tính năng mới và sửa các tính năng cũ?
- Làm thế nào chúng ta nên kích hoạt rollouts / rollback?
Cảm ơn trước
BIÊN TẬP:
Gần đây tôi đã đọc rất nhiều điều hay về việc sử dụng Phing và Capistrano cho các loại nhiệm vụ này. Bất cứ ai cũng có thể cung cấp thêm thông tin về họ và họ sẽ làm tốt như thế nào cho loại nhiệm vụ này?