Eduardo Aquilesによれば、HTTP NTLM認証(TeamCity 8.x NTLM HTTP Authentication)をサポートするようにTeamCityサーバーを構成すると、/ntlmLogin.html URLからセッションCookie(TCSESSIONID)を取得し、これを使用してREST APIに対して認証することができます。
私はちょうどビルドの固定状態を得るために似たようなことをしなければなりませんでした。
function Get-TeamCityNtlmAuthCookie()
{
param([string] $serverUrl)
$url = "$serverUrl/ntlmLogin.html";
$cookies = new-object System.Net.CookieContainer;
$request = [System.Net.WebRequest]::Create($url);
$request.CookieContainer = $cookies;
$request.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
$request.PreAuthenticate = $true;
$response = $request.GetResponse();
return $cookies;
}
function Get-TeamCityBuildPinnedState()
{
param([string] $serverUrl, [string] $buildTypeId)
# get a session cookie to use with the rest api
$cookies = Get-TeamCityNtlmAuthCookie $serverUrl;
# query the rest api using the session cookie for authentication
$url = "$serverUrl/httpAuth/app/rest/builds/id:$buildTypeId/pin/";
$request = [System.Net.WebRequest]::Create($url);
$request.CookieContainer = $cookies;
$response = $request.GetResponse();
$stream = $response.GetResponseStream();
$reader = new-object System.IO.StreamReader($stream);
$text = $reader.ReadToEnd();
$reader.Close();
return [bool]::Parse($text);
}
$myServerUrl = "http://myTeamCityServer";
$myBuildId = "6";
$pinned = Get-TeamCityBuildPinnedState $myServerUrl $myBuildId;
write-host $pinned;
注:これは正式にジェットブレーンズによってサポートされている場合、あなたはそれがチームシティーの将来のバージョンで壊れるかもしれませんので、私は、わからないんだけど、それは現在のバージョン8.0.2に対して動作しますここで私が使用PowerShellがあります(ビルド27482)。
どのように新鮮な状態に保ちますか? – abourget
クッキーを新鮮に保つにはどうすればいいですか? TCとの長期的な接続は行っていませんでしたので、Cookieがもう有効ではないという点に決して納得できませんでした。 しかし、しなければならないのは、小切手をする必要があり、401の場合には、もう一度資格情報を送るということです。 私はTeamCityで2年間働いていないので、解決策がまだ適用されるかどうかはわかりません。 –