Windows Service批量部署到多台服务器求解决方案

vvp2016320 2016-03-20 11:06:03
软件系统有十几个windows service,需要部署到几十台服务器上,而且这些服务不定时需要升级。
现在都是人工一个个去拷贝弄的,慢不说还很容易出错。

有什么办法能够快速部署吗,有什么软件能解决吗?
...全文
1630 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
魂之挽歌来袭 2016-03-22
  • 打赏
  • 举报
回复
楼主可以试试Jenkins 持续集成工具 非常好用 可以一键完成自动更新部署
whw93 2016-03-22
  • 打赏
  • 举报
回复
不会用PowerShell的话,就做台WSUS服务器,把所有需要打补丁的服务器指向WSUS服务器,在WSUS服务器上分发补丁就行了。
vvp2016320 2016-03-21
  • 打赏
  • 举报
回复
思路清晰,逻辑简单,功能强大,谢了~~
  • 打赏
  • 举报
回复
你的服务,都可以降级为 console 程序了!都不需要是 windows 服务。转换批量更新系统设计思路,其实就是把 console 程序自动化部署(拷贝既可),而不是对windows service部署。 可能你需要在配置文件上将服务器分为2组或者3组,然后一组一组服务器来更新。如果所有服务器一块儿更新是有问题的,应该先更新一半的服务器,然后测试其稳定了之后,再更新另外一半的服务器。保持同一个服务功能,在更新的同时总能提供服务。
  • 打赏
  • 举报
回复
引用 17 楼 vvp2016320 的回复:
我想了下,你说的根据文件创建时间和配置文件时间比较,具体怎么比较呢?会不会重复下载呢。还是去读DLL里面的版本号比较好呢
你可以用最主要的exe或者dll文件的时间来作为版本。没有必要太学术化了,没有必要用传统的“版本”概念。
vvp2016320 2016-03-21
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
[quote=引用 楼主 vvp2016320 的回复:] 软件系统有十几个windows service,需要部署到几十台服务器上,而且这些服务不定时需要升级。 现在都是人工一个个去拷贝弄的,慢不说还很容易出错。 有什么办法能够快速部署吗,有什么软件能解决吗?
你自己做一个“守护服务”就行了。它只有不到20行代码而已,就是每隔几秒钟检查一下进程列表,对比一下远程配置文件,如果有某些本地console进程没有启动,或者本地console文件的exe文件最后创建时间比配置文件中标记的早,然后杀掉旧进程后从配置文件标记的地址重新下载(使用一句 new WebClient().DownloadFile(...)语句即可),重启新的进程。 这就是守护服务,非常简单,因此也不会出错,而且也不需要升级! 然后,很简单了。你只要把配置文件更新一下。[/quote] 我想了下,你说的根据文件创建时间和配置文件时间比较,具体怎么比较呢?会不会重复下载呢。还是去读DLL里面的版本号比较好呢
  • 打赏
  • 举报
回复
你的服务,都可以降级为 console 程序了!都不需要是 windows 服务。转换批量更新系统设计思路,其实就是把 console 程序自动化部署(拷贝既可),而不是对windows service部署。 可能你需要在配置文件上将服务器分为2组或者3组,然后一组一组服务器来更新。如果所有服务器一块儿更新是有问题的,应该先更新一半的服务器,然后测试其稳定了之后,再更新另外一半的服务器。保持同一个服务功能,在更新的同时总能提供服务。
吉普赛的歌 2016-03-21
  • 打赏
  • 举报
回复
每台机部署一个windows service , 专门用来发布。 做一个网站, 用来管理发布, 可以上传发布包, 还可以查看发布的时间及发布的情况(是否成功或失败)。 此外, 还可以手动进行发布。
vvp2016320 2016-03-20
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
[quote=引用 12 楼 vvp2016320 的回复:] 哈哈,想法很独特啊,效果好像一样的。执行控制台程序怎么判断是否已启动成功呢?会不会出现执行失败的情况呢
这个不叫独特,许多其他平台的开源流行服务都是如此。很早就是这样的。只不过.net 的社区有些闭塞,不愿意交流比较好的实践。[/quote] 嗯嗯。这样的话,用一个服务启动多个控制台console还是一个服务只管理启动一个console。我现在把服务拆分主要是防止一个服务停止后不会影响其他服务
  • 打赏
  • 举报
回复
守护程序是很通用的概念。例如360之所以“杀不掉”,很简单,它在进程中后3个以上的进程,相互守护,你如果手慢、只来得及杀掉一个exe 就被立刻重启了。
  • 打赏
  • 举报
回复
引用 12 楼 vvp2016320 的回复:
哈哈,想法很独特啊,效果好像一样的。执行控制台程序怎么判断是否已启动成功呢?会不会出现执行失败的情况呢
这个不叫独特,许多其他平台的开源流行服务都是如此。很早就是这样的。只不过.net 的社区有些闭塞,不愿意交流比较好的实践。
  • 打赏
  • 举报
