看见有人在讨论 git、svn 哪个好,都喷起来了;当然我是选择 git 的,svn 可能人家也有成熟的解决方案,这里我只是想单纯的给出一个我们目前 git 的方案;如果有其他大佬有更好的方案欢迎提出。(本帖禁止鄙视链、无脑喷)
主要涉及: GitLab、GitFlow、Mattermost、Docker、Kubernetes
先上几张图:
GitFlow 负责保证提交格式、分支名称足够规范
refs: https://mritd.me/2017/09/05/git-flow-note/
refs: https://github.com/mritd/gitflow-toolkit
这张图片保存后总是自动加空格 https://i.imgur.com/vcNUo3h.gifv mmp
提交格式规范后生成 CHANGELOG
refs: https://github.com/git-chglog/git-chglog
不同分支名称、多分支等用于 CI 触发(GitLab CI),CI 已经对接了 Kubernetes
refs: https://mritd.me/2017/11/28/ci-cd-gitlab-ci/
IM 对接
目前缺失的:
CI Bot: 正在开发中,以前的基于 Hubot 造过一个,不过不喜欢 node,准备对接 tg 用 go 重新造一个
其他的还有 sentry 什么乱七八糟的就不说了
1
mritd OP |
2
Immortal 2018-06-20 11:33:30 +08:00
一直也想有这么一个实践 想问下楼主学习和入门从何开始 还有楼主觉得有用的资料和链接能分享么
|
4
mritd OP @Livid imgur markdown gifv 格式为毛线 总是在链接( https://xxx) 前面加一个空格?我改成 gif 就好了
|
5
mritd OP 哇.....上面的回复又加了一个
|
6
feiyuanqiu 2018-06-20 11:38:01 +08:00
赞赞赞
|
7
ShineSmile 2018-06-20 11:49:24 +08:00
gitlab 的 runner 用过一段时间 还是很爽的
git 成也分支 败也分支 svn 没有分支只有目录 |
8
mritd OP @ShineSmile #7 runner daocker 启动 还是挺舒服的,然后 build 也走 docker 容器,不过 cache 稍微有点麻烦
|
9
gamexg 2018-06-20 12:09:17 +08:00
请教 gitlab runner 是部署在国内还是国外?
国内受网络影响很难用,有什么比较好的解决办法吗? |
10
mritd OP |
12
mritd OP @gamexg 这个没麻烦啊,基础镜像做好了就行了,dockerfile 写好 有 cache 的,https://mritd.me/2017/11/12/ci-cd-dockerfile/
|
13
ShineSmile 2018-06-20 13:53:14 +08:00
@mritd 哈哈 我是做.NET Fx 的
gitlab 对我这边的生态唯一一个问题就是不支持直接部署在 windows 上。只能弄个虚拟机凑合一下 当然,runner 是跨平台的。 另外需要注意 runner 的脚本要防注入,控制好分支的权限 当时是通过 gitlab 接触到的 CI 和 CD 以及容器甚至 DevOps 很喜欢这个产品,非常适合开放的团队使用 后面才接触到 jenkins travis 和 appvenyor 也都用过 感觉还是直接拿工具链工具写脚本不受束缚最舒服 遗憾的是现在回到了巨硬的怀抱 auzre portal 上点点点 Visual Studio 一键发布 失去了对脚本的研究动力 可能还是团队规模太小吧 |
14
mritd OP @ShineSmile #13 runner 直接调用脚本应该是可以的,不过我记着 .net 后端项目好像可以在 docker 里跑,然后扔在 linux 上
|
15
ShineSmile 2018-06-20 14:10:41 +08:00
@mritd dotnet core 可以的。
dotnet fx 只能运行在 windows 的 docker 中。 例如 nano server 好像巨硬的 service fabric 是做 windows 容器调度的。 遗憾的是同样没细研究过…… |
16
lt450196683 2018-06-20 14:20:27 +08:00
学习,嵌入式的环境。。docker 可以模拟么。。例如 wince/Android/mcu。。
|
17
ShineSmile 2018-06-20 14:22:13 +08:00
@lt450196683 LXC 了解一下?
|
18
feiyuanqiu 2018-06-20 15:10:44 +08:00
@mritd 关于 Angular git commit message,我有一个疑问想请教一下,
开发新功能用 feature 做 commit tag,处理生产问题用 hotfix tag,是吧? 那开发时,处理新 feature 的 bug,提交时应该用什么 tag 呢? |
19
mritd OP @feiyuanqiu #18 我目前的做法是,commit message 中对于修复性提交全部走 `fix(scope): subject` 这种格式;分支名称上,对于新功能应当从 develop checkout 新分支,且以 `feat/xxxx` 形式命名,只会合并到 develop 分支;对于线上问题紧急修复,从 master 创建分支,以 `hotfix/xxxx` 命名,ok 后同时合并到 master 与 develop ;最终原则是 master 要时刻保持和生产一致,develop 作为开发日常修改
|
20
mritd OP @feiyuanqiu 其实 gitflow 目前没有完全的统一标准,这东西存在的意义就是对 提交修改清晰化、测试部署流程化,你只要在几大模型中找寻出适合你的就可以
|
21
feiyuanqiu 2018-06-20 15:26:48 +08:00
@mritd 不好意思,刚才提问的时候走神了,名称打错了,上一条里面的 `hotfix` 应该是 `fix`
我的疑问主要是因为在你这套流程里面,会用 git-chglog 自动根据 commit message 生成变更说明,所以就比较纠结处理新 feature 的 bug 的 commit message 的 subject 的命名: 如果用 feat 的话,会导致变更说明里的 features 重复; 如果用 fix 的话,其实它们也并不是生产上的问题,没有必要把开发过程中的问题也写到 change log 里吧? |
22
mritd OP @feiyuanqiu #21 这个是个粒度问题,如果你的提交以功能为单位,那么当一个功能 ok 以后应当放入 测试环境测试,这时候有问题进行 fix 我感觉在 CHANGELOG 里是没什么问题的;如果以修改为单位提交 那么出现在 CHANGELOG 里会有点多,可以考虑用其他的;
那个 CHANGELOG 生成工具可以自己定义的 还有就是实际上这个 CHANGELOG 应该是面向开发人员的,我感觉多点少点无所谓,我只是想通过看到每个版本之间我们开发变动了什么东西;而对于类似 app 发版啥的这种 CHANGELOG 肯定是手写一个符合普通大众理解的 |
23
gamexg 2018-06-20 20:33:36 +08:00 via Android
@mritd 恩,docker 单独使用有 cache。
不过 gitlab runner 时没 cache 了,我记得好像有命令能开启。 不过直接把 runner 放到国外解决了所有问题,没在细看。😁😁😁 |
24
dexterzzz 2018-06-20 21:59:18 +08:00
CI,CD 去看下 TFS,VSTS 什么才是业界最强
|
25
mritd OP @dexterzzz #24 这个贴子只是我对 opnsource CI 整理的一套工具链,如果硬对比商业版工具我敢保证有很多比它们还牛逼的,就算是商业版也无法做到每个方面都 ok,比如 提交规范、工作流的建立
|
26
johnnie502 2018-06-21 07:35:55 +08:00
@dexterzzz 又在日常引战
|
27
twistedmeadows 2018-06-22 00:48:18 +08:00 via Android
感谢楼主。最近正好遇到工作上协同缺乏规范的问题,版本控制有点混乱。学习了。
|