Skip to content

Rule 1. 【强制】gitlab 群组名称命名规范

名称全部小写,使用连词符进行分隔,群组深度最多二级

WARNING

cavalry ,water-balance

Rule 2. 【强制】gitlab 项目名称命名规范

全部小写,使用连词符进行分隔,并以公司缩写(jd,ninemax等)开头,前端以-web结尾,后端以-service 结尾,andriod 以 -andriod 结尾, 前端组件以 -front-component 结尾,后端组件以-backend-component 结尾,其它以自定义 -(自定义名称)结尾

项目类型命名规范示例
前端项目以-web 结尾jd-aaa-web
jd-aaa-yyy-web
前端移动项目以-mobile 结尾jd-aaa-mobile
jd-aaa-yyy-mobile
andriod移动端项目以-android 结尾jd-aaa-android
jd-aaa-yyy-android
ios 移动端项目以-ios 结尾jdaaa-ios
jd-aaa-yyy-ios
后端服务项目以-service 结尾jd-aaa-service
jd-aaa-yyy-service
组件项目以-component 结尾jd-aaa-front-component
jd-aaa-yyy-front-component
其它项目以-xxx 结尾 xxx为自定义名称jd-aaa-tool
jd-aaa-yyy-tool
jd-aaa-map
jd-aaa-yyy-map

Rule 3. 【强制】git 提交规范

采用 Angular Git Commit 规范,Commit message 包括三个部分:Header,Body 和 Footer。其中,Header 是必需的,Body 和 Footer 可以省略。

其提交格式如下:

WARNING

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

header 通常只有一行,包括了提交类型(type)、作用域(scope)和主题(subject)。其中,type和subject是必须的,scope是可选的。

**type **提交类型,用于说明此次提交的类型,需要指定为下面其中一个

type含义
feat新增功能
fix修复bug
docs修改文档
refactor代码重构,未新增任何功能和修复任何bug
build改变构建流程,新增依赖库、工具等(例如webpack修改)
style仅仅修改了空格、缩进等,不改变代码逻辑
perf改善性能和体现的修改
chore初始化项目,非src和test的修改
test测试用例的修改

scope 作用域 用于说明 commit 影响的范围,比如数据层、控制层、视图层、包名、文件名等等。

subject 主题描述是简短的一句话,简单说明此次提交的内容。

💡为了保证能够遵守相应的规范可以采用Commitizen 插件:

idea插件安装红色标记的任意一个 Picture Alt

提供了一个 commit 信息模板的输入框: Picture Alt

vscode插件安装 Picture Alt

安装完成之后,可以通过git add添加要提交的文件,接着,在Source Control点击show git commit template图标,开始编写Commit Message信息。 Picture AltPicture Alt

Rule 4. 【强制】分支必须有 main,dev,test 分支

分支类型

1 保护分支 不能提交操作,创世分支不能被删除

2 长期分支 不能删除

3 临时分支 短期存在,可以删除

环境类型

1 开发环境

2 测试环境

3 生产环境

