沐鸣娱乐


        版本控制指引(版本控制指引是什么)

        概念

        产品版本

        项目/子项目所定义的版本,两节:x.y。如智计划1.2,那么这个产品版本号为1.2。

        工程版本

        代码构建产物的版本。工程版本号通常为四节,x.y.z.build。x.y 继承产品版本号;z在敏捷项目团队中是冲刺编号 ,在瀑布团队中为流水号 。该节用于区分不同的研发、上线周期 ;build为构建流水号 ,通常由构建工具自动生成。

        测试代码同样也有工程版本号 。目前测试代码没有发布流程,也没有通过工具发布 ,所以z.build由测试团队人员自行决定。原则上每一次正式交付 ,变更z 。

        发布标签

        每一次发布到生产,在git代码库中,给对应的commit标记一个标签,值为部署物的工程版本 ,即x.zy.z.build。

        目标

        统一分支管理策略以及定义 。版本化一切 ,最终提高项目的团队合作效率、加速新功能开发和发布管理 。

        原则

        • 采用GitHub Flow策略(推荐)或基于主干开发策略。
        • 要求项目有完善的自动化测试 、持续集成和部署等相关的基础设施。
        • 版本化一切。
        • 团队有代码审查的相应流程。
        • 具备自动部署的条件

        规范

        代码仓库

        • 必须:代码应放在集团统一的代码仓库。
        • 必须:工程的可见性不能设置为public。
        • 必须:只允许给项目相关开发人员配置权限 ,并应该遵循最小授权原则 。
        • 必须:代码项目创建在团队空间内 ,不允许放在个人空间 。
        • 建议:团队空间命名格式为:group/[subgroup]。group为产品线简称,如果产品线有多个子产品 ,再加上subgroup。subgroup为子产品简称。如 gaia/gfs,group=gaia ,subgroup=gfs。
        • 建议 :代码项目命名格式为:项目代号-模块[-子模块][-孙模块]。如 :gaia-gfs-demo,halo-wechat 。这样,GIT中完整的空间-项目名为:gaia/gfs/gaia-gfs-demo。

        分支命名【GitHub Flow】

        • 必须 :master分支被保护 ,不允许直接提交至master 。
        • 必须:创建分支使用有意义的名称头,功能开发用 feature/{JIRA编号}-*,bug修复用 bug/{JIRA编号}-* ,热修复用 hotfix/{JIRA编号}-*。如 feature/XM1907901-1390-enable_audit_log_for_inventory, bug/XM1907901-1403-xxxxxxx 。
        • 建议:创建分支开始后 ,就创建一个MR,用于描述思路,并记录讨论过程。
        • 建议:未完成的MR以WIP:开头,如:“WIP:用户1分钟未有动作 ,自动锁屏”。
        • 必须 :至少有一个成员同意合并,才允许合并分支。
        • 建议:合并分支时 ,使用 –squash,或选中gitlab界面上的"[X]Squash commits when merge request is accepted"。

        版本

        • 必须 :每一次准备发布生产的交付物,打上发布标签 ,并记录Release Notes 。
        • 建议 :数据库有版本号。不同版本的数据库变更脚本,支持幂等操作,以便自动化完成升级/降级 。
        • 建议:测试用例 、测试数据也有版本号 ,要么和代码工程版本一致,要么自定义,和代码工程版本有对应关系 。
        • 建议:推荐使用Flyway,EntityFramework Migrations来管理DB版本 。

        推荐实践

        版本号使用场景

        1. 敏捷项目冲刺开始 ,定义本冲刺版本的前三节。
        2. 提交、解决、关闭bug时,正确填入了DevOps中对应的工程版本号。
        3. DevOps构建时 ,根据前三节,自动补充最后一节的编译流水号 。
        4. 发布至生产环境时 ,DevOps根据工程版本,自动生成tag标签。
        5. 如果只通过DevOps部署 ,则没有冲刺版本。DevOps根据产品版本,自动加上制品的上传批次号,如1.2.13,以追踪各环境和不同版本部署物的对应关系。

        假设场景

        项目名称

        开发启动时间

        移交测试时间

        回归时间

        上线时间

        XX项目

        9月1日

        9月15日

        9月25日

        9月26日

        开发流程

        序号

        时间

        事项

        描述

        命令

        说明

        1

        9月1日

        从master新建分支

        从master创建分支。分支名称:feature/11-Add_redis_support

        git checkout master

        git pull

        git checkout -b feature/11-add_redis_support

        git push –set-upstream origin feature/11-add_redis_support

        所有参与人员都提交到此分支

        2

        9月2日

        设计、编写代码与测试

        提交、提交、提交

        git add –allgit commit -a -m "move display name to redis" git push

        3

        9月3日

        开启MR,以开启讨论和Review

        从gitlab的站点中创建一个MR 。

        如果并未做完,MR以"WIP:"开头

        4

        9月15日

        讨论 、修改、测试

        讨论方案 、修正review的改进项。

        git add .

        5

        9月16日

        循环修复bug并不断push到远程分支 。

        git commit -am "move on and on"

        6

        ……

        每日merge master代码到分支。

        git merge master

        7

        9月25日

        自动化、人工验收全部通过,MR通过

        master代码可以发布时 ,打上版本号标签,1.1.0

        git tag add "1.1.0"

        git push –tag

        选中 "Squash commits when merge request is accepted.“

        选中 "Delete source branch when merge request is accepted"

        8

        9月26日

        部署

        生产环境部署master 。

        通告其他分支开发人员尽快merge master代码

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图