在Windows环境中进行部署

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

我正在寻找一种方法来设置拉动部署,与Windows下的传统推送部署模型相对应。

最佳情况是:

  • 将文件部署到主服务器
  • 子服务器将检查主服务器是否在给定时间或时间间隔内有更新。
  • 如果主服务器包含更新,那么它会下载更新和/或执行脚本(类似于nant?)

解决方案需要尽可能轻,并且必须在Windows环境下运行。

我看过ChefSmartFrog,但不适合这种特殊情况。

编辑:部署了多个软件。 这些是数据库脚本,Windows服务和网站。 每个孩子都有自己独特的脚本,因为它的要求和身份验证细节与其他人不同。

编辑2:到目前为止,人们已经提出了很好的答案,但最终的解决方案确实需要保证安全,内部运行,所有这些都在同一时间发生。 这是由于合规性,行业法规和版本问题(例如,db服务器与服务不同步)。 我想到的最终解决方案将类似于主服务器上的FPT服务器和运行在子服务器上的Nant来执行安装例程(启动,停止服务,安装sql脚本,记录安装)。 这是目前最接近的东西,但并不理想,因为nant在推送的基础上工作(仅在某人或程序,例如cruisecontrol,运行脚本时执行)。 我确信必须有一个解决方案来为Windows进行适当的PULL部署。 如果您可以同时跨多个服务器进行部署,则Windows更新和Linux上的APT是拉动部署的绝佳示例。

deployment auto-update change-management
7个回答
1
投票

您说您想要进行Windows软件部署,但是您还要谈论构建脚本语言,例如NAnt。 如果是我,我会使用InstallShield编写一个Windows Installer程序包,并利用它的UpdateManager服务让客户端从更新服务器获取更新。 这些工具已经存在并经过长时间的验证,并且比您重新发明的任何东西都要安全得多。


0
投票

我不是100%清楚要部署的应用程序类型 - 但如果这是一个Windows Forms应用程序要分发给客户端/最终用户,那么你看过ClickOnce ? 这具有自动轮询和从客户端下拉增量的模式。 但似乎你正在分发给其他服务器?


0
投票

几年前,我已经实施了一个能够满足您所需要的系统。

对于客户端应用程序,我们使用的ClickOnce部署非常有用。 对于Windows服务和网站,我们必须实现我们自己的系统,因为我们找不到任何对我们有用的东西。

对于我们尝试复制的数据库(sql2005),这并没有很好地花费了大量的时间和处理器能力。 我们选择备份和恢复数据(它在客户端服务器上只读取)

简而言之

1)主服务器将使用新版本的Web服务,网站和数据库保存多个zip文件。

2)客户端服务器Windows服务每天扫描主服务器(使用ftp)以获取新版本的软件。

3)当发现它将 - 卸载Windows服务并替换文件并重新安装 - 替换网站文件 - 替换数据库


0
投票

Windows Live Sync

你有没有想过windows live Sync?

它是免费的,你所要做的就是设置两个文件夹。 一个在主服务器中,一个在您的子服务器中。

设置完成后,所有文件都将自动同步。

更新应该非常简单,一旦更新了Master文件夹,它将自动在Child端复制。

这完全是火与忘记。

我使用这个系统(一个部署在服务器上)有六个'子'节点,每天轻松同步1000个文件。

编辑1:

忘记提及,文件是加密的,它使用反向连接,因此没有路由器/防火墙配置。


0
投票

你是否正在运行域控制器? 那么你可以jsut“做广告”吗? 没有任何打火机。 修改此行以获取路径以查看UI,但它也应该是可编写脚本的 - 在PowerShell中为leas。

“C:\\ Windows \\ SysWOW64 \\ rundll32.exe”“C:\\ Windows \\ SysWOW64 \\ shell32.dll”,#44“C:\\ Windows \\ SysWOW64 \\ CCM \\ SMSRAP.cpl”,运行播发程序


0
投票

我已经使用了巡航控制.net和颠覆的组合来实现这种确切的使用,并且过去取得了很大的成功。

Subversion是安全的,并将充当主服务器。 Cruise control .net完全支持subversion和nant。 当然它可以做更多。 由于我们所处的行业及其要求(实用程序),我们过去常常有非常复杂的逻辑。


0
投票

当我在圣路易斯参加他们网站的“生日派对”时我和某人说话之前,我听说过这种情况。 我想知道那不是你。

无论如何,我会使用Web部署工具(MSDeploy) 。 MSDeploy更像是同步工具,而不是其他任何东西。 这个概念是你有一个源和一个dest,你想要同步它们。 如果您正在进行正常推送部署,则构建服务器会将某些构建的输出与每个目标服务器同步。 如果要进行拉取部署,只需将所需文件放入共享位置(您正在调用此主服务器),然后客户端计算机就可以将自身同步到该主服务器。

以下是您在问题中提到的一些细节:

将文件部署到主服务器您的构建服务器可以使用MSDeploy将文件部署到主服务器

子服务器将检查主服务器是否在给定时间或时间间隔内有更新。 没有直接的支持,但这里确实有两件事。 事一 :您可以从脚本(.cmd / PowerShell / MSBuild / etc)运行MSDeploy,它可以确定是否有更新的版本。 我会通过在输出文件夹的顶层删除一个版本文件来完成此操作。 然后,当您的脚本启动时,只需阅读服务器上的版本。 如果有更新的可用,则启动新的新部署。 第二部分 :MSDeploy支持增量部署,因此即使您启动新部署,它也不会进行任何更改。 当你开始谈论数据库部署时这很棘手,但在你的情况下可能是不明智的,我会选择一些东西

如果主服务器包含更新,那么它将下载更新和/或执行脚本这是msdeploy.exe将为您执行的操作。

其他相关项目

  • 增量发布:如果您的Web包含1000个文件但只更改了5个,则只部署了5个文件
  • 自定义:MSDeploy支持参数化,因此当客户端启动同步时,您可以为该客户端提供特定值。 有了这些,您可以更改所有类型的文件,包括web.conig / .xml文件/文本文件/等。 您甚至可以提供自定义IIS设置
  • 身份验证:如果您使用的是IIS 7,则可以使用普通的Windows身份验证,您可以创建WMSvc用户并使用它们。
  • 安全性:WMSvc可用于此目的

这适合您的需求吗?

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