说明
(背景:加入新公司后,发现新公司仍然在使用svn进行代码管理,因此整理输出该文档用于指导部署gitlab)。
本文档描述git/gitlab的安装部署及使用。
以下内容大部分来源于互联网。
基本概念
Git/gitlab/github是什么
Git是一款分布式的代码管理工具,具有精巧,快速,分布式的特点,不仅可以用于团队协作开发,也可以用于个人不同分支(版本)管理上。最初由linux内核开发者Linus Torvalds开发用于linux内核代码的管理。当前很多著名公司的开发协作都通过git进行管理。
Github是基于git发展起来的一个公共的代码托管网站,当前已经有超过5000万的用户通过github托管自己的代码(国内有类似的托管网站https://gitee.com/,由于受美国对中国的打压,2020年gitee用户数量有很大发展,超过600万,有不少小型开发团队将代码从github迁移回gitee)。
Github和gitee都属于第三方代码托管,对于托管在上面的代码,github和gitee有完全的查看权限,具有代码泄露的风险。
Gitlab是基于git发展的一款本地软件,可以部署在企业内部提供类似于github和gitee的功能,可以支持代码存储,访问,review,bug跟踪等。
Gitlab部署
Ubuntu下安装过程如下
1:执行如下命令信任GPG密钥
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
2:编辑/etc/apt/sources.list文件,添加国内gitlab镜像源地址(ubuntu 18.04)
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu bionic main
3:执行apt-get update更新软件源
4:apt-get install gitlab-ce安装gitlab
5:安装完成后,修改/etc/gitlab/gitlab.rb配置文件中的external_url为本地提供的访问url地址
6:执行gitlab-ctl reconfigure重新进行配置。
7:执行gitlab-ctl start启动gitlab服务。
8:通过external_url访问gitlab服务,第一次访问需要为root用户设置密码。
Gitlab其他配置
管理员邮箱设置
管理员邮箱设置,可以用于邮件发送
修改/etc/gitlab/gitlab.rb配置文件中如下内容
执行gitlab-rails console以及Notify.test_email('lw@xx.com',
'test_subject', 'This is a first test email').deliver_now验证配置是否成功。
常用操作
查看当前运行状态
gitlab-ctl status
查看运行版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
gitlab-runner --version
管理员添加其他用户
管理员登陆后,参考以下步骤添加其他用户,添加完成后系统会自动发送邮件给新添加用户进行密码修改。
Gitlab备份和恢复
通过如下方式进行gitlab运行文件的备份和恢复
1:执行gitlab-backup create命令进行备份,备份后结果保存在/var/opt/gitlab/backups目录下,该备份文件并不包括gitlab.rb和gitlab-secrets.json两个配置文件,如果要完整恢复到之前的运行状态,需要手工备份这两个单独的文件。
2:执行gitlab-backup restore force=yesBACKUP=1597812374_2020_08_19_12.10.5用于备份内容的恢复。
3:执行gitlab-ctl
reconfigure进行重配置以便所有内容都可以完整恢复
Gitlab工作原理
Gitlab权限管理
Gitlab中的人员角色有以下几种角色
Guest:可以创建issue, 发表评论,但不能读写版本库。
Reporter:Git项目测试人员,可以克隆代码,但不能提交代码。
Developer:Git项目开发人员,可以clone,提交,push代码。
Maintainer:Git项目管理员,可以创建项目,添加tag, 保护分支,添加项目成员,编辑项目(核心开发人员可以赋予该权限)。
Owner:Git系统管理员,拥有至高无上的权限。开发组leader可以赋予该权限。
项目权限
项目权限分为以下三类
Private:只有组员可以看到。
Internal:登陆后的用户才能开到。
Public:所有人都可以看到。
Gitlab分支管理策略
使用Gitlab管理代码,在多人协作时的开发策略一般如下
1:首先创建一个master分支,整个项目不会在master分支上进行开发,但是项目一定是以master分支为主线进行开发。在项目需要release时,基于master分支打tag进行标记。
2:基于master创建一个develop分支。首次创建时,需要从master分支拉取代码,保持开发时代码和最新上线代码相同。
3:在进行某个特性开发时,基于develop分支创建feature分支,实际的代码开发将基于该feature分支进行,不强制提交到远程仓库,在开发完成后,代码同步到develop分支后可以删除。
4:release分支,当所有特性代码都提交到develop分支并且测试通过后,可以从的develop分支创建release分支,release分支为版本的发布而创建,此时可以在release分支上进行一些配置文件版本等小的修改,从而把develop分支空闲出来进行下一轮开发。
Gitlab目录结构
Gitlab在部署完成后,有如下的目录结构
/opt/gitlab主目录
/etc/gitlab 配置目录,保存在运行时配置文件
/var/opt/gitlab 各个执行组件所在位置
/var/log/gitlab 运行日志所在目录
Gitlab的核心组件
Gitlab包括以下核心组件
Nginx:反向代理服务器
Postgresql:文件数据库
Redis:缓存
Unicorn:Ruby开发的web服务器。
Sidekiq:Ruby开发的轻量级异步任务组件。
Logrotate:日志组件