【发布时间】:2019-10-07 14:22:57
【问题描述】:
我正在尝试在发布时获取部署池中代理的状态。 用例是我有 2 台带有共享磁盘的服务器,我希望该版本仅在一台服务器上运行。我有两个基于自定义条件运行的部署组:
eq(variables['DeployGroupSelector'], '1')
在确定 DeployGroupSelector var 值的作业之前运行的作业,本质上是一个 case 语句。
在设置 var 的工作中,我正在尝试联系 Azure DevOps REST API:
$headers = @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
$url = "https://dev.azure.com/$($organization)/_apis/distributedtask/pools/$($poolId)/agents?api-version=5.1"
$response = Invoke-RestMethod $url -Headers $headers -Verbose
write-host "Output: $response"
$status = ($response.value | where {$_.name -eq $($env:primaryPoolName)}).status
if($status -eq "online")
{
Write-Output("##vso[task.setvariable variable=DeployGroupSelector;]1")
}
else
{
Write-Output("##vso[task.setvariable variable=DeployGroupSelector;]2")
}
对于包含上述脚本的组,选中“允许脚本访问 OAuth 令牌”框。
当我使用 PAT 在本地运行这个 powershell 时,它会返回数据。当我在 ADO 中运行发布时,它会访问服务,但返回一个空数据集:
2019-10-07T14:16:18.8942915Z VERBOSE: GET https://dev.azure.com/xxxxxx/_apis/distributedtask/pools/13/agents?api-version=5.1 with 0-byte payload
2019-10-07T14:16:19.3235204Z VERBOSE: received 22-byte response of content type application/json
2019-10-07T14:16:19.9626359Z VERBOSE: Content encoding: utf-8
2019-10-07T14:16:19.9835101Z Output: @{count=0; value=System.Object[]}
我已尝试为“项目集合构建服务帐户”组授予对池和组的读取权限,我什至尝试将其授予用户。我尝试添加构建服务帐户组以发布管理员。我什至尝试使用旧的 url 格式以防万一。
添加了powershell返回的数据图片:
更新:为了进一步排除我如何使用令牌的问题,我向相关任务组添加了第二个 powershell 任务。此脚本会命中 AzDO Rest API 的不同部分(如下)。这成功地得到了响应。所以 OAuth 令牌正在工作,它似乎无法访问整个 API。
$标头 = @{ 授权 = "承载 $env:SYSTEM_ACCESSTOKEN" }
$url = "https://dev.azure.com/$($organization)/$($project)/_apis/git/repositories?api-version=5.1"
$response = Invoke-RestMethod $url -Headers $headers -Verbose
write-host "Output: $($response)"
回复:Output: @{value=System.Object[]; count=10}
【问题讨论】:
-
从哪里获得
$pooId? -
我去了 UI 中的部署池,选择了池,并从 URI 中获取了 ID。也可以通过rest api查询。
-
我问是因为还有具有不同 id 的代理队列和代理池的 api。我无法重现您的问题,在我的发布中,我得到了响应中的代理。
-
您能否在此处上传您的 PowerShell 脚本结果的屏幕截图,其 URL 与发布所执行的 URL 相同?
-
添加图片..
标签: azure-devops release azure-devops-rest-api