2

プールからエージェントを一時的に削除し、エージェントが存在するビルドサーバーに新しいソフトウェアをインストールし、それが機能することをテストしてから、エージェントをプールに再度追加する作業を行っています。

PowerShell を使用して、またはそれが不可能な場合は C# を使用してプログラムで実行したいと思います。

問題は、TFS REST API または Visual Studio に付属のツールを使用して、これを行うのに役立つドキュメントが見つからないことです。

だから私は具体的に尋ねています:

名前付きエージェントをビルド プールから削除する方法と、名前付きエージェントをビルド プールに戻す方法を教えてください。

基本的に、TFS の Web 管理に移動し、プール内のエージェントのチェックを解除/チェックするのと同じ機能が必要です。

starain-msft から提供された情報を使用してエージェントを有効/無効にしようとすると、次のエラーが表示されます。

Invoke-RestMethod :
404 - File or directory not found.
Server Error

問題が会社のプロキシにあることがわかったので、後でエラーの多くを削除しました。こちらをお読みください: Azure DevOps Services REST API リファレンス

しかし、starain-msft の助けを借りて動作するようになりました。

最終的な解決策は次のようになります。

Function TFSwebRequest {
    param
    (
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true)]
        [string] $Uri,

        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true)]
        [string] $Method,

        [ValidateNotNullOrEmpty()]
        [string] $ContentType,

        [ValidateNotNullOrEmpty()]
        [string] $ContentBody,

        [ValidateNotNullOrEmpty()]
        [System.Net.WebHeaderCollection] $Headers
    )

    # Creating Webrequest from 'Uri'
    $webRequest = [System.Net.HttpWebRequest]::CreateHttp($Uri)

    $webRequest.UseDefaultCredentials = $true
    $webRequest.Method = $Method
    if ($Headers.Count -ne 0) {
        $webRequest.Headers = $Headers
    }
    if (![string]::IsNullOrEmpty($ContentType)) {
        $webRequest.ContentType = $ContentType
    }
    if (![string]::IsNullOrEmpty($ContentBody)) {
        $Body = [byte[]][char[]]$ContentBody
        $Stream = $webRequest.GetRequestStream();
        $Stream.Write($Body, 0, $Body.Length);
    }

    # Get webresponse to a variable
    try {
        [System.Net.WebResponse]$webResponse = $webRequest.GetResponse()
    }
    catch {
        $ErrorMessage = $_.Exception.Message
        Write-Host "TFSwebRequest Failed = " $ErrorMessage -ForegroundColor Red
    }

    # Stream webresponse to a string
    $webResponseStream = $webResponse.GetResponseStream()
    $streamReader = New-Object System.IO.StreamReader $webResponseStream
    $result = $streamReader.ReadToEnd() | ConvertFrom-Json

    return ,$result
}

$agentUri = "http://teamfoundation:8080/tfs/Main/_apis/distributedtask/pools/$($poolID)/agents/$($agentID)?api-version=2.3-preview.1"
$contentBody = @"
{
    "maxParallelism": 1,
    "id": INSERTID,
    "enabled": true #Or false
}
"@

$headers = New-Object System.Net.WebHeaderCollection
$headers.Add("X-HTTP-Method-Override", "PATCH")

TFSwebRequest -Uri $agentUri -Method "POST" -Headers $headers -ContentType "application/json" -ContentBody $contentBody
4

2 に答える 2

0

エージェント プールからエージェントを作成または削除する API はありません。また、独自のスクリプトを作成する必要はありません。エージェントをダウンロードしたら、管理者としてコマンド プロンプトを実行ConfigureAgent.cmdし、ビルド エージェント マシンで実行するだけです。

C:\Agent\ConfigureAgent.cmd

次に、プロンプトに応答します。TFS 2015 の Windows にエージェントを展開するにチェックを入れます

于 2016-12-21T05:59:38.007 に答える