gitlab实践方案

本文提供一种基于gitlab进行团队项目开发发的解决方案。

目前有两个途径可以使用gitlab:

  1. 直接使用gitlab.com官方提供的服务,个人项目免费,创建团队收费。
  2. 基于开源协议,自行搭建gitlab服务。方法请参考官方教程

用户和权限管理

通常,对于一个项目团队,成员应该有如下角色,(括号中是对应的gitalb角色):

  • 项目负责人(master):负责项目部署发布和持续集成----通常是开发组长
  • 项目开发者(developer):负责项目开发维护----通常是做这个项目的开发人员
  • 其他相关开发者(reporter):浏览项目代码----通常是不做这个项目的开发人员,例如后端项目对应的前端开发
  • 其他相关人员(guest):浏览编辑issue,浏览wiki,获取artifacts等----包括产品、测试等

对于用户管理,通常需要面对下面问题:

  • 如何创建删除用户?
    建议使用gitlab自身账户系统管理账户数据。可通过使用gitlab-api同步企业oa数据。
    gitlab账户存在与否,应该完全由管理员负责,该管理员通常身份是运维负责人。
  • 如何管理账户权限?
    建议通过项目和组来管理用户权限。
    对于一个新账户,默认不属于任何项目和组。
    项目负责人和组负责人在需要时,将目标用户添加删除到所负责的项目或组中。

项目管理

所有项目都应该属于一个项目组,并且只能由项目组负责人创建项目。

这里不建议在公司git上创建个人项目,一方面会增加代码管理复杂度,另一方面团队项目的个人分支完全可以做到想做的事情。

repository

创建项目时,应遵循以下原则:

  • 项目由项目负责人创建
  • 项目命名空间应该是组而非个人
  • 项目可见级别选择Internal
  • 项目描述不要留空,尽量做到简明扼要
  • 项目应当有描述文件README.md

README.md格式建议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<项目名称>
====


<项目背景和功能描述...>

使用手册或接口文档
----
<主要是项目的功能和用法。可链接到wiki>

开发者文档
----
<包括项目结构说明,开发要求和注意事项,开发环境部署等。可链接到wiki>

内部依赖
----
<依赖的数据,服务,代码库等>

外部依赖
----
<依赖的数据,服务,代码库等>

branch

对于规模较小的团队项目,建议使用简化模式进行分支管理。

1
2
3
4
5
6
7
                1.0.1               1.0.2
master -----------+-------------------+----
| | |
develop +--------+-----------------+-+-----
| | | | | |
dev/xx1 +----+ | dev/xx3 +----+ |
dev/xx2 +----------------+

首先,对于任意项目,都创建两个保护分支:

  • master: 只有发布才合并到该分支
  • develop: 有新的变化并测试通过后合并到该分支

开发者通过提交MR将dev/xxx合并到develop分支上,项目负责人根据需要对develop分支进行发布。

当团队规模到达一定程度时,使用git flow模式进行分支管理会带来很大的方便。

1
2
3
4
5
6
7
8
9
10
       1.0.0             1.0.1              1.1.0             1.1.1              1.2.0
master --------------------+------------------+-----------------+------------------+----
| | | | | | |
| hotfix/xx1 +----+ | hotfix/xx2 +----+ |
| | release/xx1 +----+ | release/xx2 +----+
| | | | | | |
develop +-----------------+-----------+------+-----------------+--+----+----------+----
| | | | | |
| feature/xx2 +--------+ feature/xxx3 +----+ |
feature/xx1 +----------------------------------------------------------+

commit

建议使用message格式:

1
2
3
4
5
6
7
8
<本次提交的标题>

- <本次提交的内容>
- <本次提交的内容>
- <本次提交的内容>
- <本次提交的内容>

<本次提交的其他说明>

ci

为了保证项目的敏捷开发和持续集成,建议使用gitlab-ci功能。

  • ci配置中应设置合并到任何分支都触发unittest
  • 合并到develop和master时触发release(可配合ci产生atrifacts用于部署发布)

issue

建议使用gitlab的issue推动项目开发。

开发者要解决对应的issue可以通过create merge request按钮(新版本gitlab支持)创建branch和merge request,这样方便项目负责人跟踪项目进度。

wiki

建议写项目开发相关内容。