在VSTS中自动启动/停止现有Azure VM作为构建代理

时间:2017-09-04 06:28:47

标签: azure azure-devops azure-pipelines

我可以在VSTS中将现有Azure VM注册为构建代理。构建工作正常,但我想打开和关闭机器只有有任何工作。有没有办法如何打开虚拟机,如果我看到队列中有一些工作,然后如果队列闲置让我们说5分钟就关掉它?

4 个答案:

答案 0 :(得分:1)

在VSTS中构建时,没有好的方法来启动/停止a​​zure VM。关于WebHook,没有队列构建的事件,对于其他事件,它们不满足许多要求(例如,非CI构建,手动构建队列)

我建议您使用托管代理,使用免费托管管道,每月可获得4小时(240分钟),每次构建或部署最多可持续30分钟。

How to buy more pipeline capacity for builds and releases in Visual Studio Team Services

解决方法:

  1. 在指定时间构建队列,例如,周一和周四上午7:00,然后您可以自动启动并自动关闭VM
  2. 在托管代理上运行(执行Powershell以启动VM)=>在私人代理上运行
  3. 更多信息,请参阅:How to Create a Monster Build Agent in Azure for Cheap

答案 1 :(得分:1)

我想知道这是否对您有帮助,因为这与您要求的不完全相同。我在构建之前和构建之后使用REST API调用来启动然后停止特定的VM。了解如何startpower offAPI documentation中的VM。

第一步,我创建了一个无代理作业,任务是调用REST API 。该任务使您可以对Azure帐户进行身份验证,因此您不必手动进行处理。您所要做的就是指定URL后缀。例如,要启动一个名为MyVm的VM,您可以添加类似于以下内容的后缀:

  

/ subscriptions / subscription-id / resourceGroups / 资源组名称 / providers / Microsoft。 Compute / virtualMachines / MyVm / 开始?api-version = 2018-06-01

可以在Azure的虚拟机的“概述”页面中验证订阅ID和资源组的地方。

构建后,您可以添加另一个无代理作业,但是这次使用 powerOff 端点的REST调用:

  

/ subscriptions / subscription-id / resourceGroups / 资源组名称 / providers / Microsoft。 Compute / virtualMachines / MyVm / powerOff ?api-version = 2018-06-01

答案 2 :(得分:1)

从头开始添加托管代理作业以启动VM,并在末尾添加代理作业或其他步骤以关闭VM。

添加一个代理作业以在托管虚拟机的情况下运行该作业。然后使用所有构建步骤作为自托管(私有)。

enter image description here

添加您的Azure订阅

选择内联脚本以添加以下内容以虚拟机名称和资源组启动它

start-AzureRmVM -Name ""-ResourceGroupName ""

添加另一个代理作业或其他步骤作为最后一步 构建完成后关闭虚拟机。 使用以下脚本

stop-AzureRmVM -Name ""-ResourceGroupName "" -Force

答案 3 :(得分:0)

您可以尝试在VSTS中使用WebHook,并选择最合适的事件(如推送的代码或创建的版本)。在Visual Studio Team Services中打开团队项目的管理页面,在Service Hooks选项卡上,运行订阅向导,选择您感兴趣的事件,并填写相关标准。

然后您可以使用Azure Automation Runbook to subscribe to the WebHook,并使用PowerShell使用构建VM(如果已经启动)或启动它。您可以使用另一个WebHook来表示构建已完成,或者通过其各种API从VM发出poll VSTS

您可能希望在构建后延迟关闭VM,因为启动/关闭会产生相关的时间成本。