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

问题描述 投票:4回答:4

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

azure azure-devops azure-pipelines
4个回答
1
投票

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

我建议您使用托管代理,使用免费的托管管道,每月可获得4小时(240分钟),每次构建或部署在Team Services中最长可达30分钟。

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

解决方法:

  1. 队列在指定时间构建,例如,周一和周四上午7:00,然后您可以自动启动并自动关闭VM
  2. 在托管代理上运行(执行Powershell以启动VM)=>在私有代理上运行

更多信息,请参考:How to Create a Monster Build Agent in Azure for Cheap


1
投票

我想知道这对你是否有帮助,因为这不是你要求的。我在构建之前和构建之后使用REST API调用来启动,然后停止特定的VM。了解如何在start中使用power offAPI 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


1
投票

将托管代理作业添加到启动以启动VM并添加代理作业或其他步骤,以在完成时关闭VM。

添加代理作业以将其作为托管来运行以启动VM。然后将所有构建步骤用作自托管(私有)。

enter image description here

添加Azure订阅

选择内联脚本以添加以下内容以使用VM名称和资源组启动它

start-AzureRmVM -Name ""-ResourceGroupName ""

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

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

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,因为启动/关闭会产生相关的时间成本。

© www.soinside.com 2019 - 2024. All rights reserved.