2012-04-04 23 views
8

Sql Project Publish thay thế Deploy - cách kích hoạt versioning và hook vào tfs build

Chúng tôi đang sử dụng Sql Server 2012 SSDT loại bỏ tùy chọn triển khai trong Visual Studio cho các dự án cơ sở dữ liệu (bây giờ là dự án sql). Chúng tôi muốn tự động hóa bước Xuất bản như chúng tôi đã triển khai, nhưng không rõ cách thực hiện điều này. do đó, một vài câu hỏi:

  1. Tôi đã thêm tệp .publish.xml vào dự án (sau lần xuất bản thủ công đầu tiên, kiểm tra thêm vào dự án). Ngay cả sau đó, và đặt nó vào mặc định, khi tôi nhấp đúp vào nó, nó xây dựng, nhưng luôn bật lên cửa sổ cài đặt, nơi tôi cần phải nhấp vào nút "Xuất bản" để tiếp tục. Có cài đặt nào sẽ bỏ qua lời nhắc này và sử dụng các giá trị hiện tại không?

  2. Dường như mỗi xuất bản tạo ra phiên bản đầu ra sql. Làm thế nào tôi có thể ngăn chặn điều này - tức là ghi đè lên tệp cơ sở mỗi lần?

  3. Và cuối cùng, bất kỳ con trỏ nào để cập nhật bản dựng để sử dụng loại dự án mới và lệnh xuất bản cho các bản dựng tự động sẽ được đánh giá cao.

Trả lời

4

Cách tốt nhất tôi đã tìm thấy để tự động triển khai dự án cơ sở dữ liệu SSDT là sử dụng msbuild. Ban đầu chúng tôi đã sử dụng VSTSDB và sử dụng msbuild đối với tệp * .dbproj. Khi nó bật ra các đối số cho việc triển khai các tập tin sqlproj là chính xác như nhau.

Vì danh sách đối số cũ phù hợp với chúng tôi, tôi đã không trao đổi để sử dụng kiểu tệp public.xml. Có khá nhiều tài liệu cho vsdbcmd.exe và msbuild chống lại dbproj. Tôi sẽ sử dụng nó làm tài liệu tham khảo.

Dưới đây là danh sách đối số, và sản lượng thực hiện khi chúng ta định nghĩa nó cho FinalBuilder thực hiện

[ MSBuild Project [ C:\xx\xxx\xx\xx\MyProject.sqlproj ] ] 
    Configuration : Release 
    OutDir : C:\Builds\1\xxxxx\builddefname\Binaries\Release\ 
    DeployToDatabase : True 
    TargetDatabase : ExistingDatabaseName 
    TargetConnectionString : Data source=.;Integrated Security=SSPI;** 
    Build started 3/23/2012 2:17:08 PM. 
    Deployment script generated to: 
    C:\Builds\1\xxxx\builddefname_FB\Binaries\Release\MyProject.sql 
    Dropping FK_at_lusys_assetCategory_at_lusys_image... 
    Creating FK_dcb28374eeabe8e715038984419... 
    Creating FK_d82897e4acd966d4b136c242cef... 
    Checking existing data against newly created constraints 
    Update complete. 
    Done Building Project "C:\xxx\xxxxxxx\xxxxxxxxx\MyProject.sqlproj" (Deploy target(s)). 
    Build succeeded. 
    0 Warning(s) 
    0 Error(s) 

và đặt lại với nhau dòng lệnh msbuild trông như thế này:

msbuild XXX.sqlproj /target:Deploy /p:Configuration=xxx;OutDir=xxx;DeployToDatabase=True;TargetDatabase=xxxx;TargetConnectionString="xxxxx";AlwaysCreateNewDatabase=True 
7

Làm thế nào để khôi phục lại các tùy chọn triển khai :(Chỉ dành cho Visual Studio 2010/2012 - tính năng này không còn được hỗ trợ trong Visual Studio 2013)

Tùy chọn Triển khai vẫn còn hiện diện nhưng vì lý do nào đó, tùy chọn này không có sẵn trong các menu. (Nhóm Visual Studio bị nguyền rủa!) Tôi đã làm việc này bằng cách thêm tùy chọn Triển khai vào một trong các thanh công cụ như sau:

  1. Nhấp vào mũi tên ở bên phải của thanh công cụ.
  2. Nhấp vào "Thêm hoặc xóa nút", sau đó nhấp vào Tùy chỉnh.
  3. Trong hộp thoại Tùy chỉnh, nhấp vào Thêm lệnh.
  4. Chọn danh mục "Xây dựng", sau đó chọn lệnh "Triển khai lựa chọn".
  5. Sau khi lưu lựa chọn của bạn, tùy chọn "Triển khai [tên dự án]" sẽ xuất hiện trên thanh công cụ. Bạn sẽ cần chọn dự án của mình trong Solution Explorer để nút được bật.

