作为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)
中的文件和文件夹。
我在这里想念什么?
答案 0 :(得分:0)
这是我发现的解决方法文件匹配模式,可以实现我想要的行为:
对于“复制文件”任务:*.*.*.*\**
对于“删除文件”任务:*.*.*.*
很显然,这利用了我要移动的文件具有一个根文件夹的事实,该根文件夹的名称为版本号(即2.5.0.11),因此该解决方案不适用于许多人。
也就是说,以下是一些可以帮助我缩小问题和解决方案范围的事情:
globtester是一款方便的小型minimatch模式测试仪。
在处理这两个任务时,在构建的队列面板中设置debug
= true
将为您提供有关匹配模式实际作用的更有用的日志。
在大多数情况下,上面丹尼尔·曼(Daniel Mann)的评论都是适用的,将来我将讨论这种变化。