【发布时间】:2017-09-04 06:28:47
【问题描述】:
我能够在 VSTS 中将我现有的 Azure VM 注册为构建代理。构建工作正常,但我只想在有任何工作的情况下打开和关闭机器。如果我看到队列中有一些工作可以打开虚拟机,然后如果队列空闲 5 分钟就关闭它,有什么方法可以打开它?
【问题讨论】:
标签: azure azure-devops azure-pipelines
我能够在 VSTS 中将我现有的 Azure VM 注册为构建代理。构建工作正常,但我只想在有任何工作的情况下打开和关闭机器。如果我看到队列中有一些工作可以打开虚拟机,然后如果队列空闲 5 分钟就关闭它,有什么方法可以打开它?
【问题讨论】:
标签: azure azure-devops azure-pipelines
我想知道这是否对您有所帮助,因为这不是您所要求的。我在构建之前和构建之后使用 REST API 调用来启动和停止特定的 VM。在API documentation 中查看如何start 和power off 虚拟机。
作为第一步,我创建了一个无代理作业,其任务名为Invoke REST API。该任务允许您对 Azure 帐户进行身份验证,因此您不必手动处理。您所要做的就是指定 URL 后缀。例如,要启动一个名为 MyVm 的 VM,您需要添加一个类似于以下的后缀:
/subscriptions/subscription-id/resourceGroups/resource-group-name/providers/Microsoft。 Compute/virtualMachines/MyVm/start?api-version=2018-06-01
订阅 ID 和资源组可以在 Azure 中虚拟机的概览页面中进行验证。
在构建之后,您可以添加另一个无代理作业,但这次使用 powerOff 端点的 REST 调用:
/subscriptions/subscription-id/resourceGroups/resource-group-name/providers/Microsoft。 Compute/virtualMachines/MyVm/powerOff?api-version=2018-06-01
【讨论】:
Connection Type的Azure Resource Manager
在 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
【讨论】:
您可以尝试在 VSTS 中使用WebHook,然后选择最合适的事件(如代码推送或发布创建)。在 Visual Studio Team Services 中打开团队项目的管理页面,在 Service Hooks 选项卡上,运行订阅向导,选择您感兴趣的事件,并填写相关条件。
然后您可以使用Azure Automation Runbook to subscribe to the WebHook 并使用PowerShell,如果它已经启动,则使用构建VM,或者启动它。您可以使用另一个 WebHook 来表示构建已完成,或者通过其各种 API 从 VM 发送poll VSTS。
您可能希望在构建后延迟关闭虚拟机,因为启动/关闭会产生时间成本。
【讨论】: