• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rockyliang
V2EX  ›  程序员

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

  •  2
     
  •   rockyliang · Jun 25, 2021 · 23399 views
    This topic created in 1958 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    感觉这个和公司大小没关系,本身也没特别复杂,就看你们的工程实践是不是重视。
    大部分没法自动化部署我觉得都不是工具系统不足的问题,主要是
    1. 心态 - 不信任自动化部署、连续部署
    2. 不写测试 - 没有 CI,上线心慌慌
    3. 政治 - 运维表示我不是没活干了
    sagaxu
    sagaxu
    Jun 26, 2021
    91
    @rockyliang 出 bug 再登上去现场改啊,调试的时候来点 exit(json_encode(xxx))也是日常操作了
    shayuvpn0001
    shayuvpn0001
    Jun 26, 2021
    92
    @rockyliang 现在都 DevOps 了,一边开飞机一边修飞机是基操了吧。
    kwanzaa
    kwanzaa
    Jun 26, 2021
    93
    @sadfQED2 有被笑到
    timothyye
    timothyye
    Jun 26, 2021
    94
    GitLab -> GitLab CI runner -> Docker Image -> Harbor -> K8S
    FarAhead
    FarAhead
    Jun 26, 2021
    95
    cap deploy
    zhjy23212
    zhjy23212
    Jun 26, 2021
    96
    docker 打包,还在用 docker swarm,写了个 makefile,make stop make restart
    MarkLeeyun
    MarkLeeyun
    Jun 26, 2021
    97
    xftp
    akira
    akira
    Jun 26, 2021
    98
    需要编译的 本地编译好,sftp 上传到服务器
    不需要编译的 服务器端直接修改
    vibbow
    vibbow
    Jun 26, 2021
    99
    小公司当然是直接 sftp 拖文件 😂
    xuanbg
    xuanbg
    Jun 26, 2021
    100
    自然是 jenkins 点一下构建就行了
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3005 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 170ms · UTC 12:08 · PVG 20:08 · LAX 04:08 · JFK 07:08
    ♥ Do have faith in what you're doing.