我可以在VSTS中将现有Azure VM注册为构建代理。构建工作正常,但我想打开和关闭机器只有有任何工作。有没有办法如何打开虚拟机,如果我看到队列中有一些工作,然后如果队列闲置让我们说5分钟就关掉它?
答案 0 :(得分:1)
在VSTS中构建时,没有好的方法来启动/停止azure VM。关于WebHook,没有队列构建的事件,对于其他事件,它们不满足许多要求(例如,非CI构建,手动构建队列)
我建议您使用托管代理,使用免费托管管道,每月可获得4小时(240分钟),每次构建或部署最多可持续30分钟。
How to buy more pipeline capacity for builds and releases in Visual Studio Team Services
解决方法:
更多信息,请参阅:How to Create a Monster Build Agent in Azure for Cheap
答案 1 :(得分:1)
我想知道这是否对您有帮助,因为这与您要求的不完全相同。我在构建之前和构建之后使用REST API调用来启动然后停止特定的VM。了解如何start和power off在API 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。
添加一个代理作业以在托管虚拟机的情况下运行该作业。然后使用所有构建步骤作为自托管(私有)。
添加您的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,因为启动/关闭会产生相关的时间成本。