rockyliang
V2EX  ›  程序员

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

By rockyliang at 2021 年 6 月 25 日 · 23026 次点击

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

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

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

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

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

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

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

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

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

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

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

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

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

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

感觉这个和公司大小没关系,本身也没特别复杂,就看你们的工程实践是不是重视。
大部分没法自动化部署我觉得都不是工具系统不足的问题,主要是
1. 心态 - 不信任自动化部署、连续部署
2. 不写测试 - 没有 CI,上线心慌慌
3. 政治 - 运维表示我不是没活干了
sagaxu
   91
sagaxu  
   2021 年 6 月 26 日
@rockyliang 出 bug 再登上去现场改啊,调试的时候来点 exit(json_encode(xxx))也是日常操作了
shayuvpn0001
   92
shayuvpn0001  
   2021 年 6 月 26 日
@rockyliang 现在都 DevOps 了,一边开飞机一边修飞机是基操了吧。
kwanzaa
   93
kwanzaa  
   2021 年 6 月 26 日
@sadfQED2 有被笑到
timothyye
   94
timothyye  
   2021 年 6 月 26 日
GitLab -> GitLab CI runner -> Docker Image -> Harbor -> K8S
FarAhead
   95
FarAhead  
   2021 年 6 月 26 日
cap deploy
zhjy23212
   96
zhjy23212  
   2021 年 6 月 26 日
docker 打包,还在用 docker swarm,写了个 makefile,make stop make restart
MarkLeeyun
   97
MarkLeeyun  
   2021 年 6 月 26 日
xftp
akira
   98
akira  
   2021 年 6 月 26 日
需要编译的 本地编译好,sftp 上传到服务器
不需要编译的 服务器端直接修改
vibbow
   99
vibbow  
   2021 年 6 月 26 日
小公司当然是直接 sftp 拖文件 😂
xuanbg
   100
xuanbg  
   2021 年 6 月 26 日
自然是 jenkins 点一下构建就行了
第 1 页
共 2 页
12
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 204ms · 3.9.8.5