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

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

  •  2
     
  •   rockyliang · 158 天前 · 13084 次点击
    这是一个创建于 158 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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