在Teamcity的构件中删除目录结构

17

我使用 Teamcity 构建不同的软件包,并希望将这些软件包保存为“Artifacts”。我的 TeamCity 中的 Artifact 路径如下:

%system.teamcity.build.workingDir%\**\Release**/*.wsp => Solution 

现在,TeamCity会在正确构建后收集所有Release目录中的WSP文件,并且会将它们保存,包括所有子目录,如下所示:

How the Files are being offered

我只想要“solution”下面直接的.wsp文件,而不需要整个目录结构。

3个回答

7

来自TeamCity文档:

wildcard - 用于发布与Ant样式的通配符模式匹配的文件(仅支持""和"*"通配符)。通配符应表示相对于构建检查目录的路径。通配符匹配的目录结构将被保留在发布的文件中(文本匹配的目录不会创建)。也就是说,TeamCity将从模式中第一个通配符开始创建目录。

http://confluence.jetbrains.net/display/TCD65/Configuring+General+Settings#ConfiguringGeneralSettings-artifactPaths

在您的构建脚本(或附加的最终构建步骤)中,您需要将必要的文件复制到单个文件夹中,并将该文件夹发布为Artifacts。


1
我写了一个递归收集文件的工具。虽然不是最好的解决方案,但它是“一个”解决方案。 - Ole Albers
@Max Klinger:有一个叫做PowerShell的工具非常适合制作这样的“工具” :D - Ruben Bartelink
1
也许吧。但在计算机科学中编程更快 :) - Ole Albers
如果你在那个TC文档中继续往下看,会有一些例子,其中一个似乎是说你可以展开一个文件夹结构(所有子目录中的*.x文件都会放到目标根目录下):target//.txt => docs* — 发布在目标目录及其子目录中找到的所有txt文件。这些文件将在构建产物中的docs目录下可用。 不过不确定那个语法是什么。在Windows的TC服务器上肯定是有效的。 - slolife
@slolife提到的示例是target/**/*.txt=> docs,但它不会扁平化目录结构,只是在名为docs的目录下复制该结构。在TeamCity文档的其他地方,解释了使用通配符(***)时,“文件将被发布并保留与通配符匹配的目录结构(由“静态”文本匹配的目录将不会创建)。也就是说,TeamCity将从模式中通配符的第一次出现开始创建目录。” - Todd Owen

4

我曾遇到这样的问题:我想从子目录中收集各种安装文件。将PowerShell运行程序添加为构建步骤非常强大,可以很好地解决这个问题...

get-childitem -Recurse -Include *.wsp | Move-Item -destination .

在TeamCity查看工件之前,这将把它们移动到根目录,其中像*.wsp这样的基本工件路径可以捕捉到它们以进行最终输出。


4

不要像@manojlds建议的那样进行复制,你可以通过修改.csproj文件中的OutputPath或在构建.sln时提供一个OutDir属性覆盖来实现某些目标(如果你正在这样做)。请注意,这两种方法都不完美-例如,Visual Studio ALM工具中的CI服务器TeamBuild将所有内容重定向到一个目录中,这可能会造成完全混乱,并且只适用于最简单的情况。


1
能解释一下为什么这值得一个踩吗?为什么不给另一个点赞呢?或者我错过了些什么?你认为这应该是一条评论吗?当你踩的时候,尝试解释一下你的想法是一个好主意。 - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接