Lưu ý rằng cài đặt triển khai khác với cài đặt xuất bản. Cài đặt triển khai được định cấu hình trong thuộc tính của dự án trên tab Gỡ lỗi.


Để trả lời câu hỏi của bạn về các tùy chọn Publish:

1) Làm thế nào để sử dụng một cụ xuất bản tập tin theo mặc định và tránh những phiền toái nhắc

Tôi không nghĩ rằng có một cách xung quanh điều này.

2) Làm thế nào để xuất bản toàn bộ cơ sở dữ liệu, không chỉ là những thay đổi

Mở tập tin .publish.xml của bạn trong một trình soạn thảo văn bản và thêm <AlwaysCreateNewDatabase>true</AlwaysCreateNewDatabase>.

Ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <TargetDatabaseName>MyDatabase</TargetDatabaseName> 
    <DeployScriptFileName>MyDatabaseProject.sql</DeployScriptFileName> 
    <TargetConnectionString>Data Source=localhost\SQL2012;Integrated Security=True;Pooling=False</TargetConnectionString> 
    <PublishDependentProjects>False</PublishDependentProjects> 
    <ProfileVersionNumber>1</ProfileVersionNumber> 
    <AlwaysCreateNewDatabase>true</AlwaysCreateNewDatabase> 
    </PropertyGroup> 
</Project> 

3) dòng lệnh cú pháp cho tự động xây dựng

Đầu tiên xây dựng dự án của bạn với msbuild như bình thường để các tập tin .dacpac được tạo ra trong thùng rác .

Sau đó sử dụng sqlpackage.exe xuất bản sử dụng tập tin .publish.xml của bạn:

C:\Program Files\Microsoft Visual Studio 10.0\Microsoft SQL Server Data Tools\sqlpackage.exe /Action:Publish /SourceFile:C:\[path to my project]\bin\Debug\MyDatabaseProject.dacpac /Profile:C:\[path to my project]\MyDatabaseProject.publish.xml

Lưu ý rằng đường dẫn đến sqlpackage.exe có thể khác nhau.

4

Một chút muộn cho bữa tiệc, tôi thừa nhận, nhưng có lẽ điều này sẽ giúp những người khác vấp ngã trong cuộc thảo luận này. Công ty của tôi hiện đang chuyển sang VS2012 và chúng tôi có cả ba vấn đề tương tự như Keith. Tôi đã tìm thấy cách giải quyết cho # 1 và # 2.

Đối với số 1, tôi sử dụng AutoHotKey để theo dõi sự tồn tại của cửa sổ xuất bản và tự động nhấp vào nút "Tạo tập lệnh". Tất nhiên, bạn có thể có kịch bản tự động nhấp vào nút "Xuất bản". Trong ví dụ này nếu hồ sơ xuất bản không phải là "XYZ" (tôi luôn thích can thiệp thủ công hơn cho triển khai máy chủ sản xuất), hãy tiếp tục và gửi Alt + G để tạo tập lệnh.

#Persistent 
SetTimer, ClosePopups, 5000 

return 

ClosePopups: 
if WinExist("Publish Database ") 
{ 
    WinActivate, Publish Database 
    WinGetTitle, TitleText, A 
    If not TitleText = "Publish Database XYZ.publish.xml" { 
     Send, !G 
    } 
} 
return 

Đối với # 2, mỗi khi chúng tôi xuất bản, nó sẽ tăng thêm tên tệp với hậu tố số và chúng tôi kết thúc với nhiều tệp trong thư mục triển khai của chúng tôi. Tôi vừa sử dụng các sự kiện dựng sẵn để xóa các tệp .sql và .txt trước khi tạo:

if exist "$(ProjectDir)$(OutputPath)*.publish.sql" del $(ProjectDir)$(OutputPath)*.publish.sql 
if exist "$(ProjectDir)$(OutputPath)*.txt" del $(ProjectDir)$(OutputPath)*.txt 
+0

Thực sự thêm dấu ngoặc kép vào lệnh del cũng sẽ tiết kiệm rất nhiều thời gian: (Nếu có dấu cách) nếu tồn tại "$ (ProjectDir) $ (OutputPath) *. Publication.sql" del "$ (ProjectDir) $ (OutputPath) *. Publish.sql" nếu tồn tại "$ (ProjectDir) $ (OutputPath) *. Txt "del" $ (ProjectDir) $ (OutputPath) *. txt " –

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