如何授予TFS构建代理对TFS REST API的访问权限?

时间:2018-11-08 12:21:08

标签: rest powershell tfs tfs2018 build-agent

我正在关注这个问题 Are TFS Build Agent User Capabilities' Values Obtainable Within Build Steps?,特别是Seva's answer,具有直接的REST API请求:

$tfsUrl = $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
$token = $env:SYSTEM_ACCESSTOKEN
$authExpr = "whatever:$token"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($authExpr)
$base64 = [System.Convert]::ToBase64String($bytes)
$headers = @{"Authorization" = "Basic $base64"}
$poolUrl = "${tfsUrl}_apis/distributedtask/pools/"
$response = Invoke-RestMethod $poolUrl -Headers $headers
if ($response.count -eq 0)
{
  throw "No pools are accessible. No permissions?"
}

当使用我的个人访问令牌运行时,此代码以JSON返回一组池。但是,当使用代理提供的$env:SYSTEM_ACCESSTOKEN作为构建步骤在构建代理上运行时,response.count为零,并且没有返回池。

现在,上面链接的答案表明这是预料之中的,我需要将权限授予代理用来与TFS通信的特殊用户身份。使用${tfsUrl}_api/_common/GetUserProfile REST端点(来自代理),我确认此用户确实被命名为“ Project Collection Build Service( ProjectCollectionName )”,其中 ProjectCollectionName 部分是特定于TFS实例。

因此,我要进行配置,“代理队列”,选择我的队列,“角色”,“添加”,键入直到看到“ Project Collection Build Service( ProjectCollectionName )”,然后单击它,检查“角色”是“读取者”,按添加。结果是Sorry, we couldn't add the Identity. Please try a different Identity.。如果我转到“管理池”,则会出现相同的错误。

虽然我可以使用带有用户名/密码或个人访问令牌的显式身份验证,但我真的更喜欢使用代理的身份验证,因为与存储的凭据不同,它始终可以工作-您知道密码更改,令牌过期,可能在最不方便的时刻。

那么,有可能吗?

编辑:这在TFS 2018 Update 3中发生

0 个答案:

没有答案