此问题可能与Azure虚拟机无关,但我希望Azure提供的方式比Amazon EC2更容易。
我在多个Azure虚拟机上运行长时间运行的应用程序(即不是Azure网站或[Paas]角色)。它们是简单的控制台应用程序/ Windows服务。有时,我会进行代码刷新,需要停止这些过程,更新代码/二进制文件,然后重新启动这些过程。
过去,我曾尝试使用PSTools( psexec )来远程执行此操作,但这似乎是一种黑客攻击。有没有更好的方法来远程终止应用程序,刷新部署并重新启动应用程序?
理想情况下,Visual Studio中会有一个“发布控制台应用程序”等同于允许我将代码部署为Azure网站,但我猜这不是可能的。
非常感谢任何建议!
答案 0 :(得分:4)
有许多“正确”的方法可以完成你的任务。
如果您运行的是Windows Azure应用程序 - MSDN上有一个简单的指南。 但是,如果你必须使用常规控制台应用程序 - 你有问题。
Microsoft方式是使用WMI - 适用于任何类型的远程Windows服务器管理的好技术。我想WMI应该适合你的目的。
最后一种方法:在每个Azure VM上安装Git并编写简单的服务器端脚本,计划每5分钟运行一次,以便从存储库更新代码,构建它,终止旧进程并启动新进程。将更新发布到存储库,这就是全部。 绝对是破解,但它甚至适用于非Windows机器。
答案 1 :(得分:3)
一种常见模式是在Windows Azure Blob存储中存储项目,例如命令行应用程序。我经常这样做(例如:我将所有MongoDB二进制文件存储在blob中,压缩,每个版本使用一个zip#)。在VM启动时,我有一个任务,将zip从blob下载到本地磁盘,解压缩到本地文件夹,并启动mongod.exe进程(这同样适用于其他控制台应用程序)。如果安装更复杂,则需要使用MSI或其他类型的自动安装程序。关于在blob存储中存储这些应用程序的两个好处:
更新控制台应用时:您可以将新版本上传到blob存储。现在,您有几种方法可以通知我的VM进行更新。例如:
这些都适用于独立的exe(或xcopy-deployable exe)。对于需要管理员级权限的MSI,这些需要通过启动脚本运行。在这种情况下,您可以进行配置更改事件,该事件将由您的角色实例处理(如上所述),但您只需重新启动实例,允许它们通过启动脚本运行MSI。
答案 2 :(得分:1)
你可以
host
将包下拉(并解压缩)到远程文件夹 host
从包内容运行install.ps1
(即下载和配置)。可以使用Enter-PSSession -ComputerName $env:COMPUTERNAME
同样的方法来快速部署本地构建策略,这意味着您正在使用相同的策略来开发,生成并测试la Continuous Delivery。
您可以在以后执行的潜在优化(如果需要)是(对于本地版本)来删除步骤2和3,即假装您已打包,上传,下载和解压缩,只需提供打包文件夹以远程文件夹的形式安装到install.ps1,并在非远程会话中以交互方式运行install.ps1
。
上述主题的一个常见变体是使用高效的文件传输和版本控制机制,如git(或(shudder)TFS!),以实现“在构建结束时推送到某处”和“在部署开始时拉动”练习的一部分(Azure网站提供了内置的TFS或git端点,这使得每个'push'隐含地在远端包含'pull')。
如果您的代码是xcopy deployable(并且复制了影子),您甚至可以在git中拥有一个完整的应用程序映像,只需执行git pull来更新您的站点(有或没有包含PowerShell Remoting执行的第4步) install.ps1
)。