2013-01-12 55 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