V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeoQ
V2EX  ›  .NET

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

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

    领导准备用 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
    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
    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   ·   实用小工具   ·   5031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:25 · PVG 17:25 · LAX 01:25 · JFK 04:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.