文件匹配是否排除在"复制文件"任务中工作但在"删除文件"任务不工作的模式



作为TFS 2018构建的一部分,我希望同时使用"复制文件"one_answers"删除文件"任务来移动文件。我在这两项任务中使用了相同的文件匹配模式,但我似乎得到了不同的行为。

场景:我的TFS构建将构建工件复制到网络文件夹\somepathBeta。在我的构建中,此路径保存为一个变量$(NetworkPath)。这些工件的根文件夹是一个版本号,当然,这个版本号在每次构建时都会发生变化。我想通过添加包含所有以前版本的$(NetworkPath)PreviousVersions来清理这个文件夹,这样"Beta"中显示的唯一版本就是最新的版本。

我的尝试:我在构建中添加了复制文件任务(第一个)和删除文件任务(第二个)。我的想法是将$(NetworkPath)中的所有内容复制到$(NetworkPath)PreviousVersions中(不包括$(NetworkPath)PreviousVersions的内容),然后再进行第二次复制,将新版本放入$(NetworkPath)中。

在任务定义中,两个任务的Source Folder都是$(NetworkPath),我在Contents字段中为这两个任务定义的文件匹配模式是:

****
!PreviousVersions**

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

结果:使用这些搜索路径,"复制文件"任务可以正常工作——它复制$(NetworkPath)中但不在$(NetworkPath)PreviousVersions中的所有内容,并将其放入$(NetworkPath)PreviousVersions中。不过,随后的"删除文件"任务会删除$(NetworkPath)中的所有内容,包括整个$(NetworkPath)PreviousVersions文件夹。我希望它只删除$(NetworkPath)中的文件和文件夹,而不删除$(NetworkPath)PreviousVersions中的文件。

我在这里错过了什么?

以下是我为实现我想要的行为而找到的变通方法文件匹配模式:

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

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

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

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

  • globetester是一个方便的小型最小匹配模式测试程序。

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

对于大多数情况,Daniel Mann上面的评论是适用的,我将在未来讨论这样的变化。

相关内容