Theo Eduardo Aquiles, nếu bạn định cấu hình máy chủ TeamCity của mình để hỗ trợ xác thực HTTP NTLM (TeamCity 8.x NTLM HTTP Authentication), bạn có thể nhận cookie phiên (TCSESSIONID) từ url /ntlmLogin.html và sử dụng để xác thực đối với API REST.
Tôi vừa phải làm điều gì đó tương tự để nhận trạng thái được gắn của các bản dựng. Đây là PowerShell tôi đã sử dụng:
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;
Lưu ý: Tôi không chắc chắn nếu điều này được hỗ trợ chính thức bởi JetBrains, vì vậy bạn có thể tìm thấy nó phá vỡ trong một phiên bản tương lai của TeamCity, nhưng nó hiện đang làm việc với phiên bản 8.0.2 (xây dựng 27482).
Làm cách nào để giữ cho chúng luôn mới mẻ? – abourget
Làm cách nào để giữ cho cookie luôn tươi mới? Chúng tôi không thực hiện bất kỳ kết nối dài hạn nào với TC, vì vậy chúng tôi chưa bao giờ đến mức cookie không còn hợp lệ nữa. Nhưng nếu chúng tôi phải làm vậy, chúng tôi sẽ cần kiểm tra và trong trường hợp 401, chúng tôi sẽ gửi lại thông tin đăng nhập. BTW, tôi không làm việc với TeamCity trong 2 năm nay, vì vậy tôi không biết liệu giải pháp đó vẫn áp dụng hay không. –