今天老大说想让我自己部署项目,但又怕我删错东西 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
taogen
V2EX    程序员

今天老大说想让我自己部署项目,但又怕我删错东西

  •  
  •   taogen
    tagnja 2020-12-11 20:26:34 +08:00 6253 次点击
    这是一个创建于 1815 天前的主题,其中的信息可能已经有所发展或是发生改变。

    远程代码仓库用的是阿里云 code,没有 CI 。服务器没有备份,怕我一不下心 rm -rf /

    老大只是今天下班前提了一下,还没给服务器登录帐号。

    自己部署会方便一点。我该不该争取自己部署项目呢?

    第 1 条附言    2020-12-12 08:05:33 +08:00
    想了一个部署方案,大家觉得可行吗?

    部署方案特点:

    1. 使用 Shell 脚本,实现自动化更新。
    2. 使用 Nginx 反向代理,24 小时随时可更新,实现无缝热更新。
    3. Shell 脚本先本地测试后再使用,安全可靠。

    部署流程

    - 本地提交最新代码。
    - 服务器拉取最新代码。
    - 服务器编译最新代码。
    - 检查系统端口占用,运行“部署脚本”,部署新版本代码(与上一次运行的端口不同)
    - 使用 IP 访问,测试新版本项目是否运行正确、新增功能是否正确。
    - 新版本项目测试通过后,运行“切换项目脚本”,Nginx 修改项目运行端口配置,Kill 旧版本项目的进程,备份旧版本项目可执行文件。
    - 运行一段时间,发现其他紧急问题,可以运行“恢复项目脚本”,运行上一个版本的项目代码。
    - 部署流程结束。

    实现过程

    - 获取服务器相关信息。Nginx 目录。部署运行方式。
    - 本地虚拟机模拟线上环境,编写 Shell 脚本。
    - 服务器测试 Shell 脚本自动部署。(测试之前,如有必要可备份系统镜像)
    - 测试通过后,创建一个系统用户,只对该脚本有可读可执行的权限。
    36 条回复    2020-12-14 11:07:01 +08:00
    QingStone
        1
    QingStone  
       2020-12-11 20:27:17 +08:00 via iPhone
    哈哈哈哈,跟我一样。每次部署怂得一批!
    hcsu
        2
    hcsu  
       2020-12-11 20:28:01 +08:00 via iPhone
    我也是…每次操作生产怂的一批
    nightwitch
        3
    nightwitch  
       2020-12-11 20:30:06 +08:00   6
    "服务器没有备份"
    出事是迟早的
    40EaE5uJO3Xt1VVa
        4
    40EaE5uJO3Xt1VVa  
       2020-12-11 20:32:34 +08:00
    3l 说得对
    echowuhao
        5
    echowuhao  
       2020-12-11 20:41:32 +08:00
    CI 都没有的公司,要么跟老大说,自己来弄 CI 。要么赶紧跑路。
    darksword21
        6
    darksword21  
    PRO
       2020-12-11 21:00:22 +08:00 via iPhone
    反正做事之前准备好备份和恢复。然后放开干
    taogen
        7
    taogen  
    OP
       2020-12-11 21:24:01 +08:00 via Android
    @nightwitch 这就是墨菲定律啊
    rabbbit
        8
    rabbbit  
       2020-12-11 21:24:55 +08:00   6
    那必须得中午部署了
    wxsm
        9
    wxsm  
       2020-12-11 21:59:43 +08:00
    简单,写个 bash,在自己机器上执行一次,没问题就到远程机器上执行。
    dream4ever
        10
    dream4ever  
       2020-12-11 22:02:36 +08:00
    权限控制呢?限制账号只能操作指定目录?
    raaaaaar
        11
    raaaaaar  
       2020-12-11 22:15:40 +08:00 via Android
    权限被吃了吗?就是干这个事的啊
    jimiy
        12
    jimiy  
       2020-12-11 22:26:40 +08:00
    部署前,先把上一个可运行版本先备份,然后再部署新的,给自己一个退路啊
    Noisky
        13
    Noisky  
       2020-12-11 22:36:14 +08:00
    一定一定要先备份
    f165af34d4830eeb
        14
    f165af34d4830eeb  
       2020-12-11 22:40:35 +08:00   5
    你们有体验过给生产环境服务器调整分区么?我觉得应该和给飞行中的飞机换发动机的感觉差不多。
    iloveayu
        15
    iloveayu  
       2020-12-11 22:53:10 +08:00   1
    代码都有了,先在自己本机装虚机部署,跑通整个流程,实际部署时心里就有底了。
    正式环境部署前,云服务器先来个镜像,本地虚机先打快照,手潮误删滚回就好。
    hushao
        16
    hushao  
       2020-12-12 04:49:19 +08:00
    既然老大有这个想法,自己就争取一下吧,生产部署也没什么可怕的。
    事先做好部署方案,形成文档,固化成 shell 脚本,自己本地测试通过,然后拿给老大过目,生产环境严格按照文档或者测试通过的脚本来。
    生产部署前一定记得备份!
    securityCoding
        17
    securityCoding  
       2020-12-12 10:19:14 +08:00   1
    为什么不直接起一个 jenkins.... pkg 包每次构建扔到 oss 上面呗
    taogen
        18
    taogen  
    OP
       2020-12-12 10:38:46 +08:00 via Android
    @securityCoding 看了一下,阿里云 code 仓库有 webhooks,可以考虑使用 Jenkins 。
    有一点疑惑,pkg 包扔到 oss 上怎么结合 Jenkins 是怎么操作呀?( Jenkins 不太熟悉
    ericgui
        19
    ericgui  
       2020-12-12 11:14:00 +08:00
    如果你们有负载均衡,就可以放心的多了
    loveyu
        20
    loveyu  
       2020-12-12 11:26:13 +08:00
    先本机测试,搭一个完整的环境,脚本全部先验证一遍。
    securityCoding
        21
    securityCoding  
       2020-12-12 11:32:17 +08:00
    @taogen jenkins pipline 可以自定义一个上传文件到 oss 的 stage, stage 里面可以执行命令.

    下面是我项目里面的 stage 定义供参考

    stage('上传 JAR 至 OSS') {
    steps {
    script {
    path = env.WORKSPACE + "/" + params.moduleDir + "/build/libs"
    echo 'jar 包目录:' + path
    jarName = params.jarName
    echo 'jar 包名称:' + jarName
    branch = env.BRANCH_NAME
    echo 'jar 构建分支:' + branch
    sh(script: "/home/user_00/./oss_deploy.sh " + " " + path + " " + jarName + " " + branch + " ", returnStdout: true)
    }
    }
    post {
    failure {
    println('上传失败')
    }
    success {
    println('上传成功')
    }
    }
    }
    taogen
        22
    taogen  
    OP
       2020-12-12 11:41:46 +08:00 via Android
    taogen
        23
    taogen  
    OP
       2020-12-12 11:43:33 +08:00 via Android
    @ericgui
    to B 的项目,并发量不大,就一台服务器。
    codehz
        24
    codehz  
       2020-12-12 13:25:49 +08:00 via Android
    楼上这种拼凑字符串的怎么看问题都比较大(
    lower
        25
    lower  
       2020-12-12 15:16:22 +08:00
    编译操作可能会对服务器 CPU 有大量消耗,不要直接在应用服务器上搞;
    尽量只在生产服务器做有限的备份 /替换 /热更新等基本操作哇……
    taogen
        26
    taogen  
    OP
       2020-12-12 16:26:40 +08:00 via Android
    @lower 大佬,要自动化部署,只能在服务器上编译了。有什么其他办法吗?
    lower
        27
    lower  
       2020-12-12 17:02:48 +08:00
    @taogen
    我的意思是防止影响生产服务的正常运行。。。
    比如专门独立的服务器来编译打包,最后只是把部署包 发布到应用服务器……
    mlxj
        28
    mlxj  
       2020-12-12 17:05:49 +08:00
    心里默认一定不要“rm -rf”;
    心里默认一定不要“rm -rf”
    心里默认一定不要“rm -rf”
    心里默认一定 要“rm -rf”
    心里默认一定 要“rm -rf”
    心里默认一定 要“rm -rf”
    taogen
        29
    taogen  
    OP
       2020-12-12 17:16:49 +08:00 via Android
    @lower 明白了。
    js8510
        30
    js8510  
       2020-12-12 17:29:26 +08:00 via Android
    短期 hacking solution 可以 没啥大毛病。长期建议是使用 成熟的 CI/CD solution 比如你这个 hotswap solution 如果 v2 OOM/dead loop 然后 server no response 无法 rollback 你怎么办?
    boolstone
        31
    boolstone  
       2020-12-12 17:38:03 +08:00
    我记得阿里云已经禁止 rm -rf / 要加参数才可以
    taogen
        32
    taogen  
    OP
       2020-12-12 21:53:00 +08:00 via Android
    @js8510 这种情况,那只能登录服务器查看 gc 日志、进程状态和系统资源占用,或者重启服务器。迫于不是 leader CI/CD 不好推行。
    mingt
        33
    mingt  
       2020-12-13 11:12:21 +08:00
    @mlxj 念着念着就打出来了
    baozhuo
        34
    baozhuo  
       2020-12-14 09:13:00 +08:00 via Android
    反正我是担责任的情况下能不自己部署,甩给别人不香吗?反正我不背锅
    draguo
        35
    draguo  
       2020-12-14 10:59:03 +08:00   1
    用阿里 code,直接用云效更方便
    julyclyde
        36
    julyclyde  
       2020-12-14 11:07:01 +08:00
    这个方案看起来不是很靠谱
    不过各企业具体情况不一样,你也可以先做出来再沟通
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4702 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 09:54 PVG 17:54 LAX 01:54 JFK 04:54
    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