在实验室服务器部署 GitLab
文章目录
在实验室服务器部署 GitLab
1. 起因
我为什么觉得实验室代码管理很重要?
我是北京邮电大学的一名研究生,所处实验室在代码开发上的人数有 10 人左右(主要是部分研二、研三同学),平时的主要工作是为实验室的各类项目提供:Android 端 APP 支持、Server 端服务支持、Web 端展示支持。
实验室项目在北邮中属于较多的那一类,实验室工作真的很繁忙~ QAQ
在学习并逐步接收学长的代码过程中,我发现实验室项目代码有如下几个重大的缺陷:
- 代码注释问题:存在缺少注释(例如参数、代码意图的说明),甚至部分注释因为 Java 的注释在不同编码上不同而导致的彻底丢失问题;
- 项目杂乱问题:学长给我代码时,直接给我一个 1 个多 G 大小的压缩包,当时我一头雾水,因为根本不明白其中的多个项目以及文档到底是做什么的(缺乏 README 文档~);
- 项目无法运行问题:因为配置错误等问题,其中部分项目无法运行;
- 项目可重用性高:实验室的大多项目都集中于某一个小方向,因此很多项目我们只需要做一些小修改,或者融合若干个已有的项目即可;
为什么自己做这件事?
- 一方面,作为新一届的研二,在疫情结束后也挺乐意为实验室多做一点事情:代码管理,刻不容缓;
- 另一方面,我自己比较乐意捣鼓新东西,比较熟悉 Git 命令,对在实验服务器上部署一个代码管理系统有信心;
2. 为什么选择 GitLab + Docker?
为了在实验室服务器上搭建一个代码管理系统,首先我需要确定使用哪一个系统,当时我通过 Google,有如下若干个备选方案:
- gogs
- Gitlab
- SVN
下面分别谈一谈它们的优缺点。
gogs 是一款一款极易搭建的自助 Git 服务,其基于 Go 语言开发,其具有的优缺点如下。
优点:
- 部署简单;
- 功能精简;
- 支持 Git 语法;
- 对服务器的配置要求不高:4 G 左右就可以顺利运行;
- 开源:GitHub Repository;
缺点:
- 功能相对较少;
- 未正式发布;
SVN 是 Subversion的 简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用目的工具,其优缺点如下。
优点:
- 工作流程清晰明了,使用相对简单;
- 功能完善,操作方便;
缺点:
- 使用非 Git 语言,有额外的学习成本;
- 需要连网,如果无法连接到服务器就无法提交代码;
GitLab是一个开源的 git 仓库管理软件,并提供 web 界面,方便管理 git 仓库。和 github 很相似,很多公司考虑到安全费用等因素,搭建自己的 GitLab 服务器。
优点:
- 安全、稳定,在非常多的大公司内部已经被使用;
- 良好的权限管理机制;
缺点:
- 配置复杂,甚至有人将其部署过程称为配置噩梦(可能有夸张的成分~);
- 功能大而全,对小团队开发而言,不少功能是冗余的(特别是对于实验室);
- 对服务器要求相对较高(我实验是的服务器为 16 GB 大小的内存);
最终选择 GitLab 的主要原因基于两点:第一,GitLab 在大公司内使用广泛,这足以说明其安全可靠性。第二,我在校内论坛,即北邮人论坛上发表了一个主题:问实验室自用服务器代码管理系统的选型,大多数同学都首推 GitLab。
选择 Docker 进行部署 GitLab 的原因在于:Docker 大法好!Docker GitLab 镜像不仅仅为我们提供了 GitLab 二进制码,还提供了一整套部署安装的环境,我们可以非常容易地运行一个 GitLab 容器。
具体的部署安装过程就不在这里提了,网上有非常好的大量的资料,不过注意,如果你的服务器为 Windows Server,那么非常不建议基于 Docker 来部署 GitLab,这是因为 Docker 在 Windows 上的运行效率差强人意。
3. 思考
学习一门框架,直接上手一项工具也许是最快的入门方式。为了减少在部署 GitLab 时的配置,我选择 Docker。Docker 可以说是如今后端最热门的应用之一,在我看来,Docker 对于 Go 好比 Spring 对于 Java。
另一方面,在实验室如何用好 GitLab 进行代码管理也是值得考虑的,目前我们的做法是分为两个 group:
- Server
- Android
对于每一个项目进行代码管理,而不是基于模块,这主要由于三个方面的原因:
- 过去实验室代码耦合度比较高,拆分出模块对于负责各个方向的同学有额外的负担;
- 模块化难度比较大,并不是每一个同学都能够很好地进行这项任务;
- 即使不模块化,基于项目的代码管理对于实验室来说够用,也足够简单方便;
最后,在教会了不少同学使用简单的 Git 命令之后,例如:
|
|
自己对分支管理,冲突合并上的知识有所欠缺,需要学习进阶 Git 命令。