据我所知,大公司的代码上线流程一般都会很规范,有专门的代码发布系统。但小公司的话,可能会没有实力去开发这种发布系统,所以想了解下这个问题。
如果是我的话,我的做法应该是: 首次部署使用 git clone,后续代码的变更则使用 git pull
这种做法好不好?或者有没有更好的做法呢?
![]() | 1 en20 2021-06-25 15:46:34 +08:00 现在的公司是专人切 tag,上 rc,验收通过由测试提服务器发布申请. 以前的小公司是自己打包好然后 ftp 丢上去 |
2 whileFalse 2021-06-25 15:58:28 +08:00 via iPhone ![]() git pull 容易自动合并或者卡在冲突(如果有闲人手动改了东西)。不如 git fetch ; git resethard ; git clear 不过话说回来,现在不应该都 docker 了么。 |
3 xwayway 2021-06-25 16:11:42 +08:00 再小的公司,部署一个 Jenkins 很困难? |
![]() | 4 sugarkeek 2021-06-25 16:13:24 +08:00 jetbrains idea 直接 deploy /doge |
5 wangkun025 2021-06-25 16:13:56 +08:00 我是全干。 使用 capistrano 自动化部署。 |
![]() | 6 KagurazakaNyaa 2021-06-25 16:14:16 +08:00 推 docker 镜像上去,然后 kubectl apply -f |
![]() | 7 Obrigado0815 2021-06-25 16:18:01 +08:00 之前小公司:前后端各自手动部署,nginx 现在颇有规模的公司:jenkins |
8 yitingbai 2021-06-25 16:18:37 +08:00 打包 jar, 然后用宝塔传上去, 再启动 tmux 执行命令 java -jar xxxx |
9 Quarter 2021-06-25 16:19:18 +08:00 via iPhone 愚蠢的我还不太会用 jenkins,用的 minio 上传部署文件,然后定时任务执行脚本,如果扫描到文件就脚本部署,比较 low |
![]() | 10 pkoukk 2021-06-25 16:21:51 +08:00 gitlab ci |
![]() | 11 young 2021-06-25 16:26:23 +08:00 sftp |
![]() | 12 sparrww 2021-06-25 16:31:42 +08:00 反正核心就一两个开发人员,怎么方便怎么来呗 |
![]() | 13 code4you 2021-06-25 16:37:53 +08:00 ![]() 打开 SFTP 软件 然后把代码拖入到文件夹 我猜的 |
14 zardly666 2021-06-25 16:38:46 +08:00 本地提交带 dockerFile------gitlab------阿里云容器镜像----阿里云 k8s |
![]() | 15 taowen 2021-06-25 16:40:19 +08:00 生产环境可不只是后端的生产环境,小程序呢,iOS 呢,各种外部集成和配置呢。 |
![]() | 16 wjfz 2021-06-25 16:40:36 +08:00 ![]() |
17 leafre 2021-06-25 16:51:58 +08:00 via Android ![]() Jenkins & docker compose |
![]() | 18 Kimen 2021-06-25 16:53:47 +08:00 我自己接的私活都是 jenkins+docker |
![]() | 19 polyang 2021-06-25 16:55:09 +08:00 git pull ?你也不怕有冲突啥的?一般都是打 tag 吧 |
![]() | 20 rockyliang OP |
![]() | 21 rockyliang OP @wjfz 感谢分享,这个看起来比其他人说的 jenkins 更容易使用一些 |
![]() | 22 willis 2021-06-25 16:59:35 +08:00 ansible |
![]() | 23 rockyliang OP @polyang 因为线上服务器的代码一般都是禁止直接修改的吧,所以冲突发生的概率应该会很低 |
![]() | 24 remember5 2021-06-25 17:07:27 +08:00 gitlab ci +1 |
25 yunye 2021-06-25 17:08:46 +08:00 buddy.works |
![]() | 26 killva4624 2021-06-25 17:09:39 +08:00 ![]() 小公司搞 docker 更省事~不用云上 k8s 的话,docker-compose run 都行 |
![]() | 27 xuxuxu123 2021-06-25 17:13:03 +08:00 ![]() 阿里云云效 2020,30 人一下的团队可以申请免费; 包括云代码管理,项目管理,流水线部署等~~~ |
![]() | 29 kera0a 2021-06-25 17:16:25 +08:00 via iPhone 小公司也可以部署一个 gitlab 吧,后端前端客户端都能自动化部署。 有挺多的开源第三方工具可以帮小公司处理好。 |
![]() | 30 victor 2021-06-25 17:17:53 +08:00 Github Action = CI,阿里云 Flow = CD,公司技术就 1 个全职,2 个兼职的时候就这么做 |
![]() | 31 nuanshen 2021-06-25 17:19:48 +08:00 Jenkins 就挺好用的 |
![]() | 32 labulaka521 2021-06-25 17:22:29 +08:00 k8s + gitlab+gitlan-ci |
![]() | 33 labulaka521 2021-06-25 17:22:46 +08:00 @labulaka521 gitlan-ci ->> gitlab-ci |
34 myd 2021-06-25 17:30:53 +08:00 git pull 一下 |
![]() | 35 mahone3297 2021-06-25 17:32:30 +08:00 都那么高级的吗? 不是 sftp 上传? |
![]() | 36 DUDUHA 2021-06-25 17:36:35 +08:00 ①直接上手,sftp ②打包成 docker,docker run ③devops 流程走起来,gitlab+jenkins+harbor+k8s ④现成开源代码发布工具,walle ; spug 等等 |
37 LimeQAQ 2021-06-25 17:40:14 +08:00 via iPhone 备份原 class 文件,关掉 tomcat,上传本地编译后的 class 文件,启动 tomcat 。 |
38 LimeQAQ 2021-06-25 17:41:44 +08:00 via iPhone @mahone3297 远程桌面 ctrl c v |
39 cbasil 2021-06-25 17:43:28 +08:00 php 直接 ftp... |
![]() | 40 keepeye 2021-06-25 17:44:00 +08:00 真是高大上,感觉大炮打蚊子。我们项目都是 go 的,编译好了直接 rsync 丢到服务器,再重启下服务就可以了,十几台服务器就是这么管理的,轻松无压力。另外好几百台 python 的服务器是通过 pscp + pssh,一个脚本搞定。 |
41 way2create 2021-06-25 17:44:33 +08:00 我能决定就按我喜欢。。。决定不了领导说啥是啥 |
42 hkllzh 2021-06-25 17:46:38 +08:00 ![]() 后端 Spring Boot 体系。本地打包,上传 jar 。不管线上用户,直接重启 java 进程。就是暴力操作。 |
![]() | 43 CantSee 2021-06-25 17:53:00 +08:00 人肉上线 |
![]() | 44 karott7 2021-06-25 17:57:59 +08:00 自己学 jenkins 在测试服务器搭了个,我管理五个项目,之前每次都是手动发布测试服,累死了,还容易搞混。 docker 还不熟,想之后有空 docker+jenkins 搞个多分支发布流程 |
45 wengych 2021-06-25 17:58:24 +08:00 小公司管那么多干嘛,scp 不就得了,用 xftp |
![]() | 46 litchinn 2021-06-25 18:00:14 +08:00 CI 工具,比如 Jenkins 这种,真的好用,而且看起来难,自己操作一遍真的不难 |
47 srx1982 2021-06-25 18:02:43 +08:00 小公司,k8s + gitlab-ci |
![]() | 48 dabaibai 2021-06-25 18:07:07 +08:00 jenkins 足矣 |
49 ccagml 2021-06-25 18:08:12 +08:00 via Android winscp 手动拉文件? |
50 GM 2021-06-25 18:12:25 +08:00 不是很明白楼上说的冲突什么的,服务器那边只更新、不提交,git pull 怎么会有冲突? |
![]() | 51 lyusantu 2021-06-25 18:12:41 +08:00 IDEA 有一个 Alibaba Cloud Toolkit 插件,一键打包部署至服务器然后执行脚本 |
52 atpking 2021-06-25 18:24:59 +08:00 capistrano 一把梭 |
53 keifafa 2021-06-25 18:28:20 +08:00 前东家的项目,因为大家手里都没有完整的代码,而且隔离网络环境只能使用光盘拷贝,所以只能到服务器上替换 class 文件,有时候线上的代码和手里的完全不一样还需要反编译然后用手敲到自己电脑上 |
54 xiaojun1994 2021-06-25 18:29:16 +08:00 ftp |
![]() | 55 ysicing 2021-06-25 18:30:48 +08:00 gitlab + (gitlab-ci/drone) + k8s drone-kube 弹按需 pod 构建 |
![]() | 56 sadfQED2 2021-06-25 18:35:36 +08:00 via Android ![]() Go 项目,本地编译,scp 到服务器,然后重启项目。我现在正在写事故报告,因为我 scp 错文件了。 |
![]() | 57 rockyliang OP @keepeye 看来是大公司,几百台服务器这么豪气,哈哈哈哈 |
58 chenqh 2021-06-25 18:43:53 +08:00 ansible 一把锁 |
![]() | 60 kop1989 2021-06-25 18:46:16 +08:00 via iPhone 复制 粘贴 |
![]() | 61 johnsona 2021-06-25 19:04:36 +08:00 叫小作坊 |
![]() | 63 sagaxu 2021-06-25 19:19:49 +08:00 via Android ![]() 我大 PHP 直接登陆到生产环境,线上改代码然后 F5 刷新页面看效果,改好了把代码拷一份下来 |
![]() | 64 xyooyx 2021-06-25 19:21:35 +08:00 我用双手成就你的梦想 |
![]() | 65 atx 2021-06-25 19:22:45 +08:00 ![]() rz -be rm -rf / opt/www/app ^C ^C ^Z |
![]() | 66 LowBi 2021-06-25 19:30:17 +08:00 via Android 直接远程服务器桌面放 jar 包 |
![]() | 67 cyrivlclth 2021-06-25 19:56:37 +08:00 建议用 docker,用 docker-compose run 就行了,万一要回滚还有救。 |
![]() | 68 zhtttyecho 2021-06-25 20:14:50 +08:00 ftp... |
70 joApioVVx4M4X6Rf 2021-06-25 20:20:10 +08:00 可以选择用 ansible 之类的开源软件 |
71 fengpan567 2021-06-25 20:22:06 +08:00 jenkins |
72 cs419 2021-06-25 20:22:12 +08:00 ![]() 自动化限制了大家的想象 1. 系统用 windows 2. eclipse / idea 直接启动 3. mvn tomcat 4. java -jar springboot.jar |
![]() | 73 yhxx 2021-06-25 20:23:19 +08:00 我见过这种操作: Vue 的前端项目 ftp 拖到服务器上,npm install,npm run dev 然后线上访问地址是 10.xx.xx.xx:8080 |
![]() | 74 strong>kongkongyzt 2021-06-25 20:41:59 +08:00 后端 PHP 和 Go, 部署是用的 CI(Coding) + tkex(k8s) + docker, 非常非常方便 |
75 sleshep632 2021-06-25 20:47:50 +08:00 jenkins + ansible |
76 Lemeng 2021-06-25 20:56:08 +08:00 方法太多,也简单,怎么方便怎么来 |
![]() | 77 dajj 2021-06-25 21:18:36 +08:00 就算什么都没有, 用 git 的钩子写个脚本都能自动部署 |
78 hteen 2021-06-25 21:25:10 +08:00 小公司 spug 可以 |
![]() | 79 wingoo 2021-06-25 22:08:57 +08:00 小公司更要全部上云+自动部署 |
![]() | 80 rekulas 2021-06-25 22:21:51 +08:00 @GM 应该是指有人直接线上改过东西,确实有这种情况我也遇到过。。。另外就算不冲突 pull 更新貌似也不是安全的,有可能出现部分代码更新来请求导致 bug,大公司就我所知一般是开新目录然后 nginx 无缝切换过去 不过我们也还是选择的直接 pull 更新,因为还是小公司。。。 |
![]() | 81 everyx 2021-06-25 22:27:49 +08:00 via Android docker swarm + 手动更新镜像 |
![]() | 82 hsowan 2021-06-25 22:36:40 +08:00 Jenkins: Build great things at any scale |
![]() | 83 Felldeadbird 2021-06-25 22:53:35 +08:00 我一直 SFTP 传上去的。将要上传的文件 通过 GIT 导出差异。 |
![]() | 84 Soar360 2021-06-25 23:02:16 +08:00 如果是 .NET 项目的话,可以参看: 使用批处理(.bat)文件一键编译 .NET CORE 网站并发布至 IIS https://www.coderbusy.com/archives/1595.html |
![]() | 85 rockyliang OP @sagaxu 牛逼,如果出 bug 了怎么办,直接线上修 bug 吗 |
86 pigspy 2021-06-25 23:17:01 +08:00 gitlab ci 挺好用的 |
![]() | 87 awing 2021-06-25 23:32:14 +08:00 有 CI/CD 吗?没有,那就这样: ```bash tar -cJf - ./xxx | ssh user@hostname 'tar -xJf -' ``` |
88 jingkaimori 2021-06-25 23:33:38 +08:00 @GM 生产环境的合并也不总是 fast foward,git pull 在相似代码格式变动后的自动合并能治好低血压 |
89 coolcoffee 2021-06-26 00:00:54 +08:00 ![]() 直接专门有个分支来 git pull 也是没问题的,已经算是有点流程了, 只要别让其他人有权限直接去改文件内容。 但更好的办法就用 git tag,每次发版本的是都打出一个 tag,然后远程去 check git tag 或者用 CICD 流去更改生产服务器的内容。 打 tag 的好处就是方便有个版本回滚,万一这次发的版本有问题,迅速找到上次发版正常的 tag 再发一次就能回滚完成。 |
90 dayeye2006199 2021-06-26 00:04:31 +08:00 ![]() github actions + skaffold 部署到 k8s 感觉这个和公司大小没关系,本身也没特别复杂,就看你们的工程实践是不是重视。 大部分没法自动化部署我觉得都不是工具系统不足的问题,主要是 1. 心态 - 不信任自动化部署、连续部署 2. 不写测试 - 没有 CI,上线心慌慌 3. 政治 - 运维表示我不是没活干了 |
![]() | 91 sagaxu 2021-06-26 00:04:59 +08:00 @rockyliang 出 bug 再登上去现场改啊,调试的时候来点 exit(json_encode(xxx))也是日常操作了 |
![]() | 92 shayuvpn0001 2021-06-26 00:14:19 +08:00 @rockyliang 现在都 DevOps 了,一边开飞机一边修飞机是基操了吧。 |
![]() | 94 timothyye 2021-06-26 00:25:27 +08:00 GitLab -> GitLab CI runner -> Docker Image -> Harbor -> K8S |
![]() | 95 FarAhead 2021-06-26 01:03:46 +08:00 cap deploy |
![]() | 96 zhjy23212 2021-06-26 01:13:45 +08:00 docker 打包,还在用 docker swarm,写了个 makefile,make stop make restart |
![]() | 97 MarkLeeyun 2021-06-26 01:31:40 +08:00 xftp |
![]() | 98 akira 2021-06-26 01:42:18 +08:00 需要编译的 本地编译好,sftp 上传到服务器 不需要编译的 服务器端直接修改 |
![]() | 99 vibbow 2021-06-26 03:40:25 +08:00 小公司当然是直接 sftp 拖文件 |
![]() | 100 xuanbg 2021-06-26 05:39:00 +08:00 自然是 jenkins 点一下构建就行了 |