最近公司需要让我将Git的使用规范起来,在规范的过程中发现了一些问题。
- “git commit”时的消息不够规范,存在随意描述
- 代码“.gitignore”文件随意编写
- 使用SSH方式进行clone代码,不够安全
- Git没有一个友好的业务进行可视化
对于以上这些问题,我调研了一下GitLab此神器。
一. GitLab的介绍
虽然GitLab是模仿Github的产品,并且他还是开源的。相比Github来说可以减少很多成本。Github本身是有企业版可以在公司环境搭建的,但是价钱不菲,看看Github Enterprise定价就知道了,最小的也要一年5000美金,对于小团队小公司是一笔不小的投入。有了GitLab可以几乎不需投入就能轻松有一套内部的Git管理平台。
Gitlab主要功能
1. 仓库管理
在创建仓库的时候可以选择创建到群组空间下(类似于Github的Orgnization);或者个人空间下,默认是私仓,可以选择公开。也可以到全局空间下,没有前缀;
2. 公仓和私仓 (权限分配)
每个仓库的权限可以单独分配,只需要设置为Master就可以对仓库有完全的操控权,如果需要过库到别人名下也是支持的。配置允许默认创建公仓还是私仓,自己创建的私仓只能自己和管理员看见。
3. Github工作流 (Github Flow了解)
Github工作流主要是使用Pull Requets的功能完成,没个人去提交自己的仓库,然后再去pull request来完成协作,gitlab也支持pull request。
4. 团队和群组管理
可以建立一个团队(比如公司的某个部门),把用户加进来,这些用户默认就有了访问团队下仓库的给定权限。群组和Github的Orgnizition类似,但又不完全一样。我一把把群组当作项目来用。注意:团队是没有仓库空间的,群组是有的。
注:团队是人员的集合,群组是项目的集合
Gitlab版本
GitLab CE : 社区版本(免费)(本Wiki使用)
GitLab EE : 企业版本(收费)
二. Gitlab安装
现在Docker已经很火了,具体Docker的使用请查看官网或其他文章进行了解,文章使用Docker方式进行安装。
在Dockerhub中有两个版本:
- GitLab CE Docker image (本Wiki使用)
- GitLab EE Docker image
具体的Docker内安装文档official installation docs参考
使用版本号:11.4.X
Docker运行
需要按照以下命令运行:
[XXXX-work:ZZZ sweetsop]$ sudo docker run --detach \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /data/app/gitlib/config:/etc/gitlab \
--volume /data/app/gitlib/log:/var/log/gitlab \
--volume /data/app/gitlib/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
端口说明:
本地端口号 | 容器端口号 | 用处 |
---|---|---|
443 | 443 | 为了Https协议 |
80 | 80 | 为了Http协议 |
22 | 22 | 为了SSH协议 |
注意:对于gitlab默认的端口是Package defaults,不要和默认设置Package defaults一样的。不要设置冲突。
volume 说明:
本地路径 | 容器路径 | 用处 |
---|---|---|
/srv/gitlab/data | /var/opt/gitlab | 为了存储应用数据 |
/srv/gitlab/logs | /var/log/gitlab | 为了存储日志 |
/srv/gitlab/config | /etc/gitlab | 为了存储GitLab的配置文件 |
配置Gitlab
在容器中有 /etc/gitlab/gitlab.rb
文件 ,具体的配置信息,Gitlab属性配置Omnibus GitLab documentation参考。
# 进入运行的Docker中进行操作
[XXXX-work:ZZZ sweetsop]$sudo docker exec -it gitlab /bin/bash
编辑/etc/gitlab/gitlab.rb
文件
[XXXX-work:ZZZ sweetsop]$sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb
## GitLab configuration settings
##! This file is generated during initial installation and **is not** modified
##! during upgrades.
##! Check out the latest version of this file to know about the different
##! settings that can be configured by this file, which may be found at:
##! https://gitlab.com/gitlab-org/omnibus-gitlab/raw/master/files/gitlab-config-template/gitlab.rb.template
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
# external_url 'GENERATED_EXTERNAL_URL'
external_url 'http://100.100.100.100' # 需要公开给外部的地址,主要是在系统生成一些地址是所使用,后面会提到。
## Roles for multi-instance GitLab
##! The default is to have no roles enabled, which results in GitLab running as an all-in-one instance.
......
- 其他的一些使用docker-compose文件配置、 swarm做集群等,GitLab Docker images 官网参考。
- 配置说明Configuration options官网参考。
- external_url 设置需要带端口号的情况,需要和外部的一致。本人踩了好久的坑......
例如:external_url 'http://100.100.100.100:1080'
[XXXX-work:ZZZ sweetsop]$ sudo docker run --detach
--publish 1080:1080 \ # 这些端口必须一致,我这里也不知道为什么会这样了解的可以给我指导一下。
--name gitlab
--restart always
--volume /data/app/gitlib/config:/etc/gitlab
--volume /data/app/gitlib/log:/var/log/gitlab
--volume /data/app/gitlib/data:/var/opt/gitlab
gitlab/gitlab-ce:latest
这个时候可以访问 http://100.100.100.100/
地址,首次进入需要为root用户初始化页面。
三. Gitlab配置
1. 初始化root用户密码
首次进入时需要初始化root用户的密码,自己先填写完成。root是整个系统的Administrator,超级管理员。
2. 登录
填写用户名密码登录Gitlab系统。
3. 创建用户
按照Admin area > Overview > Users
引导进入的 用户管理页面。将团队内的用户都可以建立完成。
进入用户详细页面进行编辑
4. 创建Groups
按照Admin area > Overview > Groups
引导进入的 组织管理页面。创建属于自己的组织。
进入组织详细页面进行编辑
Visibility Level : 设置Private,项目不希望被其他人看见,只有组用户才可以看见。
具体说明如下:
私有库:只有被赋予权限的用户可见
内部库:登录用户可以下载
公开库:所有人可以下载
点击
Add users to group
按钮,进行用户添加,在选择完成用户的使用需要选择权限。
权限说明:
Guest(匿名用户) - 创建项目、写留言薄
Reporter(报告人)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段
Developer(开发者)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分
支 、创建标签、编写wiki
Master(管理者)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分
支 、创建标签、编写wiki、增加团队成员、推送受保护的分支、移除受保护的分支、编辑项目、添加部署密钥、配置项目钩子
Owner(所有者)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分
支 、创建标签、编写wiki、增加团队成员、推送受保护的分支、移除受保护的分支、编辑项目、添加部署密钥、配置项目钩子、开关公有模式、将项目转移到另一个名称空间、删除项目
5. 禁止SSH
按照 Admin area > Setting > General > Visibility and access controls
引导展开,修改Enabled Git access protocols
的值为 Only HTTP(S)
目的在于为了让用户不能根据SSH的方式来登录服务器。因此,只是开发
HTTP(S)
这个方式。
6. Email配置
root@e187ccb15959:/etc/gitlab# vi /etc/gitlab/gitlab.rb #编辑gitlab.rb
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
# config email windtools
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "100.100.100.100"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_domain'] = "sweetsop.cn"
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
配置说明 SMTP settings官网参考。
四. 客户端配置
1. 基本信息配置
1.1. 用户信息维护
在创建用户
章节中创建的用户,需要让注册用户进行登录操作。在做这步操作之前,需要让每个用户初始化自己的密码。开始登录,按照User setting > setting > profile
引导进入的 用户管理页面,进入页面配置用户信息。
1.2. 配置客户端信息
[XXXX-work:ZZZ sweetsop]$ git config --global user.name "XXX" # 用户名
[XXXX-work:ZZZ sweetsop]$ git config --global user.email [email protected] # 用户的邮箱
2. 配置用户名密码
由于只是使用了HTTP(S)方式
,因此,需要配置客户端。
[XXXX-work:ZZZ sweetsop]$cd ~ #进入~(用户)目录,cd ~
[XXXX-work:ZZZ ~]$ touch .git-credentials #编辑文件 .git-credentials
[XXXX-work:ZZZ ~]$ vi .git-credentials
#添加http://用户名:密码@gitlab.com
http://fuyp:[email protected]
[XXXX-work:ZZZ ~]$ git config --global credential.helper store
[XXXX-work:ZZZ ~]$ more .gitconfig #查看文件:more .gitconfig,可以看到如下信息,设置成功。
[user]
email = [email protected]
name = XXX
[credential]
helper = store
如果不配置,在每次执行
git push | git pull
命令时,让用户输入用户名和密码。
3. 提交代码问题解决
[XXXX-work:ZZZ sweetsop]$git push origin master # 提交这个的时候错误发生
remote: GitLab: You are not allowed to push code to protected branches on this project.
To http://XXXX/XX.git
解决方式:
按照
Projects > Your Projects > 进入项目 > settings > repository > Protected Branches
引导展开,将保护的分支master
取消保护。
五. 备份还原
1. 通过任务计划crontab 实现自动备份
[XXXX-work:ZZZ sweetsop]$ sudo crontab -e -u root # 编辑root的定时器
#secu-tcs-agent monitor, install at Tue Sep 27 10:19:33 CST 2016
......
0 2 * * * docker exec -t gitlab gitlab-rake gitlab:backup:create # 添加备份的定时器
2. 备份保留7天
可设置只保留最近7天的备份,编辑配置文件 /etc/gitlab/gitlab.rb
[XXXX-work:ZZZ sweetsop]$ sudo docker exec -it gitlab /bin/bash
[root@e187ccb15959:/etc/gitlab]# vi /etc/gitlab/gitlab.rb #编辑gitlab.rb
# 数值单位:秒
gitlab_rails['backup_keep_time'] = 604800
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl reconfigure #重新加载gitlab配置文件
3. 恢复
备份文件:
/var/opt/gitlab/backups/1499244722_2017_07_05_9.2.6_gitlab_backup.tar
停止 unicorn 和 sidekiq ,保证数据库没有新的连接,不会有写数据情况。
# 停止相关数据连接服务
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl stop unicorn
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl stop sidekiq
# 指定恢复文件,会自动去备份目录找。确保备份目录中有这个文件。
# 指定文件名的格式类似:1499242399_2017_07_05_9.2.6,程序会自动在文件名后补上:“_gitlab_backup.tar”
# 一定按这样的格式指定,否则会出现 The backup file does not exist! 的错误
[root@e187ccb15959:/etc/gitlab]# gitlab-rake gitlab:backup:restore BACKUP=1499242399_2017_07_05_9.2.6
# 启动Gitlab
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl start