在这里插入代码片# Gitlab版本控制系统

一,gitlab概论

1.什么是gitlab?

gitlab是一个开源分布式的版本控制系统。用Ruby语言完成。

Gitlab主要实现管理项目源代码,对源代码进行版本控制,以及代码复用与查找。

2. Gitlab与Github的不同?

gitlab与github相同点:两者都是提供代码托管服务,在很大程度上gitlab是仿照github来完成的。

gitlab与github的不同点:最大的不同在于github创建私有仓库收费,而gitlab创建私有仓库是免费的。

PS:从代码私有性方面来看,公司不希员工获得全部的代码,这个时候gitlab无疑是最佳的选择。但对于开源项目而言,github依然是代码托管的首选平台。

3.gitlab的优势和应用场景

1.开源免费,搭建简单,维护成本较低,适合中小型公司。

2.权限管理,能实现代码对部分人可见,确保项目的安全性.

3.离线同步,保证我们可以不实时依赖网络对代码提交

二.gitlab服务构成

gitlab作为一个分布式代码托管软件,它必然有相关的服务组件去支持这个庞大的系统。

linux下gitlab状态查看 gitlab版本查看_基础学习

unicorn:gitlab的核心程序。

nginx,作为gitlab的proxy代理,处理http/https以及静态资源访问请求。

gitlab-workhorse:用于处理文件的上传和下载

gitlab-shell:用于处理git clone ,git pull,git push等命令。

Logrotate:用于处理保存所有的gitlab数据相关信息。

Postgresql:用于保存所有的gitlab数据相关信息

redis:用于数据库的缓存,加快前台访问速度,及读写速度。

postgresql:gitlab使用的数据库。

三. gitlab部署

1.下载gitlab

[root@gitlab ~]# yum install -y curl policycoreutils-python openssh-server postfix wget
[root@gitlab ~]# yum localinstall gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm -y

2.配置gitlab

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
#配置访问的gitlab的url
13 external_url 'http://gitlab.zhangxianwei.com'
#配置邮箱
52 ### Email Settings
#开启邮箱
53 gitlab_rails['gitlab_email_enabled'] = true
#发件人
54 gitlab_rails['gitlab_email_from'] = 'zxw837404975@qq.com'
#发件人显示名称
55 gitlab_rails['gitlab_email_display_name'] = 'yunwei_zhang'

519 gitlab_rails['smtp_enable'] = true
520 gitlab_rails['smtp_address'] ="smtp.163.com"
521 gitlab_rails['smtp_port'] = 25
522 gitlab_rails['smtp_user_name'] ="zxw837404975@qq.com"
#授权码
523 gitlab_rails['smtp_password'] = "zhang837404975"
524 gitlab_rails['smtp_domain'] = "163.com"
525 gitlab_rails['smtp_authentication'] = "login"
526 gitlab_rails['smtp_enable_starttls_auto'] = true
#加密访问
527 gitlab_rails['smtp_tls'] = true

3.关闭一些吃配置的软件

1385 prometheus['enable'] = false

4.初始化gitlab

[root@gitlab ~]# gitlab-ctl reconfigure

5.配置host解析(没有公网的话)

6.测试

1.登录gitlab系统测试

2.测试邮箱是否正常

[root@gitlab gitlab]# gitlab-rails console
irb(main):011:0> Notify.test_email('837404975@qq.com(收件人)','主题','内容').deliver_now

四. 用户,组,仓库之间的关系以及master分支保护功能。

用于,组,仓库之间合理的权限来保证master分支的正常推进,并且安全。

一.新应用本地仓库与远程仓库的流程

1.创建组dev

2.使用dev组的身份创建一个test的项目。

3.创建用户,zhangsan,lisi。

4.将zhangsan,lisi加入dev组,分配权限,zhangsan管理人员,lisi开发人员。

5.分发权限
开发人员:只能下载代码,不能上传到master分支,只能上传到dev分支,合并master需要提交合并申请。
所有者(root,所有者或者主程):可以下载代码,可以上传合并代码,可以同意开发人员的合并请求。
5.每个人的电脑设备将ssh公钥放置在自己的账户用户里。

6.现在每个用户的权限就是每个设备的权限。

7.验证身份权限,zhangsan,lisi(测试用户上传,下载,合并的功能是否合理)

二.使用远程仓库的流程(master分支保护功能)

主要是开发人员的使用流程。
1.本地仓库与远程仓库关联

git remote add origin git@github.com:lac1310372195/testxiawu.git #两种方式,https和ssh,推荐ssh

2.克隆远程仓库master。

git clone origin master #必须是克隆master才能保证项目的完整性

3.创建dev分支。

git checkout -b dev#创建分支,开发人员在这里书写代码,下完后与本地仓库master合并,检查有无问题。

4.将dev分支合并到远程仓库的dev分支,并提交合并master申请。

git push origin dev#开发人员没有提交mater的权限

5.主程或root来完成dev分支向master合并。

在gitlab的web界面操作。


### 五.gitlab汉化

