2013-01-12 82 views
6

我已經在Monoserve和Nginx在Ubuntu中完美運行,但我仍然必須使用MSBuild在Windows上本地發佈網站,然後複製這些文件。單聲道XBuild發佈MVC網站

最好我想有一個Linux CI服務器,而不是使用XBuild做到這一點,但我只能讓它建立到.dlls項目,我如何發佈和部署與JS,CSS,視圖等?

+0

你是否手工編輯了msbuild文件? – flup

+0

您是否使用構建操作內容標記了您的內容文件? – flup

+0

我想下面的鏈接可能有助於解決此問題 - http://stackoverflow.com/questions/32781983/code-publish-through-jenkins-for-net-mvc-solution-in-ubuntu-machine/32837666#32837666 – user3220129

回答

8

通常,「構建dll」部分是最難的部分。如果你已經解決了這個問題,那麼你有80%。另一半是發佈內容。在最基本的方面,您將源文件的一部分文件複製到網站文件夾中。 MSDeploy是微軟的答案,它太複雜了。我構建了一個NAnt任務來完成此任務,但這也不適用於您的特定場景。但是,一般方法可以:

  1. 抓取sln文件尋找Web項目。什麼使得一個Web項目?技術上在csproj文件中引導或sln文件中的項目類型ID。我欺騙並將其定義爲「目標文件夾包含web.config文件」。如果您的解決方案中只有一個網站項目,則可以跳過此步驟,只需對.csproj文件進行硬編碼。

  2. 抓取csproj文件尋找<Content Include="some\file.ext" />節點。 XPath可以做到這一點,Linq to XML也可以做到這一點。這給你所有的.aspx,.cshtml,.js,.css,.png,.config等等,同時小心地留下所有的.cs文件。您需要將路徑前綴添加到.csproj文件以獲取真正的原始文件位置,並且要確保在目標位置保留文件夾結構。但與收穫文件列表相比,這是微不足道的。

  3. 現在你已經有了文件列表,循環它從源文件夾複製到目標文件夾。 (您可能希望首先清空目標文件夾,或者之後刪除以前部署中的額外文件,我發現前者更容易。)csproj文件抓取的唯一不能提供給您的是bin文件夾內容,但這是cake:copy bin文件夾的所有內容。 :d(有一個關於是否複製.pdb文件健康的爭論,但我說是的。)

表單的腳本做上述3個步驟,然後將其從一個XBuild任務調用或通話雙方XBuild以及來自CI流程的這個腳本。噗。你有一個部署目標。快樂的編碼!

+0

謝謝我做了一個shell腳本來做到這一點。精美的工作,我一直認爲複製部署過程太複雜。 – Dharun

+0

很高興它工作得很好。 – robrich

0

最好,我想有一個做到這一點,而不是使用XBuild 好消息是,你可以用一種變通方法我在this文章發現這樣做在Linux CI服務器。以下是摘自上述文章的摘錄和解決方法鏈接:

構建服務器沒有安裝Microsoft MVC(任何版本)。 但是,這是非常容易解決的 - 如果您需要 安裝舊版本,請點擊頁面底部 的舊版本,您將獲得有關如何在NuGet上使用 的說明安裝該框架的 版本。

希望這可以讓你輕鬆!

+0

感謝您的鏈接,但我不認爲這將處理完全部署網站,只編譯dll – Dharun