powershell 如何调用Azure DevOps API以实现最近一次成功的管道运行?

dly7yett  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(211)

我试图在FearNight之前完成这里所描述的操作,将其作为获取最近成功的管道运行的提交ID的一种方法,但我在API调用本身方面遇到了问题。
这里描述了API端点,如下所示:get https://dev.azure.com/{organization}/{project}/_apis/build/latest/{definition}?api-version=6.0-preview.1
我现在遇到的问题是,我不知道用什么来表示“定义”部分。所以我想我可以用这个电话列出一些关于我的构建的信息。我尝试在我的管道中使用如下代码:

- task: PowerShell@2
    inputs:
      targetType: 'inline'
      script: |
        $uri="https://dev.azure.com/mycompany/myproject/_apis/build/builds?resultFilter=succeeded&api-version=6.1"
        $builds=(Invoke-RestMethod -Uri $uri -Method GET -Headers @{ Authorization = "Bearer $(System.AccessToken)" })
        echo "Response: $builds"
        echo "Builds: $builds.Build[0].definition.name"
        # echo "name: $builds[0].definition.name"
        # echo "definition ID: $builds[0].definition.id"
        # $builds | ForEach-Object {
        #   echo "Build definition name: $_.definition.name"
        # }

不过,我一定是把这些电话编码错了,因为这是我得到的典型回应:

========================== Starting Command Output ===========================
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/2ec4dfbd-d2d6-42e4-bd9e-9dfa3bad28f0.ps1'
Response: @{count=1000; value=System.Object[]}
Builds: @{count=1000; value=System.Object[]}.Build[0].definition.name
Finishing: PowerShell

要重新阐述我的问题,我需要有关查询ADO API的语法方面的帮助,而我需要这样做,以便获得我的管道最后一次成功运行的提交ID。
有没有人能帮帮我?

编辑我现在已经让端点调用工作了(我想),因为我得到了一个响应,但我不知道如何从我的管道PS脚本中访问响应中的值。我认为要访问这些属性中的一个(例如,我需要的SourceVersion),我可以执行以下操作之一:

$response=(Invoke-RestMethod -Uri $uri -Method GET -Headers @{ Authorization = "Bearer $(System.AccessToken)" })
    echo "Response: $response"
    echo "Source version: $response.value"
    # echo "Source version: $response.Build.sourceVersion"

然而,所有这些给我的都是:

Response: @{_links=; properties=; tags=System.Object[] ... sourceVersion=fb29c721eaaaacf47f35ff900fe7086084cd321356;

如何访问和使用SourceVersion值?

d5vmydt9

d5vmydt91#

好的,要获得与您最近的管道运行相关联的提交ID,请参考以下内容,因此回答:https://stackoverflow.com/a/60500333/13761014
为了方便其他人效仿,我在下面添加了接口:

获取https://dev.azure.com/{org name}/{project name}/_traceability/runview/changes?currentRunId={build id}&__rt=fps&__ver=2

要获取最新的内部版本id,请参考此接口:https://learn.microsoft.com/en-us/rest/api/azure/devops/build/latest/get?view=azure-devops-rest-6.0
获得第一个API的响应后,您将需要查询密钥

“ms.vss-traceability-web.traceability-run-changes-data-provider”

这将为您提供存储库的ID和与构建相关联的提交ID。
希望这就是你要找的东西。

4nkexdtk

4nkexdtk2#

请使用管道的定义ID作为定义段的变量,如下所示:https://dev.azure.com/{organization}/{project}/_apis/build/latest/138?api-version=6.0-preview.1
您可以在管道的url中找到定义id:

相关问题