使用类似信号量的条件进行管道作业排队

时间:2020-11-12 09:53:08

标签: azure-devops azure-devops-self-hosted-agent flexlm

我们为更昂贵的编译器/工具使用浮动许可证,以便我们可以进行本地开发以及生产构建。许可证管理器(flexLM)有一个我们可以查询的api,因此我们可以阻止许可证。但是,我找不到一种机制,可以根据辅助变量的状态或脚本的返回值或类似的东西使我的管道排队。

这意味着我可以在安装了编译器的任何计算机上启动构建,但是如果没有可用的许可证,则构建将失败,并且必须重新启动管道。如果我自动执行此操作,那么我将有效地阻止该计算机,直到获得许可证为止。

我错过了什么可以实现“排队直到获得可用许可证”的东西吗?

谢谢, 曼努埃尔

1 个答案:

答案 0 :(得分:2)

我们可以在管道定义中添加第一个任务power shell,并在变量选项卡中定义新变量,例如Value:true,然后添加脚本以检查许可证状态(如果许可证可用),请设置将变量Value设置为True,如果许可证不可用,请将变量Value设置为False。然后在第二个任务中添加条件eq(variables['{variable name}'], '{variable value}')

配置后,如果您的许可证可用,则管道将成功运行。

或者我们可以先检查许可证,然后调用以下脚本对构建管道进行排队。

$token = "$(pat)"
$url = "https://dev.azure.com/{Org name}/{project name}/_apis/build/builds?api-version=6.1-preview.6"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))


$JSON = @"
{
  "definition": {
    "id": {Build definition ID}
  }
}
"@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -ContentType application/json -body $JSON
write-host $response