我正在开发一项计算服务,需要自动部署我们的软件(约 30 MB)。该软件是一项 WCF 服务,因此我只能使用 Windows。我不能使用 Mono,因为我们使用了许多未在其中实现的类。
我们可以通过默认启用的 SSH 和 SFTP 轻松地在 Linux 上进行部署。必须在 Windows 实例上手动启动 telnet 服务。有没有办法利用 RDP 来实现这一点?
我可以创建一个启用了 telnet 的 AMI。但是,这似乎有点过头了。
人们如何在默认 Windows 实例上自动部署?还是每个人都创建已安装其软件的 AMI?
答案1
对于 Windows 自动化来说,RDP 不是一个好的选择。
Windows 上 ssh 的替代方案是 WinRM - Windows 远程管理。Powershell 内置了对 WinRM 的支持。如果您使用的是 EC2(问题中未列出,但问题标记为 EC2),则 Amazon 默认 Windows 映像上启用了 powershell。您只需在安全组中打开端口 5985。
这里有一些关于如何使用 powershell 连接的说明:https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
Windows 的 SFTP 替代方案是 CIFS(Windows 文件共享),但它不是一个特别好的选择 - 该协议未加密。您还可以使用 powershell 脚本传输文件 - 请参阅此处的示例脚本:http://poshcode.org/2216
如果您愿意创建自己的 AMI,请安装 cygwin 及其 sshd 服务器。这将使您能够通过 ssh 将文件传输和远程执行到您的 Windows 实例。
答案2
RDP 可能不是实现您所寻找目标的最佳方式。PowerShell 远程处理可能是让您获得与 Linux 部署“故事”类似的体验的最佳方法。您可以在远程计算机上获取交互式 shell 会话或远程运行脚本。
习惯于在 Linux 操作系统中包含 SFTP 服务器,在 Windows 世界中进行文件传输会感觉有点像黑客攻击。
您可以直接通过互联网运行 SMB 文件共享协议,但这通常被认为有点安全风险。
RDP 协议具有内置的文件传输功能,但是以批处理/非交互方式使用 RDP 客户端将是一种不可靠的黑客行为(更不用说 RDP 中的文件传输机制本身就是一种不可靠的黑客行为)。
Powershell 本身可以从远程服务器下载文件方式类似于wget
。在工作中,我不会将任何代码部署到远程 Windows 服务器,但如果需要,我强烈建议使用此方法将代码“拉”到远程服务器,因为它仅使用内置功能。
答案3
目前尚不清楚您是否尝试自动化基础设施以及 WCF 服务部署。
代码部署
在 Windows 上,有几种方法,但恐怕没有万能的答案,而且架构与 Linux 没什么不同。您使用的工具以及 Windows 上哪些工具是现成可用的,这就是区别所在。
1) 安装 SSH、SFTP、Telenet 等之一,然后使用与现在在 Linux 上类似的方法以及批处理或 powershell。正如 Evan Anderson 所说,由于 Linux 上可用的工具,这可能会让您感觉很奇怪。
如果您使用过 Java,那么通用过程是相同的,即在部署之前需要构建代码,并且可以使用批处理脚本或 powershell 实现自动执行。
2) 更具可扩展性的方法是使用自动部署服务器(如 Octopus)(作为安装在部署目标上的代理)和可选的构建服务器(如 Jenkins 或 Bamboo)。除了将代码驻留在代码存储库(如 Git)中之外,您还可以根据 git 存储库中的特定分支进行持续集成和部署或手动自动化。
再次,通用过程与 Java 或 Linux 上的其他语言相同。