我能够在VSTS中将现有Azure VM注册为构建代理。构建工作正常,但我想打开和关闭机器只有有任何工作。有没有办法如何打开虚拟机,如果我看到队列中有一些工作,然后如果队列闲置让我们说5分钟就关掉它?
在VSTS中构建时,没有好的方法来启动/停止azure VM。关于WebHook,没有队列构建的事件,对于其他事件,它们不满足许多要求(例如,非CI构建,手动构建队列)
我建议您使用托管代理,使用免费的托管管道,每月可获得4小时(240分钟),每次构建或部署在Team Services中最长可达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
我想知道这对你是否有帮助,因为这不是你要求的。我在构建之前和构建之后使用REST API调用来启动,然后停止特定的VM。了解如何在start中使用power off和API documentation VM。
我创建了一个无代理作业作为第一步,其任务名为Invoke REST API。该任务允许您对Azure帐户进行身份验证,因此您无需手动处理。您所要做的就是指定URL后缀。例如,要启动名为MyVm的VM,请添加类似于以下内容的后缀:
/subscriptions/subscription-ID/resource groups/resource-group-那么/providers/Microsoft.compute/virtual machines/my VM/start?API-version=2018-06-01
可以在Azure中的虚拟机的“概述”页面中验证订阅ID和资源组。
在构建之后,您可以添加另一个无代理作业,但这次使用powerOff端点的REST调用:
/subscriptions/subscription-ID/resource groups/resource-group-那么/providers/Microsoft.compute/virtual machines/my VM/power off?API-version=2018-06-01
您可以尝试在VSTS中使用WebHook,并选择最合适的事件(如推送的代码或创建的版本)。在Visual Studio Team Services中打开团队项目的管理页面,在Service Hooks选项卡上,运行订阅向导,选择您感兴趣的事件,并填写相关条件。
然后你可以使用Azure Automation Runbook to subscribe to the WebHook,并使用PowerShell,如果它已经启动,则使用构建VM,或者启动它。您可以使用另一个WebHook来表示构建已完成,或者通过其各种API使用来自VM的poll VSTS。
您可能希望在构建后延迟关闭VM,因为启动/关闭会产生相关的时间成本。