我已经在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