[求思路] .net 批量自动部署 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeoQ
V2EX    .NET

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

  •  
  •   LeoQ 2016-06-08 23:58:57 +08:00 via iPhone 7725 次点击
    这是一个创建于 3492 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在部署都靠远程桌面拷贝上去,累死人

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

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

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

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

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


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

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


    不知道各位有没有这样的经验,我自己是第一次碰 windows server
    35 条回复    2017-11-27 16:50:57 +08:00
    fy
        1
    fy  
       2016-06-09 00:58:14 +08:00 via Android   1
    直接找微软要技术支持怎么样?
    ipconfiger
        2
    ipconfiger  
       2016-06-09 01:49:26 +08:00   1
    自己写个服务来做能有多难?
    xupefei
        3
    xupefei  
       2016-06-09 01:53:43 +08:00   1
    有钱上 Norton 企业管理全套,远程操作自动部署一条龙。
    没钱叫微软技术支持给你写 powershell 脚本,毕竟 Windows Server 就是买服务。
    Septembers
        4
    Septembers  
       2016-06-09 02:49:39 +08:00   1
    搞个 活动目录 然后推送吧所有机器全部登陆上去 推送个 策略组 完成
    doun
        5
    doun  
       2016-06-09 04:38:48 +08:00 via Android   1
    不是还有 click once 吗?
    beginor
        6
    beginor  
       2016-06-09 07:48:03 +08:00 via Android
    windows 自动部署用 powershell 脚本才是正道!
    Trim21
        7
    Trim21  
       2016-06-09 07:50:40 +08:00 via Android   1
    好像有 PowerShell remote 什么什么的?进去之后的 shell 是 PowerShell 不是 cmd
    levon
        8
    levon  
       2016-06-09 08:33:35 +08:00   1
    team city ,写发布脚本发布
    dong3580
        9
    dong3580  
       2016-06-09 09:07:12 +08:00 via Android
    当然是 power shell 部署
    tabris17
        10
    tabris17  
       2016-06-09 09:07:14 +08:00   1
    微软说:别来 linux 的那一套
    timothyye
        11
    timothyye  
       2016-06-09 09:50:01 +08:00 via Android   1
    不是有 clickonce 么?
    zaishanfeng
        12
    zaishanfeng  
       2016-06-09 10:00:33 +08:00 via Android   1
    windows 对运维来说就是噩梦 不对是噩耗
    LeoQ
        13
    LeoQ  
    OP
       2016-06-09 10:21:53 +08:00 via iPhone
    @fy
    @xupefei 毕竟不是国企不是那么喜欢花钱解决问题
    LeoQ
        14
    LeoQ  
    OP
       2016-06-09 10:22:31 +08:00 via iPhone
    @levon 我看一下 team city
    bjrjk
        15
    bjrjk  
       2016-06-09 10:34:31 +08:00 via Android
    我想问一问在 linux 用 mono 如何实现像 lnmp 一样的自动 lnma(asp.net)
    popu111
        16
    popu111  
       2016-06-09 10:48:10 +08:00
    @LeoQ 所以说。。。是盗版咯?
    LeoQ
        17
    LeoQ  
    OP
       2016-06-09 11:23:25 +08:00 via iPhone
    @popu111 盗版不至于....
    venster
        18
    venster  
       2016-06-09 11:40:15 +08:00
    部署.net 是什么意思?.net 的安装包么?
    你的机器都加域没有?加了域的话,方案一大堆,没加域的话,方案没有。
    要是是安装其他的东西的话,考虑用 powershell import-csv
    LeoQ
        19
    LeoQ  
    OP
       2016-06-09 12:11:33 +08:00 via iPhone
    @venster 不是部署环境,是部署.net 应用
    mxq0923
        20
    mxq0923  
       2016-06-09 12:34:55 +08:00   1
    ansible windows modules
    janxin
        21
    /div> janxin  
       2016-06-09 12:46:45 +08:00
    微软的不找微软技术支持的都是折腾...
    mogging
        22
    mogging  
       2016-06-09 12:48:08 +08:00 via iPhone
    @beginor can't agree more.
    thinkif
        23
    thinkif  
       2016-06-09 18:54:21 +08:00   1
    如果是 web 应用可以考虑使用 web deploy ( https://www.iis.net/downloads/microsoft/web-deploy
    tomczhen
        24
    tomczhen  
       2016-06-09 19:19:47 +08:00   1
    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
        25
    LeoQ  
    OP
       2016-06-10 01:36:15 +08:00 via iPhone
    @thinkif 谢谢, web deploy 我也在看,不过深层集成了 vs ,我看比较麻烦
    LeoQ
        26
    LeoQ  
    OP
       2016-06-10 01:37:20 +08:00 via iPhone
    @tomczhen 我司也比较小, windows 服务器大概有一百台不到,

    安全问题暂时不用考虑,都是内网机房
    LeoQ
        27
    LeoQ  
    OP
       2016-06-10 01:38:53 +08:00 via iPhone
    @tomczhen 但是这个同步有个问题就是到底同步成功没有不知道,希望有部署成功还是部署失败的返回,我现在暂时还没有搜你说的两个同步软件,一会我就去搜索一下
    LeoQ
        28
    LeoQ  
    OP
       2016-06-10 02:12:42 +08:00 via iPhone
    @tomczhen 谢谢你的文章和思路,这个 iis 配置修改这个步骤很好,直接配置成新的地址,这样自然服务器上会有代码备份,在 svn 上也有二进制码的更迭,很棒
    Flygoat
        29
    Flygoat  
       2016-06-10 15:59:02 +08:00 via Android   1
    那就不要用 windows 呗, Linux 下.netcore 和 mono 跑起.net 来比 windows 还溜。
    tomczhen
        30
    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
        31
    LeoQ  
    OP
       2016-06-11 00:34:31 +08:00 via iPhone
    @Flygoat 这也是一个方案,这个方案我没想到过,一会去了解一下。
    LeoQ
        32
    LeoQ  
    OP
       2016-06-11 00:35:50 +08:00 via iPhone
    @tomczhen 但是这个公司就没有自动化的自觉,很多事就用人来堆,忧伤
    tomczhen
        33
    tomczhen  
       2016-06-11 09:33:58 +08:00 via iPhone
    @LeoQ 这个不算一个好方案,因为开发环境和生产环境差别太大,有些依赖问题容易和开发撕逼,而且如果项目依赖一些第三方库就没法玩了。
    持续集成就是要一步一步来的,而且受阻是必然的,毕竟你真搞出来了,有人就要失业了。而且老板的角度讲,也不想太依赖特定员工来解决问题。
    LeoQ
        34
    LeoQ  
    OP
       2016-06-11 09:57:22 +08:00 via iPhone
    @tomczhen 不太想考虑这些办公室政治,说个实话,很多人的工作就是让别人失业的,甚至做的完美连自己都失业了

    依赖的第三方库, .net 不是特别的了解, php 直接放在代码里面, python 可以直接拷贝 virtualenv 或者 pip install
    asdasdqqq
        35
    asdasdqqq  
       2017-11-27 16:50:57 +08:00
    我的方案是 写一个 gitpull 的脚本-更新代码,写一个 msbuild 的脚本-编译,写一个 rsync 的脚本同步至各个服务器,目前来看我们全自动化比较难,用钩子估计会出问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2944 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:26 PVG 18:26 LAX 02:26 JFK 05:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86