2011-07-12 33 views
8

Hiện đang sử dụng LAMP stack cho ứng dụng web của tôi. Dev và prod của tôi nằm trong cùng một cá thể đám mây. Bây giờ tôi đang nhận một cá thể mới và muốn di chuyển môi trường dev/test sang cá thể mới, tách nó ra khỏi môi trường prod.2 máy chủ đám mây, một máy chủ, một sản phẩm; một quy trình triển khai tốt là gì?

Nó từng là một tập lệnh Phing đơn giản sẽ thực hiện xuất SVN vào thư mục sản phẩm (được chỉ bởi vhost.conf của tôi). Làm cách nào để tạo một quy trình xây dựng tốt ngay bây giờ với các môi trường được tách ra?

tư duy chuyển kho SVN đến máy chủ dev và sau đó làm một ssh + svn push (có thể như vậy với Phing?)

thư mục/thực tế phổ biến nhất cho loại hình này thiết lập là gì?

More Info:

Tôi hiện đang sử dụng CodeIgniter cho khung MVC, Phing cho tự động xây dựng để triển khai localhost. Ứng dụng web cũng được hỗ trợ bởi một vài tập lệnh CRON được viết bằng Java.

Cập nhật:

Đã kết thúc sử dụng Phing + Jenkins. Làm việc tốt cho đến nay!

Trả lời

3

Chúng tôi sử dụng Phing để thực hiện các triển khai tương tự như những gì bạn đã mô tả. Chúng tôi cũng sử dụng khung công tác Symfony cho các dự án của chúng tôi (điều này không quan trọng lắm đối với điều này nhưng Symfony hỗ trợ khái niệm về các môi trường khác nhau vì vậy nó là một điểm cộng).

Tuy nhiên chúng ta vẫn cần phải tạo ra các file khác nhau cấu hình cho cơ sở dữ liệu, front controllers, vv

Vì vậy, chúng tôi đã kết thúc có một thư mục với build.properties xác định cấu hình cho các môi trường khác nhau (và trong trường hợp của chúng tôi cũng cho các khách hàng khác nhau chúng tôi gửi sản phẩm của chúng tôi). Thư mục này được liên kết với cấu trúc tập tin bằng cách sử dụng svn externals (một lần nữa không cần thiết). Tệp Phing build.xml sau đó chấp nhận một tệp thuộc tính làm tham số trên dòng lệnh, lấy các giá trị từ nó và tạo ra tất cả các tệp cấu hình cần thiết, bộ điều khiển và các tệp cụ thể về môi trường khác. Quay lại đầu trang Cung cấp Phản hồi THÔNG TIN THÊM Chúng tôi lưu trữ cấu hình trong các tệp mẫu và sau đó sử dụng tính năng sao chép/lọc trong Phing để thay thế trình giữ chỗ trong các mẫu có các giá trị cụ thể.

Nhiệm vụ toàn bộ cấu hình môi trường nhất định thì có thể đơn giản như một cái gì đó như thế này:

phing configure-environment -DpropertyFile=./build_properties/build.properties.prod 

Trong xây dựng tập tin của bạn, bạn kiểm tra xem propertyFile tài sản đó quy định các tập tin thuộc tính được định nghĩa và tải các tập tin sử dụng <property file="./build_properties/build.properties.prod" override="true" />. Sau đó, bạn chỉ cần làm bất kỳ phép thuật với các giá trị như bạn cần.

Bạn vẫn có thể sử dụng thanh toán svn/cập nhật của bạn và đặt tất cả các tệp cấu hình kết quả vào svn bỏ qua (bạn sẽ có chúng tạo ra bởi phing). Chúng tôi thực sự sử dụng các bước bổ sung trong Phing. Các bước cuối cùng tạo ra gói cài đặt tự triển khai trình bao Linux. Điều này được tạo ra tự động trong Jenkins.Sau đó chúng tôi gửi gói cho khách hàng của chúng tôi hoặc nhóm hỗ trợ có thể lấy gói từ Jenkins và họ có thể thực hiện toàn bộ triển khai chỉ bằng cách thực hiện nó (chúng tôi vẫn thích triển khai thủ công cho máy chủ sản xuất) hoặc Jenkins có thể triển khai tự động (ví dụ: máy chủ).

Tôi rất sẵn lòng viết thêm thông tin nếu cần.

+0

mát mẻ. chúng tôi sử dụng CodeIgniter và có thiết lập tương tự với việc sử dụng các mẫu để định cấu hình và sử dụng Phing để thực hiện sao chép/lọc trên các mẫu đó khi chúng tôi thực hiện thao tác đẩy. Vì vậy, Jenkins có khả năng đẩy đến một máy chủ từ xa không? Bạn nghĩ gì về phpUnderControl? Những công cụ này có hoạt động tốt với php framework MVC (đặc biệt là phần kiểm tra đơn vị) không? –

+0

Tôi cũng không chắc chính xác bạn muốn nói gì bằng cách nhấn vào đây. Tôi không thể nghĩ ra một cách để làm "đẩy" bằng cách sử dụng svn. Có lẽ sử dụng móc sau cam kết. GIT có thể tốt hơn cho việc này. Nếu không Phing chỉ có thể làm những gì SVN có thể làm (hoặc ít hơn). Một tùy chọn khác có thể là rsync. Về Jenkins - một lần nữa nó sử dụng các công cụ khác cho công việc để nó sẽ chạy các mục tiêu phing của bạn để làm bất kỳ công việc cần thiết nào. Tôi đã không thử phpUnderControl nhưng từ những gì tôi biết khái niệm tương tự như Jenkins. – poisson

