启动和停止 Azure VM 的推荐版本定义是什么?

What is the recommended release definition for starting and stopping an Azure VM?

我想增强发布定义,这样我就不需要单独的环境来启动 Azure VM。

如果我们假设我们有测试、测试和生产环境。客户希望将应用程序安装在其本地网络上的测试版和生产版中。我们内部需要一个测试环境来 运行 E2E 测试,允许非技术人员在不需要 VPN 访问客户 beta 环境的情况下使用应用程序,等等。

所以这里我们有环境,然后是代理所在的位置 运行ning:

Test - Azure VM Beta - Client machine Production - Client machine

我们解决此问题的方法是在客户端的计算机上安装 VSTS 代理,这使我们能够在为该版本定义的 Beta 和生产环境中定位该代理队列。然后我们通常会构建一个 Azure VM 并将该代理队列作为测试环境的目标。

我们不想 运行 Azure VM 24/7/365。但是,如果不是 运行ning,则它无法响应发布管理的请求。

我所做的是创建一个名为 Start Test VMStop Test VM 的环境,使用 Azure Resource Group Deployment 启动和停止虚拟机。这 2 个额外的环境可以将其代理队列设置为 Hosted

我想弄清楚如何将前 3 个环境组合成一个逻辑 Test 而不是必须创建 3 个发布管理环境。

Start Test VM - Hosted Test - Azure VM Stop Test VM - Hosted Beta - Client machine Production - Client machine

问题是当我在大约 3 个月后回过头来想 "What the hell is this environment? Oh it's just there to start/stop the VM."

时,将其交给我们的一位 PM 甚至我自己时可能会相当丑陋和混乱

选项:

  1. 保持现状 - 保持现状,无法修复
  2. 我们可以在 Azure VM 上打开一个端口并使用 Powershell 远程处理。然后 运行 在托管代理或本地代理上启动 VM,然后部署应用程序,然后停止 VM。 - 我们真的不喜欢这样,因为部署与客户端本地部署不同。我们希望每个环境的任务都相同,只是变量不同。

您可以使用 "Azure PowerShell" 和 "Azure SQL Database Deployment" 任务来配置您的 Azure VM 和 SQL 或调用其他脚本 运行 在 Azure VM 上。

无法为任务设置代理。您可以为此在 VSTS User Voice 上提交功能请求。

另一种减少环境的方法是:如果您部署链接到发布的每个构建,那么您可以将 "Start Test VM" 任务添加到您的构建定义中以在构建成功时启动 VM 并添加 "Stop Test VM" 任务进入 "Beta" 环境。

我们目前确定的是继续拥有一个 environment 这并不是我真正认为的环境,而是更多的 stage 在开始的发布管道中and/or 关闭虚拟机。我们 运行 在 hosted 代理上,以便它可以启动 VM 并确保在 environment.

上检查 Skip artifacts download

对于持续集成构建,我们设置了一条链,以便 VM 启动,CI environment 启动,然后 VM 停止。然后根据需要手动将剩余的 environments 部署到链上。

下面是一个例子:

  • 启动CI虚拟机
  • CI
  • 停止CI虚拟机
  • 测试版
  • 生产

这是截至 2016 年 6 月 27 日在发布管理中的外观图片:

我在 environment 周围加上了单引号,因为我认为我同意 this user voice request 的观点,它实际上更像是发布管道中的一个阶段。就像数据库开发一样,逻辑和物理不一定是 1 对 1 的映射。