我使用 Teamcity 构建不同的软件包,并希望将这些软件包保存为“Artifacts”。我的 TeamCity 中的 Artifact 路径如下:
%system.teamcity.build.workingDir%\**\Release**/*.wsp => Solution
现在,TeamCity会在正确构建后收集所有Release目录中的WSP文件,并且会将它们保存,包括所有子目录,如下所示:
我只想要“solution”下面直接的.wsp文件,而不需要整个目录结构。
来自TeamCity文档:
wildcard - 用于发布与Ant样式的通配符模式匹配的文件(仅支持""和"*"通配符)。通配符应表示相对于构建检查目录的路径。通配符匹配的目录结构将被保留在发布的文件中(文本匹配的目录不会创建)。也就是说,TeamCity将从模式中第一个通配符开始创建目录。
在您的构建脚本(或附加的最终构建步骤)中,您需要将必要的文件复制到单个文件夹中,并将该文件夹发布为Artifacts。
我曾遇到这样的问题:我想从子目录中收集各种安装文件。将PowerShell运行程序添加为构建步骤非常强大,可以很好地解决这个问题...
get-childitem -Recurse -Include *.wsp | Move-Item -destination .
在TeamCity查看工件之前,这将把它们移动到根目录,其中像*.wsp
这样的基本工件路径可以捕捉到它们以进行最终输出。
不要像@manojlds建议的那样进行复制,你可以通过修改.csproj文件中的OutputPath或在构建.sln时提供一个OutDir属性覆盖来实现某些目标(如果你正在这样做)。请注意,这两种方法都不完美-例如,Visual Studio ALM工具中的CI服务器TeamBuild将所有内容重定向到一个目录中,这可能会造成完全混乱,并且只适用于最简单的情况。
target//.txt => docs* — 发布在目标目录及其子目录中找到的所有txt文件。这些文件将在构建产物中的docs目录下可用。
不过不确定那个语法是什么。在Windows的TC服务器上肯定是有效的。 - slolifetarget/**/*.txt=> docs
,但它不会扁平化目录结构,只是在名为docs
的目录下复制该结构。在TeamCity文档的其他地方,解释了使用通配符(*
或**
)时,“文件将被发布并保留与通配符匹配的目录结构(由“静态”文本匹配的目录将不会创建)。也就是说,TeamCity将从模式中通配符的第一次出现开始创建目录。” - Todd Owen