Gitlab概述
1.1 GitLab介绍
GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
GitLab能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。
它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找
1.2 Gitlab服务构成
Nginx:静态web服务器。
gitlab-shell:用于处理Git命令和修改authorized keys列表。
gitlab-workhorse: 轻量级的反向代理服务器。
logrotate:日志文件管理工具。
postgresql:数据库。
redis:缓存数据库。
sidekiq:用于在后台执行队列任务(异步执行)。
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。
1.3 Gitlab工作流程
1.4 GitLab Shell
GitLab Shell有两个作用:为GitLab处理Git命令、修改authorized keys列表
当通过SSH访问GitLab Server时,GitLab Shell会:
- 限制执行预定义好的Git命令(git push,git pull,git annex)
- 调用GitLab Rails API检查权限
- 执行pre-receive钩子(在企业版中叫做Git钩子)
- 执行用户请求的动作,处理GitLab的post-receive动作
- 处理自定义的post-receive动作
当通过http(s)访问GitLab Server时,工作流程取决于你是从Git仓库拉取(pull)代码还是向git仓库推送(push)代码:
如果是从Git仓库拉取(pull)代码,GitLab Rails应用会全权负责处理用户鉴权和执行Git命令的工作
如果是向Git仓库推送(push)代码,GitLab Rails应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由GitLab Shell进行处理:
- 调用GitLab Rails API 检查权限
- 执行pre-receive钩子(在GitLab企业版中叫做Git钩子)
- 执行你请求的动作
- 处理GitLab的post-receive动作
- 处理自定义的post-receive动作
1.5 GitLab Workhorse
GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。
Gitlab的安装部署
- Gitlab要求服务器内存2G以上
2.1 方式一:下载gitlab-ce的rpm包
将对应版本的gitlab-ce下载到本地后,直接yum安装即可
要先将这个rpm包下载到本地
2.2 方式二:配置yum源
在 /etc/yum.repos.d/ 下新建 gitlab-ce.repo,写入如下内容:
然后创建cache,再直接安装gitlab-ce
yum makecache # 这一步会创建大量的数据
直接安装最新版
如果安装时出现gpgkey验证错误,只需在安装时明确指明不进行gpgkey验证
2.3 gitlab的配置
配置文件位置 /etc/gitlab/gitlab.rb
配置邮件服务
修改好配置文件后,要使用 gitlab-ctl reconfigure 命令重载一下配置文件,否则不生效。
2.4 Gitlab常用命令
Gitlab的使用
- Gitlab安装好后,设置密码,管理账户为root
3.1 创建Group
- 填上组名即可,这里组名为java
3.2 创建User
- 创建四个User:pm、dev1、dev2、dev3
3.3 添加User到Group中并授权
3.4 创建Project并配置SSH
3.5 在项目中添加成员
3.6 将本地文件推送到Gitlab
将app01项目克隆下来
在app01目录下新建一些文件
推送到gitlab
- 制定开发计划
4.1 创建开发计划
- 项目:app01
- 版本:v1.0
4.2 创建里程碑Milestones
- 用pm账号登录gitlab后操作(先要在admin中设置pm账号的密码)
- 要根据开发计划来创建Milestones
4.3 根据开发计划创建issue
- 创建4个issue,分派给dev1和dev2这两个开发人员
**4.4 开发者登录账号查看分派的任务 **
- 然后开发dev1登录gitlab,就能看到任务已经分配过来了
4.5 开发流程
- 公司里的开发开始任务
1. 先从仓库把项目拉下来
2.先创建一个自己的分支,然后进行开发
4. 开发完成后,把项目传到仓库
如果写成 git commit -m “close #2” ,则表示merge请求允许且merge成功之后,自动删除编号为#2的issue
传到index分支
4.6 合并分支
1)开发dev1发送合并分支请求给pm
2)pm收到开发的Merge请求后进行处理
- 使用pm登录,就可以看到pm已经收到了合并请求merge request
3)开发dev1确认任务完成
- 退出pm账户,登入dev1账户:
- 或者点进去后,在侧边栏进行标识Done,然后已经完成的issue,可以将其Close
- 这个时候Milestones的进度已经往前进了一些了:
4.7 开发其他功能
- 然后其他开发者或者自己再次进行开发时,先要把刚刚更新后的内容(master主干)拉回来,然后再进行开发
然后再进行其他操作
Gitlab备份恢复
5.1 备份gitlab
1)修改配置文件
- /etc/gitlab/gitlab.rb
备份保存的位置,这里是默认位置,可修改成指定的位置
设置备份保存的时间,超过此时间的日志将会被新覆盖
特别注意: # 如果自定义了备份保存位置,则要修改备份目录的权限,比如: # chown -R git.git /data/backup/gitlab
- 配置完成后要重启以使配置生效
重读配置文件
2)设置定时任务
每天凌晨2点定时创建备份 # 将一下内容写入到定时任务中 crontab -e
3)备份时间的识别
备份后的文件类似这样的形式:1494170842_gitlab_backup.tar,可以根据前面的时间戳确认备份生成的时间
5.2 恢复gitlab
1)停止数据写入服务
停止数据写入服务
2)进行数据恢复并重启
进行恢复
重启
gitlab邮件通知配置
- vim /etc/gitlab/gitlab.rb
使用SourceTree进行项目开发
7.1 项目拉取
- 先把项目克隆下来
- 如果ssh的方式克隆失败,可能是因为SSH Key没找到,可以在这里添加
7.2 创建分支进行功能开发
1)新建立一个叫“pay”的分支
2)进行功能开发
7.3 提交项目
1)开发pay功能完成后进行提交
- 可以看到SourceTree中已经有“未提交的更改”
2)添加“用户信息”
** 3)进行提交**
- 注释也可以写成 close #3 ,作用是提交完成后关闭3号issue
7.4 推送到仓库
- 然后就可以在gitlab上进行发送merge请求了,后面就可以进行其他操作了
7.5 项目上线
1)当所有工作完成之后,就可以进行上线了
2)打标签
- 上线先打个标签
** 3)删除无用分支**
- 然后删除已经合并到主干中的不必要的分支,如index、pay等
- 最后一定要注意时间一定要同步,不然会错乱
参考
系列教程
Gitlab 使用系列
Devops系列
- 自建全套开源Devops开发系统
- Git介绍以及分支模型图解
- 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境
- DevOps系列—【Jenkinsfile+Dockerfile+nginx+vue】
- 项目开发管理工具推荐
- Gitlab的安装及使用教程完全版
- Gitlab的安装及使用
- 那些有用的Github工具介绍!Action、app、workflow等
项目管理系列介绍锦集
快速全面的介绍现代企业中项目管理相关知识!