有很多小公司,因为前期就是为了快速出产品,所以什么东西都从简。大厂的同学们来分享一下,你觉得虽然有点耗费成本,但是很有必要的技术或者是开发理念吧。我先从自己经历说两个抛砖引玉
其实还有很多,比如 TDD ,UI test(automation + screenshot),微服务+bff 模式,可能小公司也没有。只是抛砖引玉,希望大厂同学不吝赐教,分享一些好的东西,让小公司的同学也都有机会了解一些更高级的东西。毕竟网上宣传的技术不一定好用,还是得真的在环境里面用过才有发言权。
![]() | 1 ericgui 2021-12-17 07:23:52 +08:00 “跨系统开发环境” 我司这么大都没有 我们只能用 windows 写前端,你感受一下 |
2 caixiangyu17 OP @ericgui Windows 的 docker 很蛋疼,不过好像也可以解决,我们团队里面也有一些人用 windows ,之前是又一些抱怨,不过貌似花时间解决了。 |
![]() | 3 murmur 2021-12-17 07:57:29 +08:00 第二个还真的很蛋疼,不是有脚手架么,非得整 docker |
![]() | 4 vruzo 2021-12-17 07:59:03 +08:00 via iPhone 我司虽然上市公司…不过这些都没有,全靠人工测,对这些还是蛮感兴趣,不过现有流程不支持尝试 |
![]() | 5 MrGba2z 2021-12-17 08:07:11 +08:00 ![]() ; Monorepo + 索引 /搜索 + 唯一版本的依赖 唯一版本依赖: 1. 坏了有别人也会发现 2. 不用关心用哪个依赖, 适配最新就行. Monorepo: 好抄 /读类似系统源码, 知识共享, 方便 debug ; Intention-based 持续部署 描述你想要的生产环境是怎样的, 系统持续部署你定义的生产环境. ; 不算技术但同样重要: Blameless culture (出了故障不应该责备任何人, 重要的是如果设计 /改进系统来防止有类似的事情继续发生) |
&nsp; 6 caixiangyu17 OP @murmur 在有些情况还是很有意义的。举个例子,一个后端项目,肯定是要有数据库吧,那么你作为开发需要先在本机安装配置数据库吧,有些人写脚本可能喜欢用 bash ,有些人可能用 python ,如果是 windows 环境,这两个你都需要配置才能让他运行吧。本地测试数据库和接口测试数据库最好分开吧,这也需要配置。但是如果用 docker ,至少开发环境,你只需要考虑你自己的主开发语言环境,什么数据库,什么脚本语言,通通不用配置。我们的项目现在基本上可以说一个新人来了,装个 java ,装个 docker ,装个 idea 。不算下载时间,配置十几分钟就能跑起来。我相信还是有一些项目新人来了,各种库报错,各种配置不知道怎么改,新人自己又未必能解决,问别人又可能要等,来了一整天都运行不了的情况还是有的。至少我现在回想我以前的公司,就有这种情况。 |
![]() | 7 ragnaroks 2021-12-17 08:42:59 +08:00 windows 上的 docker 确实蛋疼,官方支持版是个虚拟机,企业版是 docker EE (WCOW) 而且有重大 BUG |
![]() | 8 sagaxu 2021-12-17 08:47:48 +08:00 via Android 后端项目,本地不运行,写好了发布到测试环境自测。因为很多 service 本地没有,只能在测试环境调用,本地要跑起来要 mock 太多的东西了。 |
![]() | 9 JsonTu 2021-12-17 08:50:37 +08:00 这两天在研究 docker 跨主机通讯,使用 weave net 做 docker 网桥,服务还得主备,哎 |
10 wzzzx 2021-12-17 08:51:09 +08:00 这个跨系统开发能力是不是每个项目一个 docker ?可以展开说说嘛?我很有兴趣 |
![]() | 11 labulaka521 2021-12-17 09:04:49 +08:00 via iPhone 小公司,后端用 grpc ,然后用 envoy 转换 http 和 grpc ,前端根据后端的 proto 生成 api 直接调用 |
![]() | 12 sadfQED2 2021-12-17 09:08:24 +08:00 via Android ![]() Clickhose,tidb 相见恨晚,去他妈的 mysql |
![]() | 13 tomczhen 2021-12-17 09:11:21 +08:00 via Android 我是来酸的。好了,好了,知道大厂有牛逼的高级工具了。 一不说具体的 workflow ,二不说工具基本原理,除了让小公司的同学知道大厂有个牛逼的高级工具之外有啥用处? |
![]() | 14 plko345 2021-12-17 09:16:00 +08:00 via Android 请教 pre-push 没太明白,不先 push 是怎么触发 pipeline 的 |
![]() | 15 tomczhen 2021-12-17 09:18:34 +08:00 via Android @plko345 本地 git hook ,触发本地的检查。远程仓库也有 hook ,都能达到一样的目的。 https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90 |
![]() | 16 nicktogo 2021-12-17 09:19:42 +08:00 想了下,挺喜欢公司的一些工具的,可能其他公司也有: 1. logger ,一条龙从头到尾,从写入,储存,数据分析工具全包了,只要自己定义 fields ,在代码里 call 就好了。 2. Async task scheduler ,定时任务。 3. 远程服务器开发,要有的时候 claim 一个服务器,VS code 连上,master 代码都已经准备好了,服务器就是一个完整的应用实例,实际环境有的这都有(至少看起来是,怎么搞的不太清楚)。 即使没有 commit 也自动备份代码,这个好用,可以恢复到任意其他的服务器上。 4. VS code 用 UI 操作代码分支,支持各种操作,方便。命令行已经忘光。 5. 全公司用一个代码库,所以可以大范围地代码搜索,不会写 /用,搜一搜就有大量例子。 。。。 |
17 sdwgyzyxy 2021-12-17 09:22:32 +08:00 windows 主要是 volume 导致的体验不好,如果用 sftp 本地开发,就不会有这个问题,想使用 volume 的话用 ubuntu ,我们也是搞了一键启动的 docker-compose ,而且很多基础镜像都备份到自己的阿里云账号下了,一直使用官方的要小心他们哪天改东西,然后项目就出一些莫名其妙的问题。 |
![]() | 18 superchijinpeng 2021-12-17 09:27:59 +08:00 Kyuubi |
![]() | 19 superchijinpeng 2021-12-17 09:28:05 +08:00 Iceberg |
21 xylophone21 2021-12-17 09:43:07 +08:00 1 为什么不在 PR 里做呢?先推到个人分支,然后在个人分支里检查,检查通过再找人工走读,最后 merge |
![]() | 22 WhereverYouGo 2021-12-17 10:12:32 +08:00 歪个楼,14 15 楼是情头? |
![]() | 23 WhereverYouGo 2021-12-17 10:12:59 +08:00 @sweetsorrow211 #22 说错了,是 15 16 楼 |
![]() | 24 SmiteChow 2021-12-17 10:23:03 +08:00 只要技术目标是解决规模化(业务或人力)问题的,对小企业来讲都没用。 |
25 Austaras 2021-12-17 10:40:35 +08:00 第一点属实没必要,你们没有内部开发平台和 CI 流水线的吗,在本地跑太耽误事了 |
26 Austaras 2021-12-17 10:41:21 +08:00 只要 merge 到 master/dev/online 之前保证 CI 能过不过不让合不就完了 |
![]() | 27 Chism 2021-12-17 10:43:39 +08:00 最近不少这种镜像帖子。。 |
28 caixiangyu17 OP @wzzzx 其实是本地开发,大多数都是脚本的功劳,docker 的目的是尽量少依赖本地环境。让新人或者是换新电脑能够快速搭建开发环境。 比如我自己的小项目,每次换新电脑,只需要安装 nodejs (如果只跑也可以不用,就相当于部署在本机而已,用 docker 启动,不过开发 node 后端肯定还是要的),docker 和 java (我用的工具是 kotlin 写的,叫做 batect ,同事开发,现在几乎全公司推广)。之后所有需要的比如启动数据库,跑 linting ,unit test ,api test ,各种安全检查。都可以用命令启动配置好的不同的 docker 镜像,在里面执行。当然这些只用脚本也能完成,但是不同的 task 依赖的工具你得一点一点装,mac 上还好点 brew install 比较方便,但也得一个一个装,这样才能保证所有 task 都能运行,windows 上就更加麻烦了。 所以这东西就是前期配麻烦,弄好了之后,以后每个项目都类似,基本这些 task 每个项目都需要,用起来很方便 |
29 caixiangyu17 OP @Austaras 我反而觉得第一个挺重要,我之前的公司就是小公司,pipeline 挺全的,有各种测试,但是如果挂了就会 block 后面人的 build 。如果不修好,后面人的代码就没法发布到 test server ,就没法让 QA 测。但是因为也不是 tdd ,只是想起来哪里需要 unit test 就加哪里,所以经常有人不跑 unit test 就提代码,然后也不看 pipeline 挂了没有。所以每次后面的人还要去看是谁 block 了 pipeline ,发消息让他改。一个小时你的代码能上 test server 就不错了,十分影响效率。但是有 prepush 之后,push 前强制跑,跑不过不让 push ,虽然浪费点时间,但是我们都是每天下班前 push ,或者 push 的时候就当休息,喝点水聊聊天,也并不影响什么。但是解决的问题确是实实在在的。 |
![]() | 30 Canon1014 2021-12-17 11:15:57 +08:00 @sweetsorrow211 #22 歪个楼,你和 20L 也有那味了 |
![]() | 31 asanelder 2021-12-17 12:44:24 +08:00 ![]() 相比小公司的那个贴子, 大厂的同学都好吝啬啊~~~ |
32 caixiangyu17 OP @asanelder 可能大厂的同学没空逛 v 站吧 |
![]() | 33 NVDA 2021-12-17 12:51:14 +08:00 via iPhone 说个跟技术无关的,internal wiki |
34 Austaras 2021-12-17 13:00:37 +08:00 @caixiangyu17 用 git workflow 每个人都有自己的分支不就完事了,然后测试服务器也做好分支切换 |
35 rouzip 2021-12-17 13:18:36 +08:00 lynx 类前端体验多端开发(但是这算是好技术嘛 orz |
36 caixiangyu17 OP @Austaras 的确如果你们 github 上配置了每个分支在 pr 时必须跑过 pipeline 才能 merge ,的确可以防止这个问题。不过我们是 tbd ,所以没有 branch ,需要 prepush |
![]() | 37 rioshikelong121 2021-12-17 13:37:16 +08:00 使用 Proxy 来在本地连接 /切换多套环境. |
38 xy90321 2021-12-17 13:48:13 +08:00 via iPhone 对于传统 IT 企业的巨型屎山项目来说 pipeline 真的很难运转起来。就算 UT 都能过,但是跑一次要半小时以上谁受得了 |
![]() | 39 AmberJiang 2021-12-17 14:07:37 +08:00 @Canon1014 哈哈哈哈 歪个楼 你也发现了 有两组情头 |
![]() | 40 WhereverYouGo 2021-12-17 14:07:53 +08:00 @Canon1014 #30 淦 |
![]() | 41 cassyfar 2021-12-17 14:19:42 +08:00 傻瓜式包管理加编译,我编了几年 java 都不知道 maven 和 gradle 是啥。 傻瓜式一键部署生产环境 + CICD ,我现在对着 k8s 真的欲哭无泪,太难用了。 |
![]() | 43 litchinn 2021-12-17 14:41:00 +08:00 @sweetsorrow211 你不说我都没发现,一眼扫下来以为是一个人的连续发言, |
![]() | 45 pengtdyd 2021-12-17 14:44:42 +08:00 绝对是 Git 大部分公司都用不明白 |
![]() | 46 NVDA 2021-12-17 14:56:35 +08:00 via iPhone @litchinn 目测是亚麻的 brazil build 和 pipeline 吧,Brazil build 是挺复杂的一个东西,小公司不一定有那个能力 /人力去做; pipeline aws 上有类似的 code pipeline |
47 Austaras 2021-12-17 15:07:55 +08:00 tbd 是啥 |
49 hahaFck 2021-12-17 16:18:06 +08:00 你们的 docker 支持 m1 电脑么? |
![]() | 50 Chrisssss 2021-12-17 17:15:38 +08:00 serveless ,基建做好了上层写起来真的舒服。 |
![]() | 51 zongren 2021-12-17 17:41:30 +08:00 有一说一,docker 统一开发环境深得我心 |
![]() | 52 nicebird 2021-12-17 18:04:21 +08:00 两个都还行 |
53 MegrezZhu 2021-12-17 18:12:20 +08:00 不算技术的一个东西,readability review ,所有 PR 不仅要 code owner 给过,还得额外(如果 owner 没有)找有代码可读性认证的人过一遍检查代码风格跟最佳实践之类的东西 |
54 LING97 2021-12-17 18:55:49 +08:00 什么好技术不敢说,只能说各种基础设施非常完备。我倒是希望能进这些基础平台部门,这才是锻炼技术 |
55 caixiangyu17 OP @Austaras trunk based development |
![]() | 56 ScepterZ 2021-12-17 19:25:55 +08:00 感觉无非是一些公司自己开发 /魔改的东西,小公司不想自己开发也有开源的用,没啥很独特的 |
57 kidonng 2021-12-17 21:27:02 +08:00 via Android @sweetsorrow211 都是用 FaceYourManga 做的 |
![]() | 58 zu1y 2021-12-18 01:17:33 +08:00 ![]() 推荐一个 百度开源的 amis 框架,使用 json 配置写页面。 封装后管理后台整体的基础框架后,开发一些内部常用的增删改查的页面只需要十来分钟,热更新,修改不用部署。 特别是结合他的可视化编辑器以及后端相关的代码生成机制后,一个页面点击一下就能生成主体内容,只需要改下组件类型就能上线。 (身为一个后端开发,之前写一个管理后台页面,用 Vue 开发,简单点的页面也得一两个小时,复杂点的大半天都搞不定,用了 amis 之后基本上没有一个页面开发能超过半个小时 |
![]() | 59 clockwork1122 2021-12-18 22:50:26 +08:00 @nicktogo 全公司一个库的话不担心代码泄露吗 |
![]() | 60 leishi1313 2021-12-19 01:57:45 +08:00 via Android @MrGba2z 浓浓的谷歌味 |
![]() | 61 WhereverYouGo 2021-12-20 09:59:47 +08:00 @kidonng #57 原来如此 |