在这里插入代码片
# 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作为一个分布式代码托管软件,它必然有相关的服务组件去支持这个庞大的系统。
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仓库,性能剩余,想在这台服务器上跑一个小网站?