[求思路] .net 批量自动部署

2016-06-08 23:58:57 +08:00
 LeoQ
现在部署都靠远程桌面拷贝上去,累死人

领导准备用 rundeck 来搞,也就是把脚本通过 ssh 下发到各个机器,然后跑,但是 ssh 在 windows 下不是一般的坑,

首先就是斜线和反斜线的问题,拷贝的时候如果 windows 路径填反斜线,就会直接被拷贝到盘的根目录下,这样就根本不会执行成功。如果填斜线,在执行的时候,斜线会被识别成参数,(卧槽!!一万只草泥马

再还有的就是 SSH 的权限问题, ssh 要求目录权限,用户的 home 目录是需要 755 , ssh 目录需要 700 还是什么, authorised_keys 需要 600

~但是这些权限都是 unix 风格的啊摔!~

为了设定好这些权限,你还要安 cygwin ,想想给所有线上 windows 服务器都安上 cygwin 的情形,想想就觉得累好吗


我的想法是设置一台 windows server 的中控机,然后从这台中控机,直接用 powershell 的远程连接 Enter-PSSession 之类的命令,连接到线上服务器,然后执行脚本,包括拷贝代码,执行 SQL 之类的

这么做就是相当于这个中控机是个 proxy ,由它来发消息,并且汇聚最后代码的更新结果。


不知道各位有没有这样的经验,我自己是第一次碰 windows server
7020 次点击
所在节点    .NET
35 条回复
janxin
2016-06-09 12:46:45 +08:00
微软的不找微软技术支持的都是折腾...
mogging
2016-06-09 12:48:08 +08:00
@beginor can't agree more.
thinkif
2016-06-09 18:54:21 +08:00
如果是 web 应用可以考虑使用 web deploy ( https://www.iis.net/downloads/microsoft/web-deploy
tomczhen
2016-06-09 19:19:47 +08:00
windows 有自己的批量运维技术,基于 powershell 的,不过实施起来根据微软的特色都是各种捆绑,依赖比较重。
其实可以使用 svn 的 hook 配合文件同步软件( bysync / syncthing )来做自动部署。

上面说的 web deploy 有个问题就是需要额外打开端口,有被扫描和暴力破解的风险,如果使用微软的安全认证方案又是各种捆绑,简直蛋疼的要死。

不知道你们具体部署的是什么应用,我这边是用了 jenkins + svn hook 来做的 iis 自动部署

http://www.tomczhen.com/ci/jenkins/continuous-integration-on-jenkins-auto-deploy-iis-with-svn/

不过公司规模小,如果是服务器比较多的话,方案要进行改进,可能也会用微软的方案了。
LeoQ
2016-06-10 01:36:15 +08:00
@thinkif 谢谢, web deploy 我也在看,不过深层集成了 vs ,我看比较麻烦
LeoQ
2016-06-10 01:37:20 +08:00
@tomczhen 我司也比较小, windows 服务器大概有一百台不到,

安全问题暂时不用考虑,都是内网机房
LeoQ
2016-06-10 01:38:53 +08:00
@tomczhen 但是这个同步有个问题就是到底同步成功没有不知道,希望有部署成功还是部署失败的返回,我现在暂时还没有搜你说的两个同步软件,一会我就去搜索一下
LeoQ
2016-06-10 02:12:42 +08:00
@tomczhen 谢谢你的文章和思路,这个 iis 配置修改这个步骤很好,直接配置成新的地址,这样自然服务器上会有代码备份,在 svn 上也有二进制码的更迭,很棒
Flygoat
2016-06-10 15:59:02 +08:00
那就不要用 windows 呗, Linux 下.netcore 和 mono 跑起.net 来比 windows 还溜。
tomczhen
2016-06-10 17:34:16 +08:00
@LeoQ 第一个我打错了,应该是 btsync ,囧。

我这公司才 3 台服务器(我也想去一百台服务器的小公司, Orz ),之前有考虑过上百台的情况( windows )。

思路是独立一台 SVN 服务器集中管理更新文件(主要是为了版本回退和差异查看),对服务器根据应用分组。

利用微软的方案做批量远程执行 powershell 调用写好的 python 脚本,在 python 脚本中做同步拉取 SVN 的文件,并返回部署结果判断信息( python 的库多,很多功能容易实现)。 python 脚本要实现三个基本功能——同步 /部署,上线,回退。

前期可以直接调用微信接口发送信息的方式接收结果,有需要可以实现一个后台来接收信息。

使用 jenkins 来做管理,必要的话可以在部署完成后跑个测试返回结果也是不错的。

另外吐槽一下, linux 下面运维实在是比 windows 方便多了,各种技术都有很完善的方案、资料,依赖比 windows 少很多(巨硬动不动就要你上 AD ), docker 更是方便得不要不要的。(然而我这公司就一台 linux 服务器还是我私心报方案弄出来的,囧)
LeoQ
2016-06-11 00:34:31 +08:00
@Flygoat 这也是一个方案,这个方案我没想到过,一会去了解一下。
LeoQ
2016-06-11 00:35:50 +08:00
@tomczhen 但是这个公司就没有自动化的自觉,很多事就用人来堆,忧伤
tomczhen
2016-06-11 09:33:58 +08:00
@LeoQ 这个不算一个好方案,因为开发环境和生产环境差别太大,有些依赖问题容易和开发撕逼,而且如果项目依赖一些第三方库就没法玩了。
持续集成就是要一步一步来的,而且受阻是必然的,毕竟你真搞出来了,有人就要失业了。而且老板的角度讲,也不想太依赖特定员工来解决问题。
LeoQ
2016-06-11 09:57:22 +08:00
@tomczhen 不太想考虑这些办公室政治,说个实话,很多人的工作就是让别人失业的,甚至做的完美连自己都失业了

依赖的第三方库, .net 不是特别的了解, php 直接放在代码里面, python 可以直接拷贝 virtualenv 或者 pip install
asdasdqqq
2017-11-27 16:50:57 +08:00
我的方案是 写一个 gitpull 的脚本-更新代码,写一个 msbuild 的脚本-编译,写一个 rsync 的脚本同步至各个服务器,目前来看我们全自动化比较难,用钩子估计会出问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284504

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX