如何注射" Jenkins CI构建作业中的NuGet包

时间:2016-07-13 14:33:16

标签: visual-studio powershell jenkins msbuild nuget

所以情况就是这样:我们有一个可以为不同客户部署的Web应用程序。 Web应用程序可以通过每个客户的不同模块进行扩展。这些模块被创建为NuGet包,并包含DLL和静态文件,例如: HTML,CSS,JS,ASMX ......

由于并非所有客户都使用相同的模块,并且基本Web应用程序应尽可能顺畅,因此Web应用程序项目本身并不了解模块的任何信息。相反,每个客户都可以使用Jenkins构建作业。在此构建作业中,将修改packages.config文件以添加所需模块的NuGet包条目。然后我们为模块NuGet包执行nuget.exe restorenuget.exe update(以确保它在最新版本上)。在此之后,我们使用msbuild和Octopack来构建和部署Web应用程序。

所有这些都适用于模块NuGet包中包含的DLL和web.config转换(通过web.config.install.xdt完成),但不幸的是它不适用于包含的静态文件在模块NuGet包中:(

我认为这是因为Web应用程序.csproj文件中缺少引用!因此静态文件实际上被复制到正确的位置,但没有被添加到最终的Octopack Nuget包中,因为它们不被识别为项目内容。

据我研究到现在为止,我们无法使用NuGet CLI本身解决这个问题,但是还有其他选择吗?程序包管理器控制台仅在Visual Studio的powershell上下文中可用,对吧? (Update-Package -Reinstall我想是完美的)

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我们找到了以下解决方案(Octopack获胜!)。我们使用Octopack提供的选项OctoPackEnforceAddingFiles=true,而不是仅仅依赖于NuGet。这告诉Octopack不仅要将项目文件添加到生成的NuGet包中(正如通常那样),而且除了添加到.nuspec文件中定义的<files>部分中列出的文件/文件夹之外该项目。请参阅:http://docs.octopusdeploy.com/display/OD/Using+OctoPack#UsingOctoPack-IncludingadditionalfilesusingaNuSpecfile(.nuspec)

因此我们的基础项目只有一个空<files>部分的nuspec文件。然后,该模块包含XDT文件,用于在(un)install上转换nuspec文件,以配置应由Octopack添加的其他文件/文件夹。这样他们就不必成为csproj文件的一部分。

我希望看到此选项可以处理<files>部分,因为其他文件的包含列表(而不是csproj或files部分)也会添加到nuget cli中。