回复
关于“停止启动另外一个 windows service”的做法,我也可以跟你说一下。实际上有些 .net 书上写的,太繁琐了。 windows命令行语句: sc stop abcdefgh sc delete abcdefgh 这就能卸载服务。 而语句: sc create "abcdefgh binPath= "exe文件路径" DisplayName= "你的服务的中文名" start= auto type= interact type= own sc start abcdefgh 这就能安装并启动服务。 因此你可以自己用代码来方便地卸载和安装服务。 但是,其实没有必要做那么多windows service服务!你做一个“守护服务”就够了,你只需要一个非常简单的 windows service即可,其它的都是 console 即可(这样也很容易调试)。
vvp2016320 2016-03-20
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
cd \abcd\binrelease\ --> cd \abcd\bin\release\ [quote=引用 8 楼 vvp2016320 的回复:] 你说的这个守护服务,是用一个windows service更新维护其他win service吗?windowsservice 停止启动另外一个windows service可以吗?如果可以那就OK的。。。
用不着啊?!一个windows service用来启动多个控制台(console)程序就行了。控制台程序最后写一句
Console.ReadLine()
或者
new ManualResetEvent(false).WaitOne()
之类的代码,阻塞它不让其结束。 实际上许多服务都是控制台程序,而不是 windows serrvice的。[/quote] 哈哈,想法很独特啊,效果好像一样的。执行控制台程序怎么判断是否已启动成功呢?会不会出现执行失败的情况呢
  • 打赏
  • 举报
回复
cd \abcd\binrelease\ --> cd \abcd\bin\release\
引用 8 楼 vvp2016320 的回复:
你说的这个守护服务,是用一个windows service更新维护其他win service吗?windowsservice 停止启动另外一个windows service可以吗?如果可以那就OK的。。。
用不着啊?!一个windows service用来启动多个控制台(console)程序就行了。控制台程序最后写一句
Console.ReadLine()
或者
new ManualResetEvent(false).WaitOne()
之类的代码,阻塞它不让其结束。 实际上许多服务都是控制台程序,而不是 windows serrvice的。
vvp2016320 2016-03-20
  • 打赏
  • 举报
回复
另外还有一个问题 windows servie可以修改SQL数据库密码和服务器密码吗?如果可以就能定期自动更换密码了。有人测过没?
  • 打赏
  • 举报
回复
补充一下,所谓“下载”来的,应该是一个 zip 文件的自解压版本。 你的编译打包的代码,可以写类似这样3行 windows 命令行语句
c:
cd \abcd\binrelease\
WinRAR.exe m Release.zip -as -r  -sfx -y -zrelease.txt -ep1
就能将 release 下的所有文件打包成一个自解压exe文件。
vvp2016320 2016-03-20
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
[quote=引用 楼主 vvp2016320 的回复:] 软件系统有十几个windows service,需要部署到几十台服务器上,而且这些服务不定时需要升级。 现在都是人工一个个去拷贝弄的,慢不说还很容易出错。 有什么办法能够快速部署吗,有什么软件能解决吗?
你自己做一个“守护服务”就行了。它只有不到20行代码而已,就是每隔几秒钟检查一下进程列表,对比一下远程配置文件,如果有某些本地console进程没有启动,或者本地console文件的exe文件最后创建时间比配置文件中标记的早,然后杀掉旧进程后从配置文件标记的地址重新下载(使用一句 new WebClient().DownloadFile(...)语句即可),重启新的进程。 这就是守护服务,非常简单,因此也不会出错,而且也不需要升级! 然后,很简单了。你只要把配置文件更新一下。[/quote] 你说的这个守护服务,是用一个windows service更新维护其他win service吗?windowsservice 停止启动另外一个windows service可以吗?如果可以那就OK的。。。
  • 打赏
  • 举报
回复
引用 4 楼 vvp2016320 的回复:
能提供一个demo吗,或者给个链接教程啊,谢谢
自己应该首先想通,而不是抄别人的。
  • 打赏
  • 举报
回复
引用 楼主 vvp2016320 的回复:
软件系统有十几个windows service,需要部署到几十台服务器上,而且这些服务不定时需要升级。 现在都是人工一个个去拷贝弄的,慢不说还很容易出错。 有什么办法能够快速部署吗,有什么软件能解决吗?
你自己做一个“守护服务”就行了。它只有不到20行代码而已,就是每隔几秒钟检查一下进程列表,对比一下远程配置文件,如果有某些本地console进程没有启动,或者本地console文件的exe文件最后创建时间比配置文件中标记的早,然后杀掉旧进程后从配置文件标记的地址重新下载(使用一句 new WebClient().DownloadFile(...)语句即可),重启新的进程。 这就是守护服务,非常简单,因此也不会出错,而且也不需要升级! 然后,很简单了。你只要把配置文件更新一下。
vvp2016320 2016-03-20
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
[quote=引用 2 楼 vvp2016320 的回复:] [quote=引用 1 楼 caozhy 的回复:] 用powershell写脚本,自动化部署
需要登录到目标主机上执行脚本吗? 我想一键部署而且能够检测是否部署成功[/quote] 不需要,但是需要服务器的账户密码,并且账户有权限[/quote] 能提供一个demo吗,或者给个链接教程啊,谢谢
加载更多回复(4)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