$(System.AccessToken)
尝试使用 的值作为凭据访问 REST API 时,我得到了 401(大概) 。我正在运行的管道与我正在使用的 API URL 位于同一 ADS 2020 本地服务器上。
构建日志中的错误消息如下所示:
TF400813: 资源不可用于匿名访问。需要客户端身份验证。- Azure DevOps 服务器
受此技术的启发,以下是我的 PowerShell 内联脚本任务中的代码:
$Params = @{
ContentType = 'application/json'
Headers = @{ Authorization = 'Bearer $(System.AccessToken)' }
Method = 'Get'
Uri = 'http://host/collection/project/_apis/build/builds/' + $(Build.BuildId) + '?api-version=6.0'
}
$Result = Invoke-RestMethod @Params
我也试过这个,借用这个答案:
$Params = @{
ContentType = 'application/json'
Method = 'Get'
Uri = 'http://$(System.AccessToken)@host/collection/project/_apis/build/builds/' + $(Build.BuildId) + '?api-version=6.0'
}
$Result = Invoke-RestMethod @Params
我已经注意打开该Allow scripts to access the OAuth token
选项,如此处所述。
奇怪的是它第一次工作(上面的第一个代码块)。现在,无论我尝试什么,我总是会收到上述错误。
如何使用$(System.AccessToken)
Build 任务中的值来访问同一服务器上的 REST API?
- 编辑 -
我也尝试过备用变量语法:
$BuildId = $env:BUILD_BUILDID
$Token = $env:SYSTEM_ACCESSTOKEN
$Params = @{
ContentType = 'application/json'
Headers = @{ Authorization = 'Bearer $Token' }
Method = 'Get'
Uri = 'http://host/collection/project/_apis/build/builds/' + $BuildId + '?api-version=6.0'
}
$Result = Invoke-RestMethod @Params