4

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

最佳情况是:

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

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

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

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

编辑2: 到目前为止,人们已经提出了很好的答案,但最终的解决方案确实需要安全、内部运行并且同时发生。这是由于合规性、行业法规和版本问题(例如,数据库服务器与服务不同步)。我想到的最终解决方案类似于主服务器上的 FPT 服务器和子服务器上运行的 Nant 以执行安装例程(启动、停止服务、安装 sql 脚本、记录安装)。这是目前可用的最接近的东西,但并不理想,因为 nant 以推送为基础工作(仅在某人或程序(例如 Cruisecontrol)运行脚本时执行)。我确信必须有一个解决方案来为 Windows 进行正确的 PULL 部署。

4

7 回答 7

1

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

于 2010-08-14T23:36:45.903 回答
0

你在运行域控制器吗?这样你就可以直接“宣传”他们了吗?没有得到任何更轻的那个。修改此行以查看 UI 的路径,但它也应该是可编写脚本的 - 至少在 PowerShell 中。

"C:\Windows\SysWOW64\rundll32.exe" "C:\Windows\SysWOW64\shell32.dll",#44 "C:\Windows\SysWOW64\CCM\SMSRAP.cpl",运行广告程序

于 2010-08-14T02:59:57.320 回答
0

几年前,我实现了一个系统,可以满足您的需求。

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

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

简而言之

1) 主服务器将保存几个带有新版本 Web 服务、网站和数据库的 zip 文件。

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

3)找到它时 - 卸载windows服务并替换文件并重新安装 - 替换网站文件 - 替换数据库

于 2010-08-12T07:40:43.567 回答
0

在过去,我已经将巡航控制 .net 和 subversion 结合起来用于这种确切的用途,并取得了很大的成功。

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

于 2010-08-14T12:58:36.930 回答
0

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

于 2010-08-02T11:37:48.487 回答
0

Windows Live 同步

您是否考虑过 Windows Live Sync?

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

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

更新应该很容易,一旦你更新你的主文件夹,它会自动复制到子端。

这完全是火灾和忘记。

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

编辑1:

忘了说,文件是加密的,它使用反向连接,所以路由器/防火墙配置为零。

于 2010-08-13T07:48:54.090 回答
0

当我在圣路易斯参加他们网站的“生日聚会”时,我曾与某人交谈时听说过这种情况。我想知道那是不是你。

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

以下是您在问题中提到的更多细节:

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

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

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

其他相关项目

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

这符合您的需求吗?

于 2010-08-14T22:45:03.383 回答