【发布时间】:2016-06-14 23:33:09
【问题描述】:
我想增强发布定义,这样我就不需要一个只启动 Azure VM 的单独环境。
如果我们假设我们有测试、Beta 和生产环境。客户希望将应用程序安装在其本地网络上的 Beta 版和生产版中。我们在内部想要一个测试环境来运行 E2E 测试,允许非技术人员在不需要 VPN 访问客户测试环境的情况下使用应用程序等。
所以这里我们有环境,然后是代理运行的位置:
Test - Azure VM
Beta - Client machine
Production - Client machine
我们解决这个问题的方法是在客户端的机器上安装 VSTS 代理,这样我们就可以在为该版本定义的 Beta 和生产环境中定位该代理队列。然后,我们通常会构建一个 Azure VM,并将该代理队列作为测试环境的目标。
我们不想 24/7/365 运行该 Azure VM。但是,如果它没有运行,那么它就无法响应来自发布管理的请求。
我所做的是创建一个名为Start Test VM 和Stop Test VM 的环境,它们使用Azure Resource Group Deployment 来启动和停止VM。这 2 个额外的环境可以将其代理队列设置为 Hosted。
我想弄清楚如何将前 3 个环境组合成一个逻辑 Test,而不必创建 3 个发布管理环境。
Start Test VM - Hosted
Test - Azure VM
Stop Test VM - Hosted
Beta - Client machine
Production - Client machine
问题是,当我在 3 个月后回过头来想“这到底是什么环境?哦,这只是开始/停止虚拟机。”
选项:
- 保持现状 - 保持现状,无法修复
- 我们可以在 Azure VM 上打开一个端口并使用 Powershell 远程处理。然后在托管代理或本地代理上运行以启动 VM,然后部署应用程序,然后停止 VM。 - 我们真的不喜欢这个,因为部署与客户端本地部署不同。我们希望每个环境的任务都相同,只是变量不同。
【问题讨论】:
-
测试环境是否由 Azure 托管?如果是,为什么不直接通过托管代理将构建部署到它?
-
测试环境由 Azure 托管。所以你提倡选项#2?这将涉及使用 powershell 远程处理,并且构建步骤会有所不同,不是吗?例如,我们有一堆用于 Web 应用程序的文件 - 在客户端环境中,我们只是通过 UNC 路径将这些文件复制到目标计算机,在 Azure 中,您无法通过 UNC 将文件从托管代理复制到您的 Azure VM .
-
您可以使用“AzureVMs 文件复制”任务将文件复制到 Azure VM。
-
好的,解决了问题一。现在我们需要配置诸如幂等脚本之类的东西来创建 IIS 应用程序池(如果它不存在),在其上设置 Windows 身份验证,发布 dacpac 等。当它从正在安装的机器的上下文中执行时,即。从 VM 上的 VSTS 代理运行脚本看起来是一种方式。当 VSTS 代理处于托管状态并尝试远程控制虚拟机时,脚本看起来会有所不同吗?
-
等等...如果是iirc,在远程处理时您可以向它传递一个脚本,并且该脚本会被物理复制到远程计算机,然后从该远程计算机执行,就像您直接执行一样...这可能可行,这样部署应用程序的脚本集将是相同的,除了“测试”环境将有一个“包装器”脚本,该脚本将使用远程复制脚本。
标签: azure-devops ms-release-management