我使用Jenkins和Ant构建步骤自动化构建过程。我有构建操作和后期构建源代码控制标记工作正常。
在构建了许多QT项目之后,我希望能够从构建中保留有用的工件。
作为讨论/考虑的工具,假设我在构建目录中有以下文件集:
MyApp.exe
MyApp.pdb
MyApp_Tests.exe
MyApp_Tests.pdb
SomeLib.lib
SomeLib.pdb
3rdParty.lib
3rdParty.pdb
Utils.dll
Utils.pdb
(实际上有更多的exe,dll的lib及其相关的pdb文件,并且随着项目的发展,构建生成的文件会经常更改。)
我想收集“可交付”文件(非测试exe和dll)以及他们的pdb文件没有测试exe文件,lib文件及其pdb文件。
我相信我可以在复制任务中获取可交付文件的文件集:
<copy todir="${artifactDestination}" failonerror="true">
<fileset dir="./build">
<include name="*.exe" />
<include name="*.dll" />
<exclude name="*_Tests*" />
</fileset>
</copy>
我正在努力解决的问题是如何获取与exe和dll文件相关的pdb文件的文件集,即除MyApp_Tests.pdb,SomeLib.pdb和3rdParty.pdb之外的所有pdb文件。
我想要做的是使用exe和dll文件的初始文件集,并创建第二个文件集,其中包含那些扩展名为.pdb而不是.dll或.exe的文件名。
我一直在阅读选择器等但未能找到解决方案来实现我想要的结果。
有什么建议吗?
答案 0 :(得分:2)
您应该能够通过后续两个copy
任务实现您想要的目标。第一个是你已经想到的那个。要复制与您在第一步中复制的文件相匹配的.pdb
文件,您可以使用present
选择器。
<copy todir="${artifactDestination}" failonerror="true">
<fileset dir="build">
<or>
<present targetdir="${artifactDestination}">
<globmapper from="*.pdb" to="*.exe"/>
</present>
<present targetdir="${artifactDestination}">
<globmapper from="*.pdb" to="*.dll"/>
</present>
</or>
</fileset>
</copy>