如何从 powershell 脚本中向 TFS vNext 报告构建进度?

How to report build progress to TFS vNext from within a powershell script?

我的 vNext 构建包含的步骤很少 - 我只是设置了一些设置并调用了主要的 Powershell 构建脚本,它在内部调用 msbuild,但它也做其他事情。

我知道 vNext 带有一个分布式 msbuild 记录器,它允许 msbuild 报告事件直到 vNext 以显示在步骤时间轴中。

这可以针对任意逻辑来完成,而不仅仅是 msbuild 吗?

编辑 1

我编写 vNext(或 Octopus)项目的哲学是尽量减少步骤数。这是因为这些步骤都是代码,但是vNext和Octopus都没有提供我写代码时期望得到的环境,具体来说:

  1. 版本控制
    • 从技术上讲,vNext 有它,但对我来说,VCS 意味着与其他版本的差异很容易。 vNext diff 充满了无关紧要的废话。仍然比 Octopus 好光年,Octopus 有 none.
  2. 代码审查
  3. 相关工作项(为什么 X 更改 Y?)
  4. 调试

对我来说,这些都是必不可少的,这就是为什么我倾向于拥有一个主构建脚本。我确实将一些事情委托给 vNext (Octopus)——比如发布工件和测试或获取源代码。但是在本地特定机器上运行的代码是我的 Powershell 脚本。

我同意建议您将构建管道进程拆分为多个 steps/tasks 以更好地查看和记录整体状态的意见。也就是说,有一种方法可以将进度报告回构建时间线。您可以使用 Azure Pipeline Tasks Logging Commands page 中记录的 ##vso[task.setprogress] 命令。以下将在 log/console 中打印进度百分比,并在时间线中的步骤名称旁边显示百分比:

$myArray = @(1..10)
foreach ($item in $myArray) {
    $simplePercentage = (($myArray.IndexOf($item)/$myArray.Length)*100)
    Write-Output ("Current Percentage: $simplePercentage")
    Write-Output ('##vso[task.setprogress value={0};]{1}' -f $simplePercentage, 'My Sample Task')
    Start-Sleep -Seconds 3
}

您可以将您的 Powershell script/functions 拆分为任何总体百分比,然后使用该日志记录命令报告各部分的进度。