我们在AzureDevOps中有多个自托管的生成代理,我想自动进行维护。 (诸如Windows更新或VSbuild工具之类的东西)
我想禁用池中的代理,以便在运行更新时它不接收构建任务。
有人知道如何通过命令行吗?
答案 0 :(得分:1)
有人知道如何通过命令行吗?
您可以在本地计算机上使用Powershell.exe(Cmd.exe is not recommended for calling azure devops rest api
来代替CMD,以通过此rest api禁用任何自托管代理:
Patch https://dev.azure.com/{OrganizationName}/_apis/distributedtask/pools/{PoolID}/agents/{AgentID}?api-version=5.0
请求正文:
{
"id":{AgentID},"enabled":false
}
详细信息:
转到“组织设置” =>“代理程序池” =>“选择用于托管自托管代理程序的池” =>选中“ Agents
”选项卡,然后单击其中一个代理程序以查看详细信息。然后您可以找到PoolID
和AgentID
。
现在,让我们创建一个PAT来向Azure DevOps进行身份验证。仅Agent Pools的“读取和管理”访问权限就足够了。
假设我的organizationName是TestOrganization
,那么我最终的powershell脚本将是:
(您可以在Windows Powershell ISE中运行它)
$token = "wjqtxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtgiga"
$url="https://dev.azure.com/TestOrganization/_apis/distributedtask/pools/10/agents/9?api-version=5.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @'
{
"id":9,"enabled":false
}
'@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Patch -ContentType application/json -Body $JSON
write-host $response | ConvertTo-Json -Depth 100
使用$ token(您的PAT),PoolID和AgentID,您可以通过enabled/disabled
轻松地控制哪个代理为"enabled":xxx(true or false here)
。请注意,您需要同时替换URL和Request正文中的agentID
。