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

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

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

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

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

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

    依赖的第三方库, .net 不是特别的了解, php 直接放在代码里面, python 可以直接拷贝 virtualenv 或者 pip install
        35
    asdasdqqq   2017-11-27 16:50:57 +08:00
    我的方案是 写一个 gitpull 的脚本-更新代码,写一个 msbuild 的脚本-编译,写一个 rsync 的脚本同步至各个服务器,目前来看我们全自动化比较难,用钩子估计会出问题
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3977 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 07:11 · PVG 15:11 · LAX 23:11 · JFK 02:11
    ♥ Do have faith in what you're doing.