分支类型名称环境类型是否必须命名规范创建自合并到命名规则角色备注
保护分支创世分支-main---项目经理
长期分支开发分支开发环境devmain--项目经理
或研发人员
临时分支功能分支-feature/* /*devdev其中第一个 * 为功能描述全小写spinal-case,第二个*为根据自身团队自定义,多个用-分割。例如: feature/order-payment/23-33研发人员
临时分支
保护分支
集成测试分支测试环境test/*dev

tag
main

test

tag
test/版本号
默认可以不加版本号,当存在多个test分支,不加版本号默认为当前dev 迁出的test

项目经理
临时分支修复分支开发环境fix/*test
testfix/版本号
默认可以不加版本号,
规则同test
研发人员
Tag生产环境-main-tagv版本号项目经理

分支具体描述

  • main分支

创世分支在新建工程时产生.是保护分支,即不允许直接在main分支上开发,只能由别的分支合并到main.其他的所有分支都由main分支衍生,并且需要自行保证与main分支的同步

  • 长期开发分支 dev

由main分支衍生,所有开发都再此分支上

  • 功能分支 feature

由dev分支衍生,完成后合并到dev,并删除此分支,此分支不是必须

  • 集成测试分支 test/*

是保护分支,不允许直接在集成分支上开发.是CI/CD工具主要监测的分支,每个集成测试分支对应一套集成环境,集成测试通过后,相应的代码合并到main分支,此分支来源于dev分支

  • 修复分支 fix/* 当test 分支出现bug需要修复,需要建立fix分支修复完成后合并到test分支上。

流程具体描述

Picture Alt

Rule 5. 【推荐】hotfix 修复规则

  • 当某一个历史版本上发现bug,或者需要做微调时,直接从对应的tag拉出一条test分支,修订号需要增加1
  • 在test分支上签出fix分支完成开发后,做test分支并在此分支上做集成测试完成后,在test分支上打tag
  • 完成后可以删除此分支
  • 如果该bug也影响了后续的版本,可将其视同普通的功能分支,走 dev-> test -> main -> tag流程,从而在高版本上修复bug

Rule 5. 【推荐】tag 版本号规则

以v开头并要遵循版本号规约,tag 修订版本号不为0 代表patch,如果tag经过修复修订号加1,列如:当前tag为 v2.0.0 ,修复完成后的tag为 v2.0.1

Rule 6. 【推荐】产品或项目版本号规则

产品经理定义产品或项目版本号不能使用修订号,主版本和次版本要和tag保持一致,修订号始终为0

Rule 7. 【推荐】tag 上迁出项目

在使用其它项目只能从tag上进行来取源码,步骤如下:

1.将新建项目 clone 到本地

git clone 项目git地址

2.将tag的git地址,添加至本地的remote

git remote add xx tag的git地址 xx为tag加tag版本号

3.拉去tag代码

git fetch xx tag 版本号

4.创建新分支

git checkout -b 新分支名称 tag版本号

5.推送到远程分支

git push origin -u 新分支名称

示例:

1 git clone http://ip:8929/newProject.git

2 git remote add tagv1.0.0 http://ip:8929/oldProject.git

3 git fetch tagv1.0.0 tag v1.0.0

4 git checkout -b v1.0.0-dev v1.0.0

5 git push origin -u v1.0.0-dev

Rule 8. 【强制】版本号规则

以 v 开头,主版本号.次版本号.修订号(X.Y.Z),其中 X、Y 和 Z 为非负的整数,当主版本号更新时,次版本号和修订号都要归零。次版本号更新时修订号归零

Semantic Versioning

Semantic Versioning,语义化版本号,简称“SemVer”。是一种格式化的版本号规则。并且版本号中各个部分的含义被加以了限制。这一套规则,是为了改善各种软件版本号格式混乱,语义不明的现状而提出的。

Semantic Versioning 标准的官网兼说明页面是 https://semver.org/

不需要完全按照Semantic Versioning规范执行,对其进行裁剪,以下为具体执行规范

版本规范

  • v:所有版本以 v 开头。
  • 语义化版本格式为:主版本号.次版本号.修订号(X.Y.Z),其中 X、Y 和 Z 为非负的整数。
  • 版本号可按以下规则递增:
  • 主版本号(MAJOR):每当进行非向下兼容的修改或者颠覆性的更新时,主版本号加1
  • 次版本号(MINOR):每当进行向下兼容的修改或者添加兼容性的新功能时,次版本号加1
  • 修订号(PATCH):没有新功能的引入,仅仅是打一些兼容性补丁,做一些兼容性修复时,修订号加1。

例如,v1.2.3 是一个语义化版本号,版本号中每个数字的具体含义见下图:

Picture Alt

当主版本号更新时,次版本号和修订号都要归零。次版本号更新时修订号归零。

如何确定版本号

1 最简单的做法是以 0.1.0 作为初始化开发版本,并在后续的每次发行时递增次版本号。
2 第一次对外发布版本号为 1.0.0

Rule 9. 【强制】maven版本后缀规范

使用以下三种分别代表不同版本,SNAPSHOT,alpha 和 release

SNAPSHOT:代表开发版本,是一种特殊的版本,代表当前开发版本,可能包含一些临时的改动。每次构建时,Maven会自动下载最新的SNAPSHOT版本

alpha:代表测试版本,通常只在开发团队内部使用

release:代表正式版本,通常是不会再进行大的改动和更新(通常正式环境后缀不需要)

仓库类型仓库命名版本后缀groupIdartifactIdprofile
Snapshotmaven-snapshotsSNAPSHOTcom.公司英文缩写.(项目名) (示例:com.jd.hn 或 com.jg.bpm)gitlab仓库名称dev 或 fix
Releasemaven-releasesalpha或无同上同上test 或 prod

profile配置示例如下:

plain
<version>${env.version}</version>
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
            <env.version>3.1.0-SNAPSHOT</env.version>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <env.version>3.1.0-alpha</env.version>
        </properties>
    </profile>
     <profile>
        <id>fix</id>
        <properties>
            <env.version>3.1.1-SNAPSHOT</env.version>
        </properties>
    </profile>
     <profile>
        <id>prod</id>
        <properties>
            <env.version>3.1.0</env.version>
        </properties>
    </profile>
</profiles>

Rule 10. 【强制】docker命名规范

仓库名称为gitlab项目群组名称
镜像名称为gitlab项目群组名称/gitlab仓库名称:版本号-后缀
容器名称为gitlab项目群组名称-gitlab仓库名称-环境名称

仓库名称镜像名称容器名称
gitlab项目群组名称gitlab项目群组名称/gitlab仓库名称:版本号-后缀
(版本号-后缀 来源于maven version)
gitlab项目群组名称-gitlab仓库名称-环境名称

Rule 11. 【强制】docker compose命名规范

服务名使用 gitlab 仓库名称
镜像名称和容器名称和 docker 一致
网络名称使用 gitlab 仓库名称-环境名称

docker compose 服务名镜像名称容器名称网络名称
gitlab仓库名称同docker同dockergitlab仓库名称-环境名称

docker compose 配置示例

yaml
version: "3.8"
services:
  jm-iot-service:
    image: hn-gis/jm-iot-service:3.1.0-SNAPSHOT
    container_name: hn-gis-jm-iot-service-dev
    ports:
      - 10011:9100
    restart: always
    networks:
      hn-gis-dev:
        ipv4_address: 172.21.0.3
networks:
  jm-iot-service-dev:
    driver: bridge
    ipam:
      config:
        - subnet: 172.21.0.0/24

docker 镜像使用规则

1 不同项目使用某个服务,建议采用此服务tag产生的docker镜像(此镜像唯一)

2 不同项目共用同一个分支,采用分支产生的docker镜像(此镜像唯一)

3 不同项目采用不同分支,各自采用分支产生的docker镜像 (镜像为多个)


Rule 12. 【强制】jenkins 采用gitlab群组名称及结构,任务名称采用仓库名称

目录名称任务名称
采用gitlab群组名称及结构采用仓库名称

Rule 13. 【强制】部署环境规范

分:开发环境,测试环境,生产环境,公共环境,演示环境具体如下

环境类型环境名称描述
开发环境dev
bugfix
hotfix
测试环境test
生产环境prod
公共环境common数据库或中间件等
演示环境demo

环境对应关系

alt text

示例:以版本号3.1.0为例

alt text

这里的环境是指docker环境

1 现有版本号为3.1.0,开发分支(dev) 对应环境(项目名称/服务名称:3.1.0-SNAPSHOT),测试分支(test/3.1.0) 和测试环境(项目名称/服务名称:3.1.0-alpha),当测试完成后,产生bug需要修复时,需要建立修复分支(fix/3.1.1)在此分支上修复bug,这时候就需要增加一个开发环境(项目名称/服务名称:3.1.1-SNAPSHOT)用于修复bug的工作和联调。此环境不能影响dev分支的开发环境。当修复完成时候分支和环境可以删掉。

2 如果在3.1.0测试分支修复完成之前,tagv2.8.0版本上出现bug,这是需要从tagv2.8.0上建立测试分支(test/2.8.1)和一个测试环境(项目名称/服务名称:2.8.1-alpha),当测试人员复现此bug后,开发人员需要建立修复分支(fix/2.8.1),并增加开发环境(项目名称/服务名称:2.8.1-SNAPSHOT)进行修复和联调,修复后需要合并到测试分支(test/2.8.1),测试通过后在此分支上打tagv2.8.1,(看具体情况是否决定并把测试分支(test/2.8.1)和并到main分支上,然后还需要把测试分支(test/2.8.1)合并到之前的测试分支(test/3.1.1)上)删除fix和test分支。