0

の値を資格情報として使用して 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
4

1 に答える 1