1.点击--->右上角的用户--->settings-->preferences-->language-->简体中文(语言的选择仅仅是汉化了一部分内容)

2.github,gitee等开源社区下载**对应**gitlab版本的汉化包

```sh
[root@gitlab ~]# gitlab-ctl stop		#必须停止gitlab
[root@gitlab ~]# tar -xf gitlab-12-0-stable-zh.tar.gz
#将语言包覆盖到下面目录下
[root@gitlab ~]# /usr/bin/cp -r  gitl^C-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
#报错属于正常,动态文件
^Hcp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘gitlab-12-1-stable-zh/log’
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘gitlab-12-1-stable-zh/tmp’

六.gitlab的备份及恢复

1. gitlab数据备份

1.变更gitlab的备份路径,以及备份的保留时长

[root@backup ~]# vim /etc/gitlab/gitlab.rb
 #默认保存位置,可修改
 336 gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
#保存多久,单位秒,只保存最近7天
 344 gitlab_rails['backup_keep_time'] = 604800

2.修改配置文件后,重新加载

[root@backup ~]# gitlab-ctl reconfigure

3.手动执行备份命令

[root@backup ~]# gitlab-rake gitlab:backup:create

4.写入定时任务,每天备份

[root@gitlab ~]# crontab -e
00 02 * * * gitlab-rake gitlab:backup:create
2. gitlab数据恢复

gitlab数据恢复会将所有数据恢复到备份的那一刻,相当于虚拟机的快照

1.停止gitlab

[root@gitlab ~]# gitlab-ctl stop unicorn
[root@gitlab ~]# gitlab-ctl stop sidekiq
[root@gitlab ~]# gitlab-ctl stop nginx #(关闭nginx的web界面,防止恢复期间上传代码)

2.恢复备份(备份名不要带后缀)

#从1571384612_2019_10_18_12.0.3编号备份中恢复
[root@backup ~]# ll /var/opt/gitlab/backups/
-rw------- 1 git git 143360 Oct 18 15:43 1571384620_2019_10_18_12.0.3_gitlab_backup.tar
[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1571384612_2019_10_18_12.0.3

3.重启gitlab服务

[root@gitlab ~]# gitlab-ctl restart

4.检查有无服务启动错误

[root@backup ~]# gitlab-ctl status
run: alertmanager: (pid 19751) 8447s; run: log: (pid 7628) 11459s
run: gitaly: (pid 19761) 8447s; run: log: (pid 7623) 11459s
run: gitlab-monitor: (pid 19779) 8446s; run: log: (pid 7619) 11459s
run: gitlab-workhorse: (pid 19789) 8446s; run: log: (pid 7621) 11459s
run: grafana: (pid 19797) 8446s; run: log: (pid 7634) 11459s
run: logrotate: (pid 48661) 1245s; run: log: (pid 7615) 11459s
run: nginx: (pid 19817) 8445s; run: log: (pid 7610) 11459s
run: node-exporter: (pid 19822) 8444s; run: log: (pid 7617) 11459s
run: postgres-exporter: (pid 19830) 8444s; run: log: (pid 7636) 11459s
run: postgresql: (pid 19835) 8443s; run: log: (pid 7625) 11459s
run: prometheus: (pid 19845) 8443s; run: log: (pid 7632) 11459s
run: redis: (pid 19853) 8442s; run: log: (pid 7638) 11459s
run: redis-exporter: (pid 19935) 8442s; run: log: (pid 7630) 11459s
run: sidekiq: (pid 19943) 8442s; run: log: (pid 7611) 11459s
run: unicorn: (pid 19949) 8441s; run: log: (pid 7614) 11459s

七.gitlab升级

1.关闭gitlab服务

[root@gitlab-ce ~]# gitlab-ctl stop unicorn
[root@gitlab-ce ~]# gitlab-ctl stop sidekiq
[root@gitlab-ce ~]# gitlab-ctl stop nginx #防止升级期间web界面上传数据

2.备份gitlab 数据,防止升级失败

[root@gitlab ~]# gitlab-rake gitlab:backup:create

3.下载gitlab的RPM包并进行升级

[root@gitlab ~]# yum localinstall gitlab-ce-12.1.1-ce.0.el7.x86_64.rpm  #localinstall升级依赖包

4.升级到gitlab-ce-12-1版本后, 需要使用对应的汉化进行汉化.

#上文有汉化教程

八.Gitlab更改默认Nginx

应用场景:如果一台服务器搭建了gitlab仓库,性能剩余,想在这台服务器上跑一个小网站?

RPM包并进行升级

[root@gitlab ~]# yum localinstall gitlab-ce-12.1.1-ce.0.el7.x86_64.rpm  #localinstall升级依赖包

4.升级到gitlab-ce-12-1版本后, 需要使用对应的汉化进行汉化.

#上文有汉化教程

八.Gitlab更改默认Nginx

应用场景:如果一台服务器搭建了gitlab仓库,性能剩余,想在这台服务器上跑一个小网站?