如何在 Azure Devops / VSTS / TFS 中获取从 "Windows Machine File Copy" 任务复制的文件总数?
How to harvest the total number of files copied from "Windows Machine File Copy" task in Azure Devops / VSTS / TFS?
首先我要说我不知道这是否可能,但我希望它是。
我在 Azure Devops 中有几份工作 运行 "Windows Machine File Copy" 任务。 Documentation here.
在任务日志的末尾,有一个显示文件总数的输出...
2019-12-06T20:42:33.2991058Z ------------------------------------------------------------------------------
2019-12-06T20:42:33.2992182Z
2019-12-06T20:42:33.2994274Z Total Copied Skipped Mismatch FAILED Extras
2019-12-06T20:42:33.2995919Z Dirs : 29 28 0 0 0 0
2019-12-06T20:42:33.2997487Z Files : 361 361 0 0 0 0
2019-12-06T20:42:33.2999056Z Bytes : 89.96 m 89.96 m 0 0 0 0
2019-12-06T20:42:33.3000612Z Times : 0:00:03 0:00:02 0:00:00 0:00:00
2019-12-06T20:42:33.3000997Z
2019-12-06T20:42:33.3002124Z
2019-12-06T20:42:33.3003761Z Speed : 31614545 Bytes/sec.
2019-12-06T20:42:33.3005534Z Speed : 1808.998 MegaBytes/min.
2019-12-06T20:42:33.3006054Z Ended : Friday, December 6, 2019 2:42:33 PM
2019-12-06T20:42:33.3006989Z
2019-12-06T20:42:33.3049176Z Copying recursively from...
这个值是否作为变量存储在任何地方?有没有人能够使用这样的日志以编程方式解析来自它们的信息?
您可能会编写一些使用 REST APIs 来检索发布日志的东西。或者您可以只查看 $(System.DefaultWorkingDirectory)
.
中的文件数
但我会强烈反对这个指标,因为它完全没有意义。不只是对开发人员。给大家。审计员、经理、开发人员、QA 测试人员;选择一个角色,这对担任该角色的人来说毫无意义。无论他们认为这是在衡量什么,它都不是在衡量那个东西。
如果这个想法是要衡量 "size" 或发布背后的风险,那是完全错误的;一个大的变化可能只涉及很少的文件(甚至 删除 个文件),而一个小的变化仍然可以覆盖大量文件。
事实上,您最有可能看到的是 每次 运行 发布 时每个文件都会更新,因为时间戳不同; robocopy 不对 CRCs/hashes 进行操作,它对时间戳进行操作。因此,您真正发现的只是文件数量是增加了还是减少了。这同样没有意义,也没有任何价值。
同意大牛的任命,这对开发者来说似乎毫无意义。但是,如果有人想要这个数据,当然可以解析它。
首先,我们需要知道这个任务是根据什么编译的。我们已经在 github: WindowsMachineFileCopyV2 中公开了这个任务的源代码。可以看到这个任务是用[=11=]来实现文件复制的
那么,现在,您的难题可以考虑为 如何读取 Robocopy 输出并将其存储为变量。
我想你已经知道似乎没有办法直接对这个任务输出做任何操作。因此,首先,您可以将 /log:{file path}
指定到此 Windows 机器复制文件任务的参数中。
日志看起来像这样:
目前,解析出准确的值并将其存储到变量中非常容易。只需要编写一个脚本来读取值并存储它。我曾经提供过类似的 ,其中关于如何从 shell 输出中编译出值。
此外,您可以查看此 script 以获取更多参考。
## Create Powershell object to tally Robocopy results
$row = "" |select COPIED, MISMATCH, FAILED, EXTRAS
$row.COPIED = [int](($robo_arr[1] -split "\s+")[4]) + [int](($robo_arr[2] -split "\s+")[4])
$row.MISMATCH = [int](($robo_arr[1] -split "\s+")[6]) + [int](($robo_arr[2] -split "\s+")[6])
$row.FAILED = [int](($robo_arr[1] -split "\s+")[7]) + [int](($robo_arr[2] -split "\s+")[7])
$row.EXTRAS = [int](($robo_arr[1] -split "\s+")[8]) + [int](($robo_arr[2] -split "\s+")[8])
首先我要说我不知道这是否可能,但我希望它是。
我在 Azure Devops 中有几份工作 运行 "Windows Machine File Copy" 任务。 Documentation here.
在任务日志的末尾,有一个显示文件总数的输出...
2019-12-06T20:42:33.2991058Z ------------------------------------------------------------------------------
2019-12-06T20:42:33.2992182Z
2019-12-06T20:42:33.2994274Z Total Copied Skipped Mismatch FAILED Extras
2019-12-06T20:42:33.2995919Z Dirs : 29 28 0 0 0 0
2019-12-06T20:42:33.2997487Z Files : 361 361 0 0 0 0
2019-12-06T20:42:33.2999056Z Bytes : 89.96 m 89.96 m 0 0 0 0
2019-12-06T20:42:33.3000612Z Times : 0:00:03 0:00:02 0:00:00 0:00:00
2019-12-06T20:42:33.3000997Z
2019-12-06T20:42:33.3002124Z
2019-12-06T20:42:33.3003761Z Speed : 31614545 Bytes/sec.
2019-12-06T20:42:33.3005534Z Speed : 1808.998 MegaBytes/min.
2019-12-06T20:42:33.3006054Z Ended : Friday, December 6, 2019 2:42:33 PM
2019-12-06T20:42:33.3006989Z
2019-12-06T20:42:33.3049176Z Copying recursively from...
这个值是否作为变量存储在任何地方?有没有人能够使用这样的日志以编程方式解析来自它们的信息?
您可能会编写一些使用 REST APIs 来检索发布日志的东西。或者您可以只查看 $(System.DefaultWorkingDirectory)
.
但我会强烈反对这个指标,因为它完全没有意义。不只是对开发人员。给大家。审计员、经理、开发人员、QA 测试人员;选择一个角色,这对担任该角色的人来说毫无意义。无论他们认为这是在衡量什么,它都不是在衡量那个东西。
如果这个想法是要衡量 "size" 或发布背后的风险,那是完全错误的;一个大的变化可能只涉及很少的文件(甚至 删除 个文件),而一个小的变化仍然可以覆盖大量文件。
事实上,您最有可能看到的是 每次 运行 发布 时每个文件都会更新,因为时间戳不同; robocopy 不对 CRCs/hashes 进行操作,它对时间戳进行操作。因此,您真正发现的只是文件数量是增加了还是减少了。这同样没有意义,也没有任何价值。
同意大牛的任命,这对开发者来说似乎毫无意义。但是,如果有人想要这个数据,当然可以解析它。
首先,我们需要知道这个任务是根据什么编译的。我们已经在 github: WindowsMachineFileCopyV2 中公开了这个任务的源代码。可以看到这个任务是用[=11=]来实现文件复制的
那么,现在,您的难题可以考虑为 如何读取 Robocopy 输出并将其存储为变量。
我想你已经知道似乎没有办法直接对这个任务输出做任何操作。因此,首先,您可以将 /log:{file path}
指定到此 Windows 机器复制文件任务的参数中。
日志看起来像这样:
目前,解析出准确的值并将其存储到变量中非常容易。只需要编写一个脚本来读取值并存储它。我曾经提供过类似的
此外,您可以查看此 script 以获取更多参考。
## Create Powershell object to tally Robocopy results
$row = "" |select COPIED, MISMATCH, FAILED, EXTRAS
$row.COPIED = [int](($robo_arr[1] -split "\s+")[4]) + [int](($robo_arr[2] -split "\s+")[4])
$row.MISMATCH = [int](($robo_arr[1] -split "\s+")[6]) + [int](($robo_arr[2] -split "\s+")[6])
$row.FAILED = [int](($robo_arr[1] -split "\s+")[7]) + [int](($robo_arr[2] -split "\s+")[7])
$row.EXTRAS = [int](($robo_arr[1] -split "\s+")[8]) + [int](($robo_arr[2] -split "\s+")[8])