+0

Điều gì về scp/ssh vào máy chủ prod với mã mới? –

1

Tôi khuyên bạn nên sử dụng Capistrano (có vẻ như họ chưa cập nhật tài liệu kể từ khi họ di chuyển trang web) và railsless-deploy để triển khai. Cuối cùng, có thể bạn sẽ cần phải thêm các hộp ứng dụng khác và chạy các tác vụ khác như một phần của triển khai của bạn để chọn một khung công tác sẽ hỗ trợ điều này có thể giúp bạn tiết kiệm rất nhiều thời gian trong tương lai. Tôi đã sử dụng capistrano cho hai triển khai PHP (một nhỏ và một lớn) và mặc dù nó không hoàn hảo, nó hoạt động tốt. Nó cũng xử lý tất cả các mã kiểm tra/cập nhật, di chuyển liên kết tượng trưng vào vị trí, và lăn trở lại nếu có điều gì sai.

Một khi bạn đã capistrano cấu hình, tất cả các bạn phải làm là một cái gì đó như:

cap dev deploy 
cap prod deploy 

Một tùy chọn khác mà tôi đã khám phá để làm điều này là fabric. Mặc dù tôi đã không sử dụng nó, nếu tôi đã phải triển khai một ứng dụng phức tạp một lần nữa, tôi sẽ xem xét nó. Giao diện đơn giản và dễ hiểu.

Tùy chọn thứ ba bạn có thể xem xét suy nghĩ của nó vẫn còn trong giai đoạn phát triển ban đầu là gantry (tha thứ cho việc tự quảng cáo). Đây là một cái gì đó tôi đã được làm việc trên ra khỏi thất vọng với việc sử dụng capistrano để triển khai một ứng dụng PHP trong một môi trường với rất nhiều mảnh di chuyển. Capistrano rất tuyệt vời và hoạt động tốt cho việc triển khai ứng dụng không phải PHP, nhưng bạn vẫn phải tìm hiểu một số mã để hiểu điều gì đang xảy ra và tinh chỉnh nó cho phù hợp với nhu cầu của bạn. Đây cũng là lý do tại sao tôi đề nghị cho vải một cái nhìn tốt.

+0

poisson được đề cập bằng cách sử dụng Jenkins. Là một công cụ như Capistrano một phần của phương trình tích hợp liên tục?Vấn đề chính của tôi là thực sự cố gắng đẩy từ một máy chủ đến một máy chủ từ xa khác. Tôi giả định hành động này là một tập con của các hành động theo CI? –

0

Tôi sử dụng cấu hình tương tự ngay bây giờ. Đèn + SVN + codeigniter + prd và máy chủ dev.

Tôi chạy repo svn trên dev. Tôi kiểm tra repos vào thư mục gốc của miền dev. Sau đó, sử dụng móc hậu cam kết để cập nhật thư mục gốc mọi lúc mọi nhà phát triển đều cam kết.

Khi chúng tôi hài lòng và đã kiểm tra đầy đủ mã tôi ssh vào máy chủ prd và rsync gốc dev vào thư mục gốc.

Giải pháp của tôi cho các cấu hình khác nhau. Bên ngoài thư mục gốc tôi có một tập tin config.ini. Tôi phân tích các tập tin trong kịch bản lệnh constants.php codeigniter của tôi. Điều này có nghĩa rằng máy chủ prd và dev có thể có các cài đặt riêng biệt mà không có chúng bao giờ nằm ​​trong repos.

Nếu bạn muốn được trợ giúp với mã sau, rsync và ini, hãy cho tôi biết.

+0

Cảm ơn bạn đã cập nhật. Với rsync, nó không chỉ thêm tệp và không xóa tệp? Vì vậy, nếu tôi loại bỏ một tập tin mã từ thư mục gốc của tôi, làm thế nào để cấu hình rsync để thực hiện xóa? Tôi đã chơi với các nhiệm vụ SSH và SCP cho Phing và họ trông đầy hứa hẹn. Tôi chỉ có thể tải lên từ xa mã mới nhất vào một thư mục xây dựng trên máy chủ prod và sau đó thay đổi các liên kết khi sẵn sàng để cuộn nó ra để sử dụng. –

+0

Tôi sử dụng rsync để nhân bản gốc trên dev thành gốc trên prd. Nó cũng có thể xóa các tập tin. Nó sử dụng ssh để chuyển. Nó bỏ qua thư mục .svn. Tôi sẽ tự động hóa nó nếu tôi có nhiều để cập nhật, nhưng đó là một lệnh duy nhất vì vậy tôi chỉ ssh vào máy chủ prd và chạy nó. – Boz

+0

Phing trông thật tuyệt - nếu bạn muốn tìm hiểu thêm về rsync, đây là một bài viết hay. Giúp bạn hiểu những lá cờ. Tôi thêm lệnh vào tập lệnh bash và thiết lập một số quyền trên prd sau khi đồng bộ hóa. http://www.linuxquestions.org/linux/answers/Networking/Using_rsync_to_mirror_data_between_servers – Boz

Các vấn đề liên quan