2010-05-20 25 views
7

Tóm tắt môi trường.MSBuild: tự động thu thập các tập lệnh di chuyển db?

  • ứng dụng Asp.net web (nguồn lưu trữ trong svn)
  • SQL cơ sở dữ liệu Server. (Lược đồ cơ sở dữ liệu (bảng/sprocs) được lưu trữ trong svn)
  • phiên bản db được đồng bộ hóa với phiên bản lắp ráp ứng dụng web. (được lưu trữ trong bảng 'CurrentVersion')
  • CI hudson server kiểm tra ứng dụng web từ repo và chạy tệp msbuild tùy chỉnh để xuất bản/ứng dụng gói.

Tập lệnh msbuild của tôi cập nhật phiên bản lắp ráp của ứng dụng web (Major.Minor.Revision.Build) trên mỗi bản dựng. 'Bản sửa đổi' được đặt thành bản sửa đổi svn hiện đang được kiểm tra và 'Xây dựng' thành số bản dựng hudson (tăng lên trên mỗi bản dựng tự động).

Bằng cách này tôi có thể khớp ứng dụng với bản sửa đổi thân cây cụ thể cũng nhận được số liệu thống kê xây dựng khác từ số bản dựng hudson.

Tôi muốn tự động hóa việc thu thập tập lệnh di chuyển (sprocs được cập nhật v.v.) để thêm vào gói zip. Tôi đoán bằng cách so sánh sửa đổi svn của db chưa được triển khai, để sửa đổi đang được triển khai, tôi có thể tìm thấy tệp db nào đã thay đổi trong thân kể từ lần triển khai cuối cùng đến cơ sở dữ liệu/môi trường đó.

Điều này có thể dễ dàng đạt được bằng cách gọi thủ công lệnh svn diff -r REVNO:REVNO để liệt kê các tệp .sql đã thay đổi. Sau đó, các tệp này có thể phải được thêm vào gói theo cách thủ công. Sẽ tuyệt vời nếu điều này có thể được tự động hóa.

Trước tiên tôi sẽ tưởng tượng tôi sẽ phải viết một nhiệm vụ tùy chỉnh để kiểm tra phiên bản của db chưa được triển khai. Sau đó tôi khá không chắc chắn. Có ai có bất cứ đề nghị nào về việc làm thế nào để đạt được điều này thông qua một tác vụ msbuild hoặc là hiện tại hay tùy chỉnh?

Cuối cùng, tôi sẽ phải tự động tạo tập lệnh để thêm vào gói cập nhật bảng phiên bản cơ sở dữ liệu để đồng bộ hóa với ứng dụng.

+0

Đây là một câu hỏi đáng lo ngại. Chúng tôi sử dụng khá nhiều kịch bản xây dựng, nhưng tôi vẫn đang đấu tranh để đưa DB vào SVN, đôi khi các nhà phát triển có thể chống SO thay đổi :) –

+0

Ok, tìm thấy lệnh svn có thể xuất danh sách các tệp đã thay đổi thành tệp xml. Từ đó tôi sẽ có thể xử lý tệp xml đó thông qua msbuild để kiểm tra các tệp riêng lẻ mà tôi yêu cầu đối với vùng làm việc xây dựng. '>;' lệnh là mấu chốt;) svn diff -r REVNO: REVNO --xml --summarize "svn: // PathToTrunk">; d: /temp.xml –

Trả lời

2

Xem qua dự án cơ sở dữ liệu SQL. Trong VS 2010, chúng đã được tăng cường khá nhiều và đã xây dựng trong khả năng triển khai có thể đồng bộ hóa cơ sở dữ liệu DEV của bạn với các môi trường khác.

Dưới đây là một số liên kết tốt về các dự án DB trong vs 2010: http://msmvps.com/blogs/deborahk/archive/2010/05/02/vs-2010-database-project-building-and-deployment.aspx

http://weblogs.asp.net/gunnarpeipman/archive/2009/07/29/visual-studio-2010-database-projects.aspx

4

Việc tích hợp các thay đổi SQL vào quá trình xây dựng/triển khai tự động là HARD. Tôi biết, bởi vì tôi đã cố gắng để nó một vài lần với thành công hạn chế. Những gì bạn đang cố gắng làm là gần đúng hướng, nhưng tôi cho rằng nó thực sự hơi phức tạp. Trong đề xuất của bạn, bạn đề nghị thu thập các tập lệnh SQL cụ thể cần được áp dụng cho DB của bạn tại thời gian xây dựng/gói.Thay vào đó, bạn nên đóng gói tất cả các tập lệnh delta của bạn (cho toàn bộ lịch sử của cơ sở dữ liệu) với dự án của bạn và tính toán các khu vực cần thực hiện khi bạn triển khai - theo cách đó, gói triển khai của bạn có thể được triển khai đến các môi trường có cơ sở dữ liệu với các phiên bản khác nhau. Có hai phần triển khai bạn cần để đạt được điều này:

1) Bạn cần đóng gói các phần còn lại vào gói có thể triển khai của mình. Lưu ý rằng bạn nên đóng gói deltas - không phải các tệp tĩnh tạo lược đồ ở trạng thái hiện tại của nó. Các tập lệnh delta phải nằm trong kiểm soát nguồn. Bạn cũng có thể giữ lược đồ tĩnh trong điều khiển nguồn, nhưng bạn sẽ phải giữ nó trong đồng bộ với các vùng đồng bằng. Bạn thực sự có thể sử dụng một công cụ như SQLCompare của Red Gate hoặc phiên bản VS Database để tạo ra (hầu hết) các vùng đồng bằng từ lược đồ tĩnh. Để có được các vùng đồng bằng vào gói triển khai của bạn, và cho rằng bạn đang sử dụng svn - bạn có thể muốn xem xét svn: externals như một cách để "liên kết mềm" các tập lệnh delta vào dự án web của bạn. Kịch bản xây dựng của bạn sau đó có thể chỉ cần sao chép chúng vào gói có thể triển khai của bạn.

2) Bạn cần một hệ thống có thể đọc danh sách tệp delta, so sánh chúng với cơ sở dữ liệu hiện có, xác định vùng đồng bằng nào cần được áp dụng cho cơ sở dữ liệu đó, và sau đó áp dụng (và cập nhật thông tin sổ sách kế toán, như phiên bản cơ sở dữ liệu). Có một dự án mã nguồn mở (được tài trợ bởi ThoughtWorks) được gọi là dbdeploy để thực hiện điều này. Tôi đã có một số thành công với công cụ đó một cách cá nhân.

Chúc may mắn - đây là một hạt khó khăn để crack (chính xác).

0

Các giải pháp có sẵn ngày hôm nay rằng nhắm mục tiêu một .NET/SQL Server chồng là:

  • DBUp (mã nguồn mở)
  • ReadyRoll (sâu Studio tích hợp Visual, tự động tạo ra các kịch bản)

Sản phẩm thứ hai là sản phẩm mà chúng tôi đang tích cực phát triển tại Redgate.

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