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

姑且算是一个 CI 实践(多图慎点)

  •  3
     
  •   mritd ·
    mritd · 2018-06-20 11:23:00 +08:00 · 4351 次点击
    这是一个创建于 2348 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看见有人在讨论 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

    gitflow

    提交格式规范后生成 CHANGELOG

    refs: https://github.com/git-chglog/git-chglog

    changelog

    不同分支名称、多分支等用于 CI 触发(GitLab CI),CI 已经对接了 Kubernetes

    refs: https://mritd.me/2017/11/28/ci-cd-gitlab-ci/

    ci

    IM 对接

    im

    目前缺失的:

    CI Bot: 正在开发中,以前的基于 Hubot 造过一个,不过不喜欢 node,准备对接 tg 用 go 重新造一个

    其他的还有 sentry 什么乱七八糟的就不说了

    27 条回复    2018-06-22 00:48:18 +08:00
    mritd
        1
    mritd  
    OP
       2018-06-20 11:31:18 +08:00
    Immortal
        2
    Immortal  
       2018-06-20 11:33:30 +08:00
    一直也想有这么一个实践 想问下楼主学习和入门从何开始 还有楼主觉得有用的资料和链接能分享么
    mritd
        3
    mritd  
    OP
       2018-06-20 11:34:30 +08:00
    @Immortal #2 上面 refs 已经有相关链接
    mritd
        4
    mritd  
    OP
       2018-06-20 11:35:23 +08:00
    @Livid imgur markdown gifv 格式为毛线 总是在链接( https://xxx) 前面加一个空格?我改成 gif 就好了
    mritd
        5
    mritd  
    OP
       2018-06-20 11:35:52 +08:00
    哇.....上面的回复又加了一个
    feiyuanqiu
        6
    feiyuanqiu  
       2018-06-20 11:38:01 +08:00
    赞赞赞
    ShineSmile
        7
    ShineSmile  
       2018-06-20 11:49:24 +08:00
    gitlab 的 runner 用过一段时间 还是很爽的
    git 成也分支 败也分支 svn 没有分支只有目录
    mritd
        8
    mritd  
    OP
       2018-06-20 11:50:40 +08:00
    @ShineSmile #7 runner daocker 启动 还是挺舒服的,然后 build 也走 docker 容器,不过 cache 稍微有点麻烦
    gamexg
        9
    gamexg  
       2018-06-20 12:09:17 +08:00
    请教 gitlab runner 是部署在国内还是国外?
    国内受网络影响很难用,有什么比较好的解决办法吗?
    mritd
        10
    mritd  
    OP
       2018-06-20 12:18:53 +08:00
    @gamexg #9 黑人问号.gif

    什么网络影响 (´・_・`)?
    gitlab ce 私有化部署,然后再部署一个 gitlab runner 链接就行啊,都是内网私有化啊
    gamexg
        11
    gamexg  
       2018-06-20 12:39:26 +08:00 via Android
    @mritd docker 基础镜像、apt 包、pip 库 等等,只能一个一个解决,挺烦。
    mritd
        12
    mritd  
    OP
       2018-06-20 13:26:10 +08:00 via iPhone
    @gamexg 这个没麻烦啊,基础镜像做好了就行了,dockerfile 写好 有 cache 的,https://mritd.me/2017/11/12/ci-cd-dockerfile/
    ShineSmile
        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 一键发布
    失去了对脚本的研究动力
    可能还是团队规模太小吧
    mritd
        14
    mritd  
    OP
       2018-06-20 13:56:31 +08:00
    @ShineSmile #13 runner 直接调用脚本应该是可以的,不过我记着 .net 后端项目好像可以在 docker 里跑,然后扔在 linux 上
    ShineSmile
        15
    ShineSmile  
       2018-06-20 14:10:41 +08:00
    @mritd dotnet core 可以的。
    dotnet fx 只能运行在 windows 的 docker 中。
    例如 nano server

    好像巨硬的 service fabric 是做 windows 容器调度的。
    遗憾的是同样没细研究过……
    lt450196683
        16
    lt450196683  
       2018-06-20 14:20:27 +08:00
    学习,嵌入式的环境。。docker 可以模拟么。。例如 wince/Android/mcu。。
    ShineSmile
        17
    ShineSmile  
       2018-06-20 14:22:13 +08:00
    @lt450196683 LXC 了解一下?
    feiyuanqiu
        18
    feiyuanqiu  
       2018-06-20 15:10:44 +08:00
    @mritd 关于 Angular git commit message,我有一个疑问想请教一下,

    开发新功能用 feature 做 commit tag,处理生产问题用 hotfix tag,是吧?
    那开发时,处理新 feature 的 bug,提交时应该用什么 tag 呢?
    mritd
        19
    mritd  
    OP
       2018-06-20 15:19:01 +08:00
    @feiyuanqiu #18 我目前的做法是,commit message 中对于修复性提交全部走 `fix(scope): subject` 这种格式;分支名称上,对于新功能应当从 develop checkout 新分支,且以 `feat/xxxx` 形式命名,只会合并到 develop 分支;对于线上问题紧急修复,从 master 创建分支,以 `hotfix/xxxx` 命名,ok 后同时合并到 master 与 develop ;最终原则是 master 要时刻保持和生产一致,develop 作为开发日常修改
    mritd
        20
    mritd  
    OP
       2018-06-20 15:20:37 +08:00
    @feiyuanqiu 其实 gitflow 目前没有完全的统一标准,这东西存在的意义就是对 提交修改清晰化、测试部署流程化,你只要在几大模型中找寻出适合你的就可以
    feiyuanqiu
        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 里吧?
    mritd
        22
    mritd  
    OP
       2018-06-20 15:53:21 +08:00   ❤️ 1
    @feiyuanqiu #21 这个是个粒度问题,如果你的提交以功能为单位,那么当一个功能 ok 以后应当放入 测试环境测试,这时候有问题进行 fix 我感觉在 CHANGELOG 里是没什么问题的;如果以修改为单位提交 那么出现在 CHANGELOG 里会有点多,可以考虑用其他的;

    那个 CHANGELOG 生成工具可以自己定义的

    还有就是实际上这个 CHANGELOG 应该是面向开发人员的,我感觉多点少点无所谓,我只是想通过看到每个版本之间我们开发变动了什么东西;而对于类似 app 发版啥的这种 CHANGELOG 肯定是手写一个符合普通大众理解的
    gamexg
        23
    gamexg  
       2018-06-20 20:33:36 +08:00 via Android
    @mritd 恩,docker 单独使用有 cache。
    不过 gitlab runner 时没 cache 了,我记得好像有命令能开启。
    不过直接把 runner 放到国外解决了所有问题,没在细看。😁😁😁
    dexterzzz
        24
    dexterzzz  
       2018-06-20 21:59:18 +08:00
    CI,CD 去看下 TFS,VSTS 什么才是业界最强
    mritd
        25
    mritd  
    OP
       2018-06-20 23:01:12 +08:00
    @dexterzzz #24 这个贴子只是我对 opnsource CI 整理的一套工具链,如果硬对比商业版工具我敢保证有很多比它们还牛逼的,就算是商业版也无法做到每个方面都 ok,比如 提交规范、工作流的建立
    johnnie502
        26
    johnnie502  
       2018-06-21 07:35:55 +08:00
    @dexterzzz 又在日常引战
    twistedmeadows
        27
    twistedmeadows  
       2018-06-22 00:48:18 +08:00 via Android
    感谢楼主。最近正好遇到工作上协同缺乏规范的问题,版本控制有点混乱。学习了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   912 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:06 · PVG 06:06 · LAX 14:06 · JFK 17:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.