2010-11-16 21 views
19

Tôi đang kéo tóc ra khỏi vấn đề MSBuild này.Làm thế nào tôi có thể tránh cấu trúc thư mục sâu này với MSDeploy đến hệ thống tập tin bằng cách sử dụng MSBuild?

Chúng tôi đang sử dụng TeamCity để xây dựng giải pháp với hai trang web MVC trong đó. Là một phần của bản dựng chúng tôi đang triển khai vào một thư mục trên máy chủ xây dựng. IIS trỏ đến thư mục này để cung cấp cho chúng ta một tích hợp xây dựng có thể nhìn thấy để quản lý.

Đây là mã từ tệp MSBuild sử dụng MSDeploy để xuất bản gói - chứ không phải dưới dạng tệp zip.

<Target Name="Deploy"> 
    <MSBuild 
    Projects="$(SolutionFile)" 
    Properties="Platform=$(Platform);Configuration=$(Configuration); 
    DeployOnBuild=true; 
    DeployTarget=Package; 
    PackageLocation=$(PackageLocation); 
    PackageAsSingleFile=False; 
    AutoParameterizationWebConfigConnectionStrings=False" /> 
</Target> 

Vấn đề ở đây là chúng tôi có cấu trúc thư mục cực kỳ sâu. Đây là một ví dụ ...

C: \ DEPLOY \ Lưu trữ \ Nội dung \ C_C \ Users \ Edmond \ Documents \ Visual Studio 2008 \ CreatioGreen \ Creatio \ Mã \ core \ trunk \ Website \ Website \ obj \ Release \ Gói \ PackageTmp [file xuất bản]

tôi thực sự muốn triển khai đến các thư mục có thể dự đoán như ...

C: \ build \ website [file xuất bản] C: \ build \ mobilewebsite [file xuất bản]

Đó là nền. Dưới đây là những câu hỏi cụ thể.

  1. Có phải chúng tôi đang cố gắng sử dụng MSDeploy để xuất bản lên hệ thống tệp cục bộ không? Về cơ bản chúng tôi cần tương đương với tính năng "xuất bản" của VS2010, với các biến đổi cấu hình. Chúng tôi không cố gắng triển khai các cá thể IIS từ xa hoặc bất kỳ thứ gì.

  2. Có cách nào để thực hiện việc này nhưng chỉ định thư mục xuất bản không?

  3. Tôi đã cố gắng sử dụng tác vụ Sao chép MSBuild để sao chép các tệp vào các thư mục hợp lý hơn - nhưng tôi không thể tìm hiểu cách sử dụng ký tự đại diện để chỉ định thư mục chúng tôi cần thực hiện một cái gì đó giống như ...

C: \ FolderPackageEndsUpIn [ANYFOLDERS] \ website [ANYFOLDERS] \ PackageTmp * *.

Trợ giúp!

Trả lời

3

Bạn có thể sử dụng WebDeploy trực tiếp để nhận kết quả được điều chỉnh nhiều hơn. Ví dụ, bạn có thể sử dụng lệnh sau để đồng bộ 2 thư mục trực tiếp gốc-to-root:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dirPath=<SourceFolder> -dest:dirPath=<DestinationFolder>

Hoặc bạn có thể làm WebDeploy bao gồm cấu hình IIS trên đích bằng cách sử cung cấp iisApp thay vì dirPath:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp=<SourceFolderOrIISPath> -dest:iisApp=<DestinationFolderOrIISPath>

Ví dụ, để đồng bộ hóa từ một thư mục đơn giản để một ứng dụng mới "NewApp" dưới Default Web Site, bạn sẽ gọi nó theo cách này:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp="d:\MyWebSite" -dest:iisApp="Default Web Site/NewApp"

Sau đó, bạn có thể có tệp lô sẽ thực hiện đồng bộ/đóng gói bằng cách gọi trực tiếp WebDeploy và sẽ được thực thi dưới dạng sự kiện sau xây dựng.

+0

Cám ơn trả lời, kateroh! Điều này đã giúp. – centralscru

+0

Tôi đã làm nó như thế này cho đến khi tôi phát hiện ra rằng tôi không thể chuyển đổi Web.config để làm việc. Bất kỳ ý tưởng về cách làm điều đó mà không sử dụng các mục tiêu gói? –

+0

Bạn có thể giải quyết vấn đề này của biến đổi Web.config bằng cách tạo quy tắc bỏ qua thay thế sẽ làm cho việc triển khai web bỏ qua đồng bộ web.config và thay thế web.release.config bằng web.config. Đây là một bài đăng trên blog về bỏ qua các quy tắc để bạn bắt đầu: http://blogs.iis.net/msdeploy/archive/2008/05/23/how-to-write-skip-and-replace-rules-for- msdeploy.aspx – kateroh

19

Nếu bạn thêm tham số _PackageTempDir vào MSBuild, nó sẽ cung cấp cho bạn kết quả tương tự như thực hiện xuất bản cục bộ. ví dụ.

msbuild C: \ PathToMyProj.csproj/p: Cấu hình = UAT; DeployOnBuild = true; PackageAsSingleFile = False; DeployTarget = trọn gói; _PackageTempDir = c: \ PathToMyDeploy \; AutoParameterizationWebConfigConnectionStrings = false

Lệnh này sẽ công bố tất cả các tệp của tôi tới c: \ PathToMyDeploy \ không có thư mục con điên

1

Có một giải pháp hơi ẩn nhưng thanh lịch.

Khi chạy bản dựng trên máy chủ CI được chia sẻ, có thể khó đóng gói trong c: root vì lý do cách ly. Cuối cùng, người ta muốn loại bỏ đường dẫn sâu trong chính gói đó.

May mắn thay có giải pháp. Thêm quy tắc thay thế trong tệp .pubxml! Tôi tìm thấy nó trong các bổ sung ms bên xây dựng động cơ, 2nd edition: https://www.microsoft.com/learning/en-us/book.aspx?ID=16854

Tôi cũng tìm thấy nó trong blog này: http://learnaspmvc.blogspot.se/2014/07/web-packaging-fixing-long-path-issue.html

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