【问题标题】:Is it possible to modify the display name of the build policy at runtime?是否可以在运行时修改构建策略的显示名称?
【发布时间】:2019-12-30 03:05:34
【问题描述】:

在 TFS / Azure DevOps 中为某个分支配置构建策略时,可以输入Display name,这显然定义了它在评估期间在拉取请求上的显示方式:

我想在运行时修改这个值,最好是从 PowerShell 构建步骤。

我尝试使用 REST API 更新拉取请求策略状态,但显然,构建策略评估并非源自状态 - 至少,在 List 操作的响应中没有相应的状态。

似乎Evaluations 与此有些相关,但我只能看到read 那里的操作。

我希望能提示您是否可以修改显示名称,如果可以,如何修改。我的 TFS 版本是 2018,更新 2。

【问题讨论】:

  • 您的意思是要在验证一个拉取请求期间覆盖特定的构建策略名称吗?为什么要这样做?
  • 是的,完全正确 - 覆盖构建策略名称!我的 PowerShell 脚本验证了一些 git 特定的东西,例如是否需要 rebase,或者 PR 是否包含一些尾随空格,或者提交是否包含 fixup! / squash! cmets 等。这个检查列表未来可能会增长。我想显示 3 out of 5 checks failed 之类的内容,而不是初始显示名称。我知道我可以将脚本拆分为多个构建定义,但这并不优雅。

标签: git tfs pull-request


【解决方案1】:

首先,目前无法按照官方文档来实现。

正如您所提到的,Evaluations Rest API 中没有更新方法。

还通过Logging commands 检查是否有类似##vso[build.updatebuildnumber]build number / ##vso[release.updatereleasename]release name 使用更新当前版本的版本号/更新当前版本的版本名称,这也可以在当前版本期间更新策略名称。没有找到那种命令。


但是,我还进行了手动测试,将构建排队等待构建验证策略,该策略在活动拉取请求中命名为 test1test2

在构建运行期间,手动将该策略的显示名称从 test1 更新/更改为 Web 门户中的 zero。 在浏览器中刷新拉取请求页面后,您将看到

构建完成后,策略的显示名称也会更新。

所以结论是:我们可以做到这一点。一些相关的 REST API 可能没有记录。对于这些,我们可以使用Fiddler 等工具或直接在Chrome 中按F12 - network 来跟踪它们。希望这会有所帮助或给出正确的方向。

【讨论】:

  • 感谢您的信息!这绝对指出了挖掘的方向。当(或如果)我在这里取得一些进展时,我会回来提供详细信息。
  • 嗨,Yan Shlyarenko,您有机会实施建议的解决方案吗?你能解决吗?
  • 说实话,我最终选择了不同的路线。我没有在拉取请求验证期间更新构建策略名称,而是修改了 PowerShell 步骤以发送拉取请求状态,每次脚本检查一个。因此,我有正常的构建策略,要么失败,要么成功,以及下面的许多状态,每个检查一个,显示每个检查的确切状态。我目前正在一个真实项目中测试该解决方案。一旦我对结果感到满意,我将在此线程上发布一个单独的答案以分享知识。谢谢你的提问,顺便说一句:-)
  • 正如承诺的那样,我在回答中描述了我最终得到的过程。再次感谢您的帮助!
【解决方案2】:

正如我在my other comment 中提到的,我最终采用了一种略有不同的方法。为了更清楚地了解流程中正在执行的步骤,脚本会将拉取请求状态发送回拉取请求,每次检查一个。

因此,基本上,每项检查的结构如下:

  • 将检查的初始状态定义为succeeded
  • 执行检查,如果不满足检查条件,将状态更新为failed
  • 将状态发布回拉取请求(来自 PowerShell 的 REST API 调用)

例如,在我的案例中,其中一项检查是 fixup!squash! 提交消息的存在。以下代码代表上述流程:

$fixupStatus = "succeeded"
"fixup!", "squash!" | Foreach-Object {
    $fixups = git log $sourceCommit $targetCommit --grep="$_" --oneline
    if ($fixups.Count -ne 0) {
        Print-Error("'$_' commits detected!:`n    $([system.String]::Join(`"`n    `", $fixups))")
        $fixupStatus = "failed"
        $exitCode += 1
    }
}
Post-PullRequestStatus -name "git-fixup-status" -description "Git Fixup Check" -state $fixupStatus

Post-PullRequestStatus 的代码如下所示:

function Post-PullRequestStatus {
    param (
        [string]$name,
        [string]$description,
        [string]$state,
        [string]$genre = "git-health-check"
    )

    $body = @{
        state       = $state
        description = $description
        context     = @{
            name  = $name
            genre = $genre
        }
    } | ConvertTo-Json

    Send-Request -method "POST" -Body $body | Out-Null
}

最终结果如下所示:

我在the blog post中概述了更多细节。

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 2011-07-16
    • 2017-04-26
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多