文件匹配排除了在“复制文件”任务中起作用但不在“删除文件”任务中起作用的模式?

时间:2018-12-31 19:34:15

标签: tfs tfsbuild tfs2018

作为TFS 2018构建的一部分,我想一起使用“复制文件”和“删除文件”任务移动文件。在这两个任务中,我都使用相同的文件匹配模式,但是似乎出现了不同的行为。

方案:我的TFS构建将构建工件复制到网络文件夹\\some\path\Beta中。在我的构建中,此路径另存为变量$(NetworkPath)。这些工件的根文件夹是一个版本号,当然,该版本号在每次构建时都会更改。我想通过添加保存所有先前版本的$(NetworkPath)\PreviousVersions来清理此文件夹,以便“测试版”中显示的唯一版本是最新版本。

我的尝试:我向自己的版本添加了“复制文件”任务(第一个)和“删除文件”任务(第二个)。我的想法是在进行第二次复制以将新版本放入$(NetworkPath)之前,将$(NetworkPath)\PreviousVersions中的所有内容复制到$(NetworkPath)\PreviousVersions中(不包括$(NetworkPath)的内容)。

在任务定义中,两个任务的“源文件夹”均为$(NetworkPath),而我在“目录”字段中为两个任务定义的file matching patterns为:

**\**
!PreviousVersions\**

“复制文件”任务中的目标文件夹自然是$(NetworkFolder)\PreviousVersion

结果:使用这些搜索路径,“复制文件”任务可以正常工作-它复制$(NetworkPath)中但不在$(NetworkPath)\PreviousVersions中的所有内容并将其放在{ {1}}。但是,后续的“删除文件”任务将从$(NetworkPath)\PreviousVersions中删除所有内容,包括整个$(NetworkPath)文件夹。我希望它仅删除$(NetworkPath)\PreviousVersions中的文件和文件夹,而不删除$(NetworkPath)中的文件和文件夹。

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

这是我发现的解决方法文件匹配模式,可以实现我想要的行为:

  1. 对于“复制文件”任务:*.*.*.*\**

  2. 对于“删除文件”任务:*.*.*.*

很显然,这利用了我要移动的文件具有一个根文件夹的事实,该根文件夹的名称为版本号(即2.5.0.11),因此该解决方案不适用于许多人。

也就是说,以下是一些可以帮助我缩小问题和解决方案范围的事情:

  • globtester是一款方便的小型minimatch模式测试仪。

  • 在处理这两个任务时,在构建的队列面板中设置debug = true将为您提供有关匹配模式实际作用的更有用的日志。

在大多数情况下,上面丹尼尔·曼(Daniel Mann)的评论都是适用的,将来我将讨论这种变化。