2013-09-04 40 views
8

Tôi hiện đang sử dụng TFS và hoạt động quy trình xây dựng thường xuyên để xây dựng một giải pháp. Tuy nhiên, tôi muốn có thể tự động triển khai để tôi có thể xây dựng và triển khai từ xa đến một máy chủ trong một bước.TFS msbuild args/p: DeployOnBuild = true dường như không làm bất cứ điều gì

Trên các đối số MSBuild tôi đang cố gắng chỉ định công tắc triển khai. Dự án của tôi là một dịch vụ cửa sổ, nhưng tôi hiểu rằng vẫn có thể triển khai bất kỳ tệp nhị phân nào bất kể loại dự án (không phải là một dự án web).

hiện xây dựng các thông số:

/p:DeployOnBuild=True /p:UserName=user /p:Password=password 

Khi xây dựng chạy trong TFS nó thành công, tuy nhiên tôi đã mong đợi để xem một số nỗ lực triển khai đến máy chủ và một số thông báo lỗi hữu ích nhưng không thấy.

+0

Bạn cần cung cấp cho hồ sơ xuất bản. –

+2

Hồ sơ xuất bản chỉ hoạt động với các dự án web. – suresh2

+0

@ Suresh2 Chúng có thể không được tạo bằng tay và vẫn được sử dụng bởi msbuild không? Sau khi tất cả, msbuild vẫn chỉ là một chương trình dòng lệnh được gọi với các đối số. – jaffa

Trả lời

21

Để tham khảo trong tương lai, tôi đã tìm thấy chính xác những gì cần thiết để cho phép triển khai cho bất kỳ điều gì ngoài dịch vụ web/dự án. Lý do tham số DeployOnBuild không làm bất cứ điều gì cho bất cứ điều gì khác hơn là các dự án web là hồ sơ dự án cần bao gồm các webapplication.targets và cũng là một PropertyGroup chứa đường dẫn đến VSToolsPath.

Liên kết này ở đây đã cho tôi một giới thiệu tốt như thế nào triển khai web làm việc và làm thế nào để tích hợp này vào dự án của tôi để triển khai các dịch vụ:

http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/building-and-packaging-web-application-projects

1) Để vượt qua các thông số vào MSBuild bạn cần một. tệp pubxml (được gọi là hồ sơ xuất bản) trong thư mục PublishProfiles trong thư mục thuộc tính dự án của bạn.

2) Tôi cần những điều sau trong file csproj:

<PropertyGroup> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    </PropertyGroup> 

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /> 

3) Nếu bạn cần các lệnh trước sync/post-sync của MSDeploy, không may này không có sẵn từ MSBuild. Để thực hiện được chức năng này, bạn cần có một X.Wpp.Targets (trong đó X là tên dự án của bạn) bên trong thư mục gốc của dự án của bạn.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name="UninstallService" BeforeTargets="MSDeployPublish">  

     <!-- Do exec tasks here --> 

    </Target> 

    <Target Name="InstallService" AfterTargets="MSDeployPublish">  

     <!-- Do exec tasks here --> 

    </Target> 

</Project> 
-1

bạn cần một cách để triển khai các dịch vụ Windows bằng MSBuild. Hãy thử phương pháp này http://mrchief.calepin.co/deploying-windows-service-via-msbuild/

+0

Cảm ơn sự giúp đỡ của bạn nhưng tôi muốn đạt được điều trên bằng cách sử dụng cùng một đường ống như triển khai Dự án Web. Điều này có thể đạt được bằng cách sử dụng WPP (xem câu trả lời dưới đây). – jaffa

+0

@jaffa Tuyệt vời. cách triển khai web hoạt động như bạn mong đợi là gì? – suresh2

+0

Vâng, nó hoạt động tốt. Tôi đã không chắc chắn như thế nào mục tiêu DeployService của bạn được gọi là mặc dù. Tôi đang sử dụng tính năng Before/AfterTargets của MSBuild 4.0 với MSDeployPublish. – jaffa

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