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

小公司都是怎么部署代码到生产环境服务器的?

  •  2
     
  •   rockyliang · 2021-06-25 15:32:34 +08:00 · 18610 次点击
    这是一个创建于 1007 天前的主题,其中的信息可能已经有所发展或是发生改变。

    据我所知,大公司的代码上线流程一般都会很规范,有专门的代码发布系统。但小公司的话,可能会没有实力去开发这种发布系统,所以想了解下这个问题。

    如果是我的话,我的做法应该是: 首次部署使用 git clone,后续代码的变更则使用 git pull

    这种做法好不好?或者有没有更好的做法呢?

    144 条回复    2021-06-28 16:35:01 +08:00
    1  2  
    en20
        1
    en20  
       2021-06-25 15:46:34 +08:00
    现在的公司是专人切 tag,上 rc,验收通过由测试提服务器发布申请. 以前的小公司是自己打包好然后 ftp 丢上去
    whileFalse
        2
    whileFalse  
       2021-06-25 15:58:28 +08:00 via iPhone   ❤️ 1
    git pull 容易自动合并或者卡在冲突(如果有闲人手动改了东西)。不如 git fetch ; git reset—hard ; git clear

    不过话说回来,现在不应该都 docker 了么。
    xwayway
        3
    xwayway  
       2021-06-25 16:11:42 +08:00
    再小的公司,部署一个 Jenkins 很困难?
    sugarkeek
        4
    sugarkeek  
       2021-06-25 16:13:24 +08:00
    jetbrains idea 直接 deploy
    🌝🌝🌝/doge
    wangkun025
        5
    wangkun025  
       2021-06-25 16:13:56 +08:00
    我是全干。
    使用 capistrano 自动化部署。
    XiLingHost
        6
    XiLingHost  
       2021-06-25 16:14:16 +08:00
    推 docker 镜像上去,然后 kubectl apply -f
    Obrigado0815
        7
    Obrigado0815  
       2021-06-25 16:18:01 +08:00
    之前小公司:前后端各自手动部署,nginx
    现在颇有规模的公司:jenkins
    yitingbai
        8
    yitingbai  
       2021-06-25 16:18:37 +08:00
    打包 jar, 然后用宝塔传上去, 再启动 tmux 执行命令 java -jar xxxx
    Quarter
        9
    Quarter  
       2021-06-25 16:19:18 +08:00 via iPhone
    愚蠢的我还不太会用 jenkins,用的 minio 上传部署文件,然后定时任务执行脚本,如果扫描到文件就脚本部署,比较 low🤧🤧
    pkoukk
        10
    pkoukk  
       2021-06-25 16:21:51 +08:00
    gitlab ci
    young
        11
    young  
       2021-06-25 16:26:23 +08:00
    sftp 😂
    sparrww
        12
    sparrww  
       2021-06-25 16:31:42 +08:00
    反正核心就一两个开发人员,怎么方便怎么来呗
    code4you
        13
    code4you  
       2021-06-25 16:37:53 +08:00   ❤️ 9
    打开 SFTP 软件 然后把代码拖入到文件夹

    我猜的
    zardly666
        14
    zardly666  
       2021-06-25 16:38:46 +08:00
    本地提交带 dockerFile------gitlab------阿里云容器镜像----阿里云 k8s
    taowen
        15
    taowen  
       2021-06-25 16:40:19 +08:00
    生产环境可不只是后端的生产环境,小程序呢,iOS 呢,各种外部集成和配置呢。
    wjfz
        16
    wjfz  
       2021-06-25 16:40:36 +08:00   ❤️ 1
    leafre
        17
    leafre  
       2021-06-25 16:51:58 +08:00 via Android   ❤️ 1
    Jenkins & docker compose
    Kimen
        18
    Kimen  
       2021-06-25 16:53:47 +08:00
    我自己接的私活都是 jenkins+docker
    polyang
        19
    polyang  
       2021-06-25 16:55:09 +08:00
    git pull ?你也不怕有冲突啥的?一般都是打 tag 吧
    rockyliang
        20
    rockyliang  
    OP
       2021-06-25 16:56:11 +08:00 via iPhone
    @sugarkeek
    @young 原来我不是一个人,我上家公司用的就是这种部署方式😂
    rockyliang
        21
    rockyliang  
    OP
       2021-06-25 16:57:33 +08:00 via iPhone
    @wjfz 感谢分享,这个看起来比其他人说的 jenkins 更容易使用一些
    willis
        22
    willis  
       2021-06-25 16:59:35 +08:00
    ansible
    rockyliang
        23
    rockyliang  
    OP
       2021-06-25 17:00:38 +08:00 via iPhone
    @polyang 因为线上服务器的代码一般都是禁止直接修改的吧,所以冲突发生的概率应该会很低
    remember5
        24
    remember5  
       2021-06-25 17:07:27 +08:00
    gitlab ci +1
    yunye
        25
    yunye  
       2021-06-25 17:08:46 +08:00
    buddy.works
    killva4624
        26
    killva4624  
       2021-06-25 17:09:39 +08:00   ❤️ 1
    小公司搞 docker 更省事~不用云上 k8s 的话,docker-compose run 都行
    xuxuxu123
        27
    xuxuxu123  
       2021-06-25 17:13:03 +08:00   ❤️ 2
    阿里云云效 2020,30 人一下的团队可以申请免费;
    包括云代码管理,项目管理,流水线部署等~~~
    xuxuxu123
        28
    xuxuxu123  
       2021-06-25 17:13:16 +08:00
    @xuxuxu123 30 人以下
    kera0a
        29
    kera0a  
       2021-06-25 17:16:25 +08:00 via iPhone
    小公司也可以部署一个 gitlab 吧,后端前端客户端都能自动化部署。
    有挺多的开源第三方工具可以帮小公司处理好。
    victor
        30
    victor  
       2021-06-25 17:17:53 +08:00
    Github Action = CI,阿里云 Flow = CD,公司技术就 1 个全职,2 个兼职的时候就这么做
    nuanshen
        31
    nuanshen  
       2021-06-25 17:19:48 +08:00
    Jenkins 就挺好用的
    labulaka521
        32
    labulaka521  
       2021-06-25 17:22:29 +08:00
    k8s + gitlab+gitlan-ci
    labulaka521
        33
    labulaka521  
       2021-06-25 17:22:46 +08:00
    @labulaka521 gitlan-ci ->> gitlab-ci
    myd
        34
    myd  
       2021-06-25 17:30:53 +08:00
    git pull 一下
    mahone3297
        35
    mahone3297  
       2021-06-25 17:32:30 +08:00
    都那么高级的吗?
    不是 sftp 上传?
    DUDUHA
        36
    DUDUHA  
       2021-06-25 17:36:35 +08:00
    ①直接上手,sftp
    ②打包成 docker,docker run
    ③devops 流程走起来,gitlab+jenkins+harbor+k8s
    ④现成开源代码发布工具,walle ; spug 等等
    LimeQAQ
        37
    LimeQAQ  
       2021-06-25 17:40:14 +08:00 via iPhone
    备份原 class 文件,关掉 tomcat,上传本地编译后的 class 文件,启动 tomcat 。
    LimeQAQ
        38
    LimeQAQ  
       2021-06-25 17:41:44 +08:00 via iPhone
    @mahone3297 远程桌面 ctrl c v
    cbasil
        39
    cbasil  
       2021-06-25 17:43:28 +08:00
    php 直接 ftp...
    keepeye
        40
    keepeye  
       2021-06-25 17:44:00 +08:00
    真是高大上,感觉大炮打蚊子。我们项目都是 go 的,编译好了直接 rsync 丢到服务器,再重启下服务就可以了,十几台服务器就是这么管理的,轻松无压力。另外好几百台 python 的服务器是通过 pscp + pssh,一个脚本搞定。
    way2create
        41
    way2create  
       2021-06-25 17:44:33 +08:00
    我能决定就按我喜欢。。。决定不了领导说啥是啥
    hkllzh
        42
    hkllzh  
       2021-06-25 17:46:38 +08:00   ❤️ 3
    后端 Spring Boot 体系。本地打包,上传 jar 。不管线上用户,直接重启 java 进程。就是暴力操作。
    CantSee
        43
    CantSee  
       2021-06-25 17:53:00 +08:00
    人肉上线
    karott7
        44
    karott7  
       2021-06-25 17:57:59 +08:00
    自己学 jenkins 在测试服务器搭了个,我管理五个项目,之前每次都是手动发布测试服,累死了,还容易搞混。
    docker 还不熟,想之后有空 docker+jenkins 搞个多分支发布流程
    wengych
        45
    wengych  
       2021-06-25 17:58:24 +08:00
    小公司管那么多干嘛,scp 不就得了,用 xftp
    litchinn
        46
    litchinn  
       2021-06-25 18:00:14 +08:00
    CI 工具,比如 Jenkins 这种,真的好用,而且看起来难,自己操作一遍真的不难
    srx1982
        47
    srx1982  
       2021-06-25 18:02:43 +08:00
    小公司,k8s + gitlab-ci
    dabaibai
        48
    dabaibai  
       2021-06-25 18:07:07 +08:00
    jenkins 足矣
    ccagml
        49
    ccagml  
       2021-06-25 18:08:12 +08:00 via Android
    winscp 手动拉文件?
    GM
        50
    GM  
       2021-06-25 18:12:25 +08:00
    不是很明白楼上说的冲突什么的,服务器那边只更新、不提交,git pull 怎么会有冲突?
    lyusantu
        51
    lyusantu  
       2021-06-25 18:12:41 +08:00
    IDEA 有一个 Alibaba Cloud Toolkit 插件,一键打包部署至服务器然后执行脚本
    atpking
        52
    atpking  
       2021-06-25 18:24:59 +08:00
    capistrano 一把梭
    Keyi
        53
    Keyi  
       2021-06-25 18:28:20 +08:00
    前东家的项目,因为大家手里都没有完整的代码,而且隔离网络环境只能使用光盘拷贝,所以只能到服务器上替换 class 文件,有时候线上的代码和手里的完全不一样还需要反编译然后用手敲到自己电脑上
    xiaojun1994
        54
    xiaojun1994  
       2021-06-25 18:29:16 +08:00
    ftp
    ysicing
        55
    ysicing  
       2021-06-25 18:30:48 +08:00
    gitlab + (gitlab-ci/drone) + k8s

    drone-kube 弹按需 pod 构建
    sadfQED2
        56
    sadfQED2  
       2021-06-25 18:35:36 +08:00 via Android   ❤️ 5
    Go 项目,本地编译,scp 到服务器,然后重启项目。我现在正在写事故报告,因为我 scp 错文件了。
    rockyliang
        57
    rockyliang  
    OP
       2021-06-25 18:37:28 +08:00
    @keepeye 看来是大公司,几百台服务器这么豪气,哈哈哈哈
    chenqh
        58
    chenqh  
       2021-06-25 18:43:53 +08:00
    ansible 一把锁
    chenqh
        59
    chenqh  
       2021-06-25 18:45:12 +08:00
    @hkllzh 我 py 也这样,虽然是用 ansible 重启
    kop1989
        60
    kop1989  
       2021-06-25 18:46:16 +08:00 via iPhone
    复制 粘贴
    johnsona
        61
    johnsona  
       2021-06-25 19:04:36 +08:00
    叫小作坊
    privil
        62
    privil  
       2021-06-25 19:07:12 +08:00
    @sadfQED2 #56 哈哈哈,笑死……
    sagaxu
        63
    sagaxu  
       2021-06-25 19:19:49 +08:00 via Android   ❤️ 12
    我大 PHP 直接登陆到生产环境,线上改代码然后 F5 刷新页面看效果,改好了把代码拷一份下来
    lqw3030
        64
    lqw3030  
       2021-06-25 19:21:35 +08:00
    我用双手成就你的梦想
    lc1450
        65
    lc1450  
       2021-06-25 19:22:45 +08:00   ❤️ 3
    rz -be
    rm -rf / opt/www/app
    ^C
    ^C
    ^Z
    LowBi
        66
    LowBi  
       2021-06-25 19:30:17 +08:00 via Android
    直接远程服务器桌面放 jar 包
    cyrivlclth
        67
    cyrivlclth  
       2021-06-25 19:56:37 +08:00
    建议用 docker,用 docker-compose run 就行了,万一要回滚还有救。
    zhtttyecho
        68
    zhtttyecho  
       2021-06-25 20:14:50 +08:00
    ftp...
    gimp
        69
    gimp  
       2021-06-25 20:18:34 +08:00
    @sadfQED2 #56 同 Go,scp 上去忘记替换了,复盘文档昨天刚写完。:doge:
    v2exblog
        70
    v2exblog  
       2021-06-25 20:20:10 +08:00
    可以选择用 ansible 之类的开源软件
    fengpan567
        71
    fengpan567  
       2021-06-25 20:22:06 +08:00
    jenkins
    cs419
        72
    cs419  
       2021-06-25 20:22:12 +08:00   ❤️ 1
    自动化限制了大家的想象

    1. 系统用 windows
    2. eclipse / idea 直接启动
    3. mvn tomcat
    4. java -jar springboot.jar
    yhxx
        73
    yhxx  
       2021-06-25 20:23:19 +08:00
    我见过这种操作:
    Vue 的前端项目
    ftp 拖到服务器上,npm install,npm run dev
    然后线上访问地址是 10.xx.xx.xx:8080
    kongkongyzt
        74
    kongkongyzt  
       2021-06-25 20:41:59 +08:00
    后端 PHP 和 Go, 部署是用的 CI(Coding) + tkex(k8s) + docker, 非常非常方便
    sleshep632
        75
    sleshep632  
       2021-06-25 20:47:50 +08:00
    jenkins + ansible
    Lemeng
        76
    Lemeng  
       2021-06-25 20:56:08 +08:00
    方法太多,也简单,怎么方便怎么来
    dajj
        77
    dajj  
       2021-06-25 21:18:36 +08:00
    就算什么都没有, 用 git 的钩子写个脚本都能自动部署
    hteen
        78
    hteen  
       2021-06-25 21:25:10 +08:00
    小公司 spug 可以
    wingoo
        79
    wingoo  
       2021-06-25 22:08:57 +08:00
    小公司更要全部上云+自动部署
    rekulas
        80
    rekulas  
       2021-06-25 22:21:51 +08:00
    @GM 应该是指有人直接线上改过东西,确实有这种情况我也遇到过。。。另外就算不冲突 pull 更新貌似也不是安全的,有可能出现部分代码更新来请求导致 bug,大公司就我所知一般是开新目录然后 nginx 无缝切换过去

    不过我们也还是选择的直接 pull 更新,因为还是小公司。。。
    everyx
        81
    everyx  
       2021-06-25 22:27:49 +08:00 via Android
    docker swarm + 手动更新镜像 😂
    hsowan
        82
    hsowan  
       2021-06-25 22:36:40 +08:00
    Jenkins: Build great things at any scale
    Felldeadbird
        83
    Felldeadbird  
       2021-06-25 22:53:35 +08:00
    我一直 SFTP 传上去的。将要上传的文件 通过 GIT 导出差异。
    Soar360
        84
    Soar360  
       2021-06-25 23:02:16 +08:00
    如果是 .NET 项目的话,可以参看:

    使用批处理(.bat)文件一键编译 .NET CORE 网站并发布至 IIS

    https://www.coderbusy.com/archives/1595.html
    rockyliang
        85
    rockyliang  
    OP
       2021-06-25 23:16:15 +08:00 via iPhone
    @sagaxu 牛逼,如果出 bug 了怎么办,直接线上修 bug 吗😂
    pigspy
        86
    pigspy  
       2021-06-25 23:17:01 +08:00
    gitlab ci 挺好用的
    awing
        87
    awing  
       2021-06-25 23:32:14 +08:00
    有 CI/CD 吗?没有,那就这样:

    ```bash
    tar -cJf - ./xxx | ssh user@hostname 'tar -xJf -'
    ```
    jingkaimori
        88
    jingkaimori  
       2021-06-25 23:33:38 +08:00
    @GM 生产环境的合并也不总是 fast foward,git pull 在相似代码格式变动后的自动合并能治好低血压
    coolcoffee
        89
    coolcoffee  
       2021-06-26 00:00:54 +08:00   ❤️ 1
    直接专门有个分支来 git pull 也是没问题的,已经算是有点流程了, 只要别让其他人有权限直接去改文件内容。

    但更好的办法就用 git tag,每次发版本的是都打出一个 tag,然后远程去 check git tag 或者用 CICD 流去更改生产服务器的内容。

    打 tag 的好处就是方便有个版本回滚,万一这次发的版本有问题,迅速找到上次发版正常的 tag 再发一次就能回滚完成。
    dayeye2006199
        90
    dayeye2006199  
       2021-06-26 00:04:31 +08:00   ❤️ 2
    github actions + skaffold 部署到 k8s

    感觉这个和公司大小没关系,本身也没特别复杂,就看你们的工程实践是不是重视。
    大部分没法自动化部署我觉得都不是工具系统不足的问题,主要是
    1. 心态 - 不信任自动化部署、连续部署
    2. 不写测试 - 没有 CI,上线心慌慌
    3. 政治 - 运维表示我不是没活干了
    sagaxu
        91
    sagaxu  
       2021-06-26 00:04:59 +08:00
    @rockyliang 出 bug 再登上去现场改啊,调试的时候来点 exit(json_encode(xxx))也是日常操作了
    shayuvpn0001
        92
    shayuvpn0001  
       2021-06-26 00:14:19 +08:00
    @rockyliang 现在都 DevOps 了,一边开飞机一边修飞机是基操了吧。
    kwanzaa
        93
    kwanzaa  
       2021-06-26 00:19:32 +08:00
    @sadfQED2 有被笑到
    timothyye
        94
    timothyye  
       2021-06-26 00:25:27 +08:00
    GitLab -> GitLab CI runner -> Docker Image -> Harbor -> K8S
    w7938940
        95
    w7938940  
       2021-06-26 01:03:46 +08:00
    cap deploy
    zhjy23212
        96
    zhjy23212  
       2021-06-26 01:13:45 +08:00
    docker 打包,还在用 docker swarm,写了个 makefile,make stop make restart
    MarkLeeyun
        97
    MarkLeeyun  
       2021-06-26 01:31:40 +08:00
    xftp
    akira
        98
    akira  
       2021-06-26 01:42:18 +08:00
    需要编译的 本地编译好,sftp 上传到服务器
    不需要编译的 服务器端直接修改
    vibbow
        99
    vibbow  
       2021-06-26 03:40:25 +08:00
    小公司当然是直接 sftp 拖文件 😂
    xuanbg
        100
    xuanbg  
       2021-06-26 05:39:00 +08:00
    自然是 jenkins 点一下构建就行了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3518 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 10:50 · PVG 18:50 · LAX 03:50 · JFK 06:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.