DevOps
开源文化 ThingsBoard 开源中间件 Kubernetes DevOps KubeEdge EdgeX Foundry Node-RED
Documentation > Git管理 > GitLab

On this page

GitLab

一、概述

1.GitLab 简介

​ GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。

​ GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。 GitLab 被 IBM, Sony, JülichResearchCenter, NASA, Alibaba,Invincea, O’ReillyMedia, Leibniz-Rechenzentrum(LRZ), CERN, SpaceX 等组织使用。

官网: https://about.gitlab.com/

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。

2.GitLab 官网地址

1
2
3
4
5
# 官网地址

https://about.gitlab.com/
https://about.gitlab.com/install/
https://about.gitlab.com/install/#centos-7

二、基础

1.Gitlab服务管理

1
2
3
4
5
6
7
[root@qfedu.com ~]# gitlab-ctl start                        # 启动所有 gitlab 组件;
[root@qfedu.com ~]# gitlab-ctl stop                         # 停止所有 gitlab 组件;
[root@qfedu.com ~]# gitlab-ctl restart                      # 重启所有 gitlab 组件;
[root@qfedu.com ~]# gitlab-ctl status                       # 查看服务状态;
[root@qfedu.com ~]# gitlab-ctl reconfigure                  # 初始化服务;
[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb               # 修改默认的配置文件;
[root@qfedu.com ~]# gitlab-ctl tail                         # 查看日志;

2.配置GitLab

2.1.去掉自动注册功能

admin are -> settings -> Sign-up Restrictions 去掉钩钩,然后拉到最下面保存,重新登录

3.Gitlab 备份与恢复

3.1.查看系统版本和软件版本

1
2
3
4
5
[root@qfedu.com gitlab]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

[root@qfedu.com gitlab]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
8.15.4

3.2数据备份

1.查看备份相关的配置项

1
2
3
[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"

该项定义了默认备份出文件的路径,可以通过修改该配置,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。

2.执行备份命令进行备份

1
[root@qfedu.com ~]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create 

3.添加到 crontab 中定时执行

1
2
[root@qfedu.com ~]# crontab -e
0 2 * * * bash /opt/gitlab/bin/gitlab-rake gitlab:backup:create

可以到/data/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。

4.设置备份保留时长

防止每天执行备份,有目录被爆满的风险,打开/etc/gitlab/gitlab.rb配置文件,找到如下配置:

1
2
[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800

设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart 重启服务生效。

备份完成,会在备份目录中生成一个当天日期的tar包。

3.3.数据恢复

1.安装部署 gitlab server

具体步骤参见上面:gitlab server 搭建过程

2.恢复 gitlab

1、查看备份相关的配置项

1
2
[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/data/gitlab/backups"

修改该配置,定义了默认备份出文件的路径,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。

2、恢复前需要先停掉数据连接服务

1
2
[root@qfedu.com ~]# gitlab-ctl stop unicorn
[root@qfedu.com ~]# gitlab-ctl stop sidekiq
  • 如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。

3、同步备份文件到新服务器

将老服务器/data/gitlab/backups目录下的备份文件拷贝到新服务器上的/data/gitlab/backups

1
[root@qfedu.com gitlab]# rsync -avz 1530773117_2019_03_05_gitlab_backup.tar 192.168.95.135:/data/gitlab/backups/ 
  • 注意权限:600权限是无权恢复的。 实验环境可改成了777,生产环境建议修改属主属组
1
2
3
4
5
6
[root@qfedu.com backups]# pwd
/data/gitlab/backups
[root@qfedu.com backups]# chown -R git.git 1530773117_2019_03_05_gitlab_backup.tar 
[root@qfedu.com backups]# ll
total 17328900
-rwxrwxrwx 1 git git 17744793600 Jul  5 14:47 1530773117_2018_07_05_gitlab_backup.tar

4、执行命令进行恢复

后面再输入两次 yes 就完成恢复了。

1
2
[root@qfedu.com ~]# gitlab-rake gitlab:backup:restore BACKUP=1530773117_2018_07_05_gitlab_backup.tar
注意:backups 目录下保留一个备份文件可直接执行

5、恢复完成启动服务

恢复完成后,启动刚刚的两个服务,或者重启所有服务,再打开浏览器进行访问,发现数据和之前的一致:

1
2
3
4
[root@qfedu.com ~]# gitlab-ctl start unicorn
[root@qfedu.com ~]# gitlab-ctl start sidekiq
或
[root@qfedu.com ~]# gitlab-ctl restart

注意:通过备份文件恢复gitlab必须保证两台主机的gitlab版本一致,否则会提示版本不匹配

4.Gitlab 发送邮件

开启邮件服务

1
2
[root@qfedu.com ~]# systemctl start  postfix
[root@qfedu.com ~]# systemctl enable postfix

4.1.Gitlab 添加smtp邮件功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[git@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
postfix 并非必须的;根据具体情况配置,以 SMTP 的为例配置邮件服务器来实现通知;参考配置如下: 
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '276267003@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = '276267003@qq.com'
gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "276267003@qq.com"
gitlab_rails['smtp_password'] = "kktohrvdryglbjjh" #这是我的qq邮箱授权码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

#修改配置后需要初始化配置,先关掉服务再重新初始化
[git@qfedu.com ~]# gitlab-ctl stop
ok: down: gitaly: 0s, normally up
ok: down: gitlab-monitor: 1s, normally up
ok: down: gitlab-workhorse: 0s, normally up
ok: down: logrotate: 1s, normally up
ok: down: nginx: 0s, normally up
ok: down: node-exporter: 1s, normally up
ok: down: postgres-exporter: 0s, normally up
ok: down: postgresql: 0s, normally up
ok: down: prometheus: 0s, normally up
ok: down: redis: 0s, normally up
ok: down: redis-exporter: 1s, normally up
ok: down: sidekiq: 0s, normally up
ok: down: unicorn: 1s, normally up

[git@qfedu.com ~]# gitlab-ctl reconfigure  
......

[git@qfedu.com ~]# gitlab-ctl start
ok: run: gitaly: (pid 37603) 0s
ok: run: gitlab-monitor: (pid 37613) 0s
ok: run: gitlab-workhorse: (pid 37625) 0s
ok: run: logrotate: (pid 37631) 0s
ok: run: nginx: (pid 37639) 1s
ok: run: node-exporter: (pid 37644) 0s
ok: run: postgres-exporter: (pid 37648) 1s
ok: run: postgresql: (pid 37652) 0s
ok: run: prometheus: (pid 37660) 1s
ok: run: redis: (pid 37668) 0s
ok: run: redis-exporter: (pid 37746) 0s
ok: run: sidekiq: (pid 37750) 1s
ok: run: unicorn: (pid 37757) 0s

4.2.Gitlab 发送邮件测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[git@qfedu.com ~]# gitlab-rails console 
[root@wing ~]# gitlab-rails console
---------------------------------------------------------------------
 GitLab:       12.10.1 (e658772bd63) FOSS
 GitLab Shell: 12.2.0
 PostgreSQL:   11.7
---------------------------------------------------------------------
Loading production environment (Rails 6.0.2)
irb(main):003:0> 
irb(main):004:0> Notify.test_email('276267003@qq.com', 'Message Subject', 'Message Body').deliver_now  //输入测试命令,回车

Notify#test_email: processed outbound mail in 5.2ms
Delivered mail 5eafceaa250a_1d063fb777add9a08601a@wing.mail (1430.1ms)
Date: Mon, 04 May 2020 16:13:30 +0800
From: gitlab <276267003@qq.com>
Reply-To: gitlab <276267003@qq.com>
To: 276267003@qq.com
Message-ID: <5eafceaa250a_1d063fb777add9a08601a@wing.mail>
Subject: Message Subject
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Message Body</p></body></html>

=> #<Mail::Message:70056859616080, Multipart: false, Headers: <Date: Mon, 04 May 2020 16:13:30 +0800>, <From: gitlab <276267003@qq.com>>, <Reply-To: gitlab <276267003@qq.com>>, <To: 276267003@qq.com>, <Message-ID: <5eafceaa250a_1d063fb777add9a08601a@wing.mail>>, <Subject: Message Subject>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
irb(main):005:0> 

去qq邮箱web界面查看是否收到邮件

三、实践

1.创建组

使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限, 不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理

创建组 hs-group

  • a. 项目名称,项目名称可以为字母、数字、空格、下划线、中划线和英文点号组成,且必须以字母或数字开头,不能使用中文

  • b. 项目描述

  • c.可见性(库类别)

    • 私有库:只有被赋予权限的用户可见

    • 内部库:登录用户可以下载

    • 公开库:所有人可以下载

2.创建用户

创建用户的时候,可以选择Regular或Admin类型。

  • 普通用户:只能访问属于他的组和项目
  • 管理员:可以访问所有组和项目

创建用户张三

创建完用户后,立即修改密码 zhangshan123

3.用户添加到组

选择某个用户组,进行Members管理组的成员

Gitlab用户在组里面有5种不同权限:

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
  • Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个
  • 权限 Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

4.创建项目

在用户组中创建项目

以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目

新用户第一次登陆要重置密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Git global setup
git config --global user.name "zhangsan"
git config --global user.email "zhangsan@126.com"


Create a new repository
git clone http://172.17.243.237:18080/hs-group/git-demo.git
cd git-demo
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master


Push an existing folder
cd existing_folder
git init
git remote add origin http://172.17.243.237:18080/hs-group/git-demo.git
git add .
git commit -m "Initial commit"
git push -u origin master


Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin http://172.17.243.237:18080/hs-group/git-demo.git
git push -u origin --all
git push -u origin --tags

5.SSH免密登录

1.查看你生成的公钥:

vim id_rsa.pub

就可以查看到你的公钥

2.登陆GitLab账号,点击用户图像,然后 Settings -> 左栏点击 SSH keys

3.复制公钥内容,粘贴进“Key”文本区域内,取名字

4.点击Add Key

6.分支管理

1.创建分支

2.标签管理