我已經在Monoserve和Nginx在Ubuntu中完美運行,但我仍然必須使用MSBuild在Windows上本地發佈網站,然後複製這些文件。單聲道XBuild發佈MVC網站
最好我想有一個Linux CI服務器,而不是使用XBuild做到這一點,但我只能讓它建立到.dlls項目,我如何發佈和部署與JS,CSS,視圖等?
我已經在Monoserve和Nginx在Ubuntu中完美運行,但我仍然必須使用MSBuild在Windows上本地發佈網站,然後複製這些文件。單聲道XBuild發佈MVC網站
最好我想有一個Linux CI服務器,而不是使用XBuild做到這一點,但我只能讓它建立到.dlls項目,我如何發佈和部署與JS,CSS,視圖等?
通常,「構建dll」部分是最難的部分。如果你已經解決了這個問題,那麼你有80%。另一半是發佈內容。在最基本的方面,您將源文件的一部分文件複製到網站文件夾中。 MSDeploy是微軟的答案,它太複雜了。我構建了一個NAnt任務來完成此任務,但這也不適用於您的特定場景。但是,一般方法可以:
抓取sln文件尋找Web項目。什麼使得一個Web項目?技術上在csproj文件中引導或sln文件中的項目類型ID。我欺騙並將其定義爲「目標文件夾包含web.config文件」。如果您的解決方案中只有一個網站項目,則可以跳過此步驟,只需對.csproj文件進行硬編碼。
抓取csproj文件尋找<Content Include="some\file.ext" />
節點。 XPath可以做到這一點,Linq to XML也可以做到這一點。這給你所有的.aspx,.cshtml,.js,.css,.png,.config等等,同時小心地留下所有的.cs文件。您需要將路徑前綴添加到.csproj文件以獲取真正的原始文件位置,並且要確保在目標位置保留文件夾結構。但與收穫文件列表相比,這是微不足道的。
現在你已經有了文件列表,循環它從源文件夾複製到目標文件夾。 (您可能希望首先清空目標文件夾,或者之後刪除以前部署中的額外文件,我發現前者更容易。)csproj文件抓取的唯一不能提供給您的是bin文件夾內容,但這是cake:copy bin文件夾的所有內容。 :d(有一個關於是否複製.pdb文件健康的爭論,但我說是的。)
表單的腳本做上述3個步驟,然後將其從一個XBuild任務調用或通話雙方XBuild以及來自CI流程的這個腳本。噗。你有一個部署目標。快樂的編碼!
@DHarun的想法很棒! 我剛剛寫了一個基於@Dharun的想法的小腳本,希望它可以幫助別人。 https://github.com/z-ji/MonoWebPublisher
你是否手工編輯了msbuild文件? – flup
您是否使用構建操作內容標記了您的內容文件? – flup
我想下面的鏈接可能有助於解決此問題 - http://stackoverflow.com/questions/32781983/code-publish-through-jenkins-for-net-mvc-solution-in-ubuntu-machine/32837666#32837666 – user3220129