如何从通过 Jenkins 使用 Octopack 构建的 NuGet 包中排除目录和文件?
Posted
技术标签:
【中文标题】如何从通过 Jenkins 使用 Octopack 构建的 NuGet 包中排除目录和文件?【英文标题】:How to exclude directory and files from NuGet package built with Octopack via Jenkins? 【发布时间】:2019-06-20 17:43:25 【问题描述】:我有一个 Windows 服务,我需要用 OctoPack 打包到一个 nuget 包中,但我必须排除一个名为“Config”的目录和一些其他配置文件(这些是特定于实例的,这将部署到多个实例.) 但是,无论我在 nuspec 文件中放入什么文件,这些文件都始终包含在内。
项目目录:
Config <dir>
Code <dir>
app.config
settings.config
service.csproj
service.nuspec
Nuspec 文件:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<!-- Required elements-->
<id>service</id>
<version>0.0.0</version>
<description>service for app</description>
<authors>our team</authors>
</metadata>
<!-- Optional 'files' node -->
<files>
<file src="**" exclude="Config\" />
<file src="**" exclude="**\app.config" />
<file src="**" exclude="**\settings.config" />
</files>
</package>
Jenkins 文件:
bat "dotnet-octo pack --id=service --format=NuPkg --basePath=bin\\x64\\BuildServer --version=0.0.0.$env.BUILD_ID --overwrite"
我确定我的 nuspec 文件或其他内容中存在错误,但我找不到针对我的具体案例的任何文档。谢谢。
【问题讨论】:
您是否尝试过仅使用<file
行之一的nuspec?也许第一个是包含除Config` directory, but including the
**\app.config` 文件之外的所有文件,第二个是包含`Config` 目录。
【参考方案1】:
原来我想太多了。我只是在打包之前编辑了 Jenkins 文件以删除它们。完全忘记了bat
是一个选项。
bat "del bin\\x64\\BuildServer\\app.config"
bat "del bin\\x64\\BuildServer\\settings.config"
bat "rmdir /s /q bin\\x64\\BuildServer\\Config"
bat "dotnet-octo pack --id=service --format=NuPkg --basePath=bin\\x64\\BuildServer --version=0.0.0.$env.BUILD_ID --overwrite"
但是,通过 nuspec 进行此操作的正确方法是
<files>
<file src="bin\x64\BuildServer\**\*.*" exclude="bin\x64\BuildServer\app.config;bin\x64\BuildServer\settings.config;bin\x64\BuildServer\Config\*.xml" />
</files>
src
表示“包括bin\x64\BuildServer
中的所有目录和文件,其中所有的dll 等都是在构建之后。而exclude
表示除了这些文件。注意所有 路径与您的 nuspec 文件所在的位置相关(这很重要!!!)。
【讨论】:
以上是关于如何从通过 Jenkins 使用 Octopack 构建的 NuGet 包中排除目录和文件?的主要内容,如果未能解决你的问题,请参考以下文章
OctoPack 和 OD 通道:如何创建可以通过管道传输到版本通道的包版本?
如何在 VSTS 构建期间使用 OctoPack 避免 XML 文件中的无效字符?