LeoQ
V2EX  ›  .NET

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

  •  
  •   LeoQ · Jun 8, 2016 via iPhone · 8527 views
    This topic created in 3806 days ago, the information mentioned may be changed or developed.
    现在部署都靠远程桌面拷贝上去,累死人

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

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

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

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

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

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

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

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

    依赖的第三方库, .net 不是特别的了解, php 直接放在代码里面, python 可以直接拷贝 virtualenv 或者 pip install
    asdasdqqq
    asdasdqqq
    Nov 27, 2017
    35
    我的方案是 写一个 gitpull 的脚本-更新代码,写一个 msbuild 的脚本-编译,写一个 rsync 的脚本同步至各个服务器,目前来看我们全自动化比较难,用钩子估计会出问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4691 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 03:20 · PVG 11:20 · LAX 19:20 · JFK 22:20
    ♥ Do have faith in what you're doing.