2010-08-02 65 views
4

我正在寻找一种方法来将拉部署设置为与Windows下的传统推送部署模型相同。在Windows环境中部署拉伸

最理想的情况应该是:

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

的解决方案需要重量尽可能轻,必须下运行Windows环境。

我看了一下ChefSmartFrog,但不适合这种特殊情况。

编辑:正在部署多个软件。这些是数据库脚本,Windows服务和一个网站。每个孩子都会拥有自己独特的脚本,因为它的要求和认证细节与其他方面不同。

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

+0

什么Windows版本是子和主服务器? – jpg 2010-08-12 07:38:18

+0

它们都是相同的版本 - Server 2008标准版本,在我们的生产站点中是Server 2008 R2标准。 – Mike737 2010-08-13 04:05:24

+0

你想要它是安全的,但你使用FTP?我正确阅读这个吗? – Darknight 2010-08-14 13:21:46

回答

0

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

+0

我真的不认为ClickOnce可能会削减它。我已经添加了更多关于正在部署的软件的问题。 – Mike737 2010-08-02 23:32:53

0

几年前,我已经实现了一个系统,可以解决您所寻找的问题。

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

对于我们尝试复制的数据库(sql2005)来说,这并没有得到很好的处理和处理能力。我们选择进行备份和恢复数据(这是所有只读客户端服务器上)

简而言之

1)主服务器将举行几个zipfiles与web服务,网站和数据库的新版本。

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

3)当发现它会 - 卸载Windows服务和替换文件,然后重新安装 - 替换网站上的文件 - 替换数据库

+0

不幸的是,我真的不兴趣建立自己的。对我们来说,构建,支持和维护工作太多了。 这真的很烦人,因为我有一个使用MSBuild,PSExec,NcFTP和其他一些方法的推送部署,它的工作原理非常完美。只是我们不能放弃PSExec和开放服务和端口的工具到我们的子/目标服务器环境中。 – Mike737 2010-08-13 04:10:18

0

的Windows Live同步

你有没有想到Windows Live Sync?

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

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

更新应该是非常简单的,一旦你更新你的主文件夹,它会自动复制到孩子结束。

这完全是火,忘了。

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

编辑1:

忘记提到,文件被加密,并且它使用反向连接,所以零路由器/防火墙的配置。

+0

有些服务器有网络连接,有些服务器不具备网络连接,而只有短暂突发时间的服务器才是安全的环境。另外安装例程需要在每台机器上本地运行。 Windows服务需要停止,更新并重新启动,否则您无法进行更新。数据库服务器需要下载SQL脚本并根据正确的数据库执行它们。 另一个问题是它不需要从任何地方都可以访问,否则我们会失败并购和安全审计。尽管我很确定我们可能会添加缓解例程,但它的额外工作。 – Mike737 2010-08-14 05:14:00

0

是否同步运行域控制器?所以你可以只是“宣传”他们?没有那么轻。修改此路线以查看UI,但它也应该可以编写脚本 - 在PowerShell中至少需要脚本。

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

+0

没有域控制器。 – Mike737 2010-08-14 05:07:10

+0

那么现在是时候运行这个dcpromo :-)严重的是,你已经支付了所有的基础设施,所以你会更好地使用它,而不是试图重新发明轮子,就像你在一些穷人的Linux上farm :-)您可以使用BITS传输更新(数据的背景移动没有比这更轻),您仍然可以选择让它们在现场安装或等待预定时间。 Windows服务器场通常会传播正常更新(每个盒子都可以有单独的更新窗口)。 – ZXX 2010-08-14 21:33:03

0

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

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

0

我以前在圣路易斯与他人谈论他们的网站的“生日聚会”时曾经听说过这种情况。我想知道那是否是你。

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

下面是一些你在你的问题中提到的详细信息:

部署文件掌握服务器 您构建服务器可以使用MSDeploy部署文件掌握服务器

子级服务器会检查查看主人是否在给定的时间或时间间隔有更新。 对此没有直接的支持,但这里真的有两件事。 第一个问题:您可以从脚本(.cmd/PowerShell/MSBuild/etc)中运行MSDeploy,它可以确定是否有更新的版本。我会通过在输出文件夹的顶层放置一个版本文件来实现这一点。然后,当您的脚本开始时,只需读取服务器上的版本即可。如果有新的部署可用,则启动新的部署。 第二件事:MSDeploy支持增量部署,所以即使您启动了新的部署,它也不会做任何更改。当你开始谈论数据库部署时,这很棘手,尽管如此,在你的情况下可能不太明智,我会带着的某种风格去做一件

如果主服务器包含一个更新,那么它会下载更新和/或执行一个脚本 这是msdeploy.exe会为你做。

其他相关项目

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

这是否满足您的需求?

1

你说你想做Windows软件部署,但是你会谈论构建脚本语言,比如NAnt。如果是我,我会使用InstallShield编写Windows Installer软件包,并利用它的UpdateManager服务让客户端从更新服务器获取更新。这些工具已经存在了很长时间,并且证明了这些工具的可靠性远高于您重新创建的任何内容。

+0

你有任何支持文档或演示的链接 – Mike737 2010-08-16 08:46:57