Azure DevOps构建管道:从MsBuild.exe解决方案创建NuGet程序包

时间:2019-08-30 14:35:43

标签: azure azure-devops nuget

我正在尝试构建Asp.Net框架461 Web应用程序并将dll打包在NuGet包中,该包将用于在章鱼中进行部署。

请注意,我正在使用:

  • 在ADO中内置的构建解决方案任务
  • 章鱼提供的
  • 内置创建章鱼软件包任务来打包NuGet pkg

enter image description here

它构建了解决方案,并将工件以部署包格式与xxx.deploy批处理文件打包在一起。但是,当我尝试将其部署到服务器上时,它迫使我在不想执行的服务器上安装“ Web Deploy(msdeploy.exe)”。

NuGet软件包的内容如下:构建的内容嵌入zip文件和其他部署文件中。

enter image description here

我们以前的DevOps以前管理过这些构建,当我将他的NuGet软件包与我的NuGet软件包进行比较时,它们是完全不同的。在他的版本中,所有aspx,ascx和bin文件夹都位于NuGet软件包的顶层。

enter image description here

我想打包我的NuGet软件包,而没有这些其他部署文件。

AzureDevOps中的当前构建参数是

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"

我试图将其更改为/p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=false,但仍然无法实现所需的NuGet软件包格式。

它将生成的输出生成到-> $ myproject \ obj \ Release \ Package \ PackageTmp位置。

我想知道是否有一种无需额外的zip文件即可生成NuGet软件包的方法?还是我需要编写手动的powershell脚本并执行Octo.exe来将内容打包在... \ PackageTmp目录下?

总而言之,是否存在“创建Nuget包”任务来定义我只想打包..\PackageTmp目录?

1 个答案:

答案 0 :(得分:0)

  

Azure DevOps构建管道:从MsBuild.exe解决方案创建NuGet包

实际上,如果您只想打包..\PackageTmp文件夹中的文件,则在使用/p:WebPublishMethod=Package时,我们必须为创建八达通打包任务的源文件过滤文件,因为Create Octopus Package task没有过滤器选项。

您可以将copy task内容 **\PackageTmp\**一起使用来过滤PackageTmp文件夹中的文件:

enter image description here

此外,如果您不关心publish方法,那么使用/p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=false应该更容易解决此问题。

当我使用以下参数发布Web应用程序时:

/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\" /p:DeployDefaultTarget=WebPublish

然后使用八达通打包应用程序打包它:

enter image description here

最后,我可以在PackageTmp文件夹中获得包含所有文件的软件包:

enter image description here

希望这会有所帮助。