の値を資格情報として使用して REST API にアクセスしようとすると、(おそらく) 401 が返さ$(System.AccessToken)
れます。実行しているパイプラインは、使用している 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)
して、同じサーバー上の 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