Devops 04 GitLab

一、Gitlab安装步骤

1.安装Gitlab环境要求

虚拟机最小要求2G内存 50G磁盘
企业最小要求 >4G内存

安装包:gitlab-ce-10.2.2
禁用防火墙和selinux

主机名IP
gitlab10.0.0.81
git10.0.0.80
dev0110.0.0.82

2.下载Gitlab

下载Gitlab的RPM安装包地址

清华源下载地址

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

Gitlab官方网站地址

https://about.gitlab.com/

Gitlab社区免费版的下载地址

https://packages.gitlab.com/gitlab/gitlab-ce

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.安装Gitlab

#先安装依赖包
[root@gitlab ~]# yum -y install policycoreutils-python
#开始安装Gitlab,看到下图就安装成功了
[root@gitlab ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

	# 错误:
	直接安装 Gitlab 可能会失败,提示你需要安装的依赖包
[root@gitlab ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
warning: gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY
error: Failed dependencies:
	policycoreutils-python is needed by gitlab-ce-10.2.2-ce.0.el7.x86_64

在这里插入图片描述

4.Gitlab配置

#Gitlab安装在 /opt目录中
[root@gitlab ~]# ll /opt
total 0
drwxr-xr-x 9 root root 201 Mar 11 11:29 gitlab
#编辑Gitlab配置文件,把网址改为你的主机地址或者你的主机域名
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.example.com'	# 默认是此行,如果不改就需要本地解析
external_url 'http://10.0.0.81'				# 修改为此行

#使Gitlab配置生效,时间比较久,一定要事先确认好配置文件刚刚修改的内容没有改错
[root@gitlab ~]# gitlab-ctl reconfigure
#gitlab相关文件及目录介绍
/etc/gitlab/gitlab.rb 		#主配置文件
/opt/gitlab/				#安装程序目录
/var/opt					#数据存放目录
/var/opt/gitlab/git-dfata	#存放仓库数据

# 配置生效成功后也就启动了

# 查看 gitlab 状态
[root@gitlab ~]# gitlab-ctl status
run: gitaly: (pid 12028) 36s; run: log: (pid 11732) 79s
run: gitlab-monitor: (pid 12045) 36s; run: log: (pid 11830) 67s		#监控模式
run: gitlab-workhorse: (pid 12017) 37s; run: log: (pid 11687) 94s	#反向代理服务
run: logrotate: (pid 11717) 86s; run: log: (pid 11716) 86s			#日志
run: nginx: (pid 11699) 92s; run: log: (pid 11698) 92s				#web界面
run: node-exporter: (pid 11780) 73s; run: log: (pid 11779) 73s
run: postgres-exporter: (pid 12074) 35s; run: log: (pid 11933) 53s
run: postgresql: (pid 11466) 142s; run: log: (pid 11465) 142s		#数据库
run: prometheus: (pid 12060) 36s; run: log: (pid 11902) 56s			#监控【普罗米修斯】
run: redis: (pid 11406) 149s; run: log: (pid 11405) 149s			#缓存数据库
run: redis-exporter: (pid 11849) 62s; run: log: (pid 11848) 62s
run: sidekiq: (pid 11670) 101s; run: log: (pid 11669) 101s			#后台执行队列任务
run: unicorn: (pid 11631) 107s; run: log: (pid 11630) 107s			#动态的web程序

gitlab-ctl stop nginx		#单独停止Gitlab中的nginx服务
gitlab-ctl start nginx		#单独启动Gitlab中的nginx服务

5.Gitlab启动

# gitlab 管理命令
gitlab-ctl start	# gitlab 所有服务启动
gitlab-ctl restart	# gitlab 所有服务重启
gitlab-ctl stop		# gitlab 所有服务停止

# 禁止 Gitlab 开机自启动:
systemctl disable gitlab-runsvdir.service
# 启用 Gitlab 开机自启动:
enable gitlab-runsvdir.service
systemctl enable gitlab-runsvdir.service

# 查看所有服务的日志
[root@gitlab ~]# gitlab-ctl tail
# 单独的服务日志
[root@gitlab ~]# ll /var/log/gitlab/

#注意有时候会出现 502 ,稍等1分钟程序启动好再刷新页面就可以正常访问了

二、使用GitHub的web界面

1.设置管理员密码

打开浏览器输入你主机的IP或者域名开始访问Gitlab网页
设置管理员密码【8位密码 m8
在这里插入图片描述
登陆Gitlab
在这里插入图片描述

2.修改密码

先点右上角 Settings 进入设置界面,再点左边 Password 进入密码修改界面。

在这里插入图片描述

3.设置 Gitlab 登陆界面

第一个浏览添加的是登陆封面

第二个浏览添加的是登陆头像

在这里插入图片描述

4.关闭注册【注意此处】

# 重点注意:
在 Settings 设置页面的右侧有一个选项
Sign-in Restrictions
						Sign-in enabled
千万不要去除 Sign-in enabled 前面的 √
去除的后果就是不能登陆用户了

在这里插入图片描述

5.用户组、用户、项目

在这里插入图片描述

5.1创建用户组
Private		私有的 该组及其项目只能由成员查看
Internal	内部的 任何登录用户都可以查看组和任何内部项目
Public		公众的 无需任何身份验证即可查看组和任何公共项目

在这里插入图片描述

5.2创建用户

在这里插入图片描述

5.3设置用户密码

创建用户后需要点Edit后才能设置密码

普通用户设置密码以后关闭网页,再次登录的时候还会要求修改密码
在这里插入图片描述

注意:设置密码的时候,有时候会自动改变 Name 后面的名字为 root 这时候要修改一下

在这里插入图片描述

5.4用户添加到用户组OPS中

在 New group 按钮的下面

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.5创建项目

在这里插入图片描述

在这里插入图片描述

5.6设置项目连接方式

在这里插入图片描述
点击上图1、2后,选SSH连接方式
在这里插入图片描述
根据提示进行添加访问的主机公钥
在这里插入图片描述
也可以在这里进入设置公钥
在这里插入图片描述

5.7删除项目

进入项目
在这里插入图片描述
在这里插入图片描述
页面最下方
在这里插入图片描述
按照提示输入项目名称,再点击 Confirm 进行删除项目的确认操作
在这里插入图片描述

6.配置 git 主机连接 gitlab 的 key

#创建ssh公钥
[root@git ~]# ssh-keygen -t rsa
#显示公钥内容
[root@git ~]# cat ~/.ssh/id_rsa.pub

在这里设置了用户的key后,只要是这个用户有权限的项目都不需要单独在项目中设置key了

在这里插入图片描述

7.配置项目的key

#创建ssh公钥
[root@jenkins ~]# ssh-keygen -t rsa
#显示公钥内容
[root@jenkins ~]# cat ~/.ssh/id_rsa.pub

在gitlab的jeesns项目设置中填写名称【随意】和Jenkins主机的公钥

# Write access allowed 前面的 √ 选中才可以推送

在这里插入图片描述

# 如果配置了连接 gitlab 用户的 key 就会提示
	公钥已经被使用
Fingerprint has already been taken

# 如果原来在其他项目中设置过的公钥只需要点击下图的Enable按钮即可开启本项目的公钥

在这里插入图片描述

三、克隆远程仓库到本地

1、原来有 GitHub 远程仓库
	# 先查看远程仓库
[root@git ~/git_data]# git remote
origin
	# 移除远程仓库
[root@git ~/git_data]# git remote remove origin
	# 连接 gitlab 仓库
[root@git ~/git_data]# git remote add origin git@10.0.0.81:OPS/git_data.git
	# 创建一个文件
[root@git git_data]# echo 1 > a.txt
	# 提交文件到暂存区
[root@git git_data]# git add .
	# 提交文件到本地仓库
[root@git git_data]# git commit -m "a"
	# 推送本地仓库文件到远程仓库
[root@git git_data]# git push -u origin master

2、还有时候设置步骤都是对的就是会报错
[root@git git_data]# git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'git@10.0.0.81:OPS/git_data.git'
【一种原因是目录是空的没有文件可以提交】
【一种原因是目录有文件也不可以提交】
#解决办法:删除仓库重新建立
[root@git ~]# rm -rf git_data/
[root@git ~]# mkdir git_data
[root@git ~]# cd git_data
[root@git git_data]# git init
Initialized empty Git repository in /root/git_data/.git/
[root@git git_data]# echo 1 > a.txt
[root@git git_data]# git remote add origin git@10.0.0.81:OPS/git_data.git
[root@git git_data]# git add .
[root@git git_data]# git status 
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   a.txt
#
[root@git git_data]# git commit -m "Initial commit"
[master (root-commit) c733f0c] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
[root@git git_data]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 204 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.0.0.72:OPS/git_data.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

3、原来没有远程仓库的主机
#安装git
[root@dev01 ~]# yum -y install git
#设置公钥【连续3次回车】,有时候会提示覆盖 Overwrite (y/n)? y
[root@dev01 ~]# ssh-keygen -t rsa
#查看公钥内容
[root@dev01 ~]# cat .ssh/id_rsa.pub
#git 全局配置
[root@dev01 ~]# git config --global user.name "dev01"			#配置Git使用用户
[root@dev01 ~]# git config --global user.email dev01@qq.com		#配置用户的邮箱
[root@dev01 ~]# git config --global color.ui true				#语法高亮
[root@dev01 ~]# git config -l	#查看配置
[root@dev01 ~]# mkdir git_data	#创建仓库目录
[root@dev01 ~]# cd git_data		#进入目录
[root@dev01 git_data]# git init	#初始化仓库
#创建一个文件 a.txt 上传到本地仓库
[root@dev01 git_data]# echo 1 > a.txt
[root@dev01 git_data]# git add .
[root@dev01 git_data]# git commit -m 'a'
#添加 gitlab 远程仓库
[root@dev01 git_data]# git remote add origin git@10.0.0.81:OPS/git_data.git
#推送内容到远程仓库
[root@dev01 git_data]# git push -u origin master

#如果远程仓库有内容需要下载,克隆远程仓库到本地
[root@dev01 git_data]# git clone git@10.0.0.81:OPS/git_data.git

四、分支保护 GitHub 远程仓库

1.设置保护分支

分支保护之后,只允许管理员可以以master身份推送代码

在这里插入图片描述

点击上图1后,选择2位置需要保护的仓库,再点击下图红框位置

在这里插入图片描述

设置分支权限

在这里插入图片描述

分支保护之后,只允许管理员可以以master身份推送代码

2.git 主机测试推送成功

# 前面配置了 git 主机的 key 到 gitlab 的 root 用户上,先删除
1、在gitlab上登陆 git 用户,添加git主机key
2、在gitlab上登陆 root 用户,设置OPS组中git用户权限为 Master
3、用 git 主机测试推送变更内容到 gitlab 服务器上
	# 删除操作是保证管理员主机上数据和gitlab数据一致
rm -rf git_data/							#先删除原来的工作目录
git clone git@10.0.0.81:OPS/git_data.git	#再从gitlab服务器上克隆数据
	# 这里删除是为了让本地仓库的文件和远程仓库不一样
git rm -f aaaa bbbb							#删除工作目录中多个文件
git add *									#上传工作目录的变更到缓存仓库
git commit -m "删除文件后推送给远程仓库"		 #上传缓存仓库的变更到本地仓库
git branch									#确认是设置了保护的主分支
* master
git push -u origin master					#推送变更到远程仓库
在gitlab服务器上确认master分支推送变更内容成功

在这里插入图片描述

3.dev01 主机测试推送失败

1、在gitlab上登陆 dev01 用户,添加 dev01 主机 key
2、在gitlab上登陆 root 用户,设置 OPS 组中 dev01 用户权限为 Developer
3、用 dev01 主机测试推送变更内容到 gitlab 服务器上
	# 删除操作是保证管理员主机上数据和gitlab数据一致
rm -rf git_data/							#先删除原来的工作目录
git clone git@10.0.0.81:OPS/git_data.git	#再从gitlab服务器上克隆数据
echo 2 > b.txt								#增加文件
git add *									#上传工作目录的变更到缓存仓库
git commit -m "增加文件"					  #上传缓存仓库的变更到本地仓库
git branch									#确认是设置了保护的主分支
* master
git push -u origin master					#推送变更到远程仓库
注意 error 出现了

在这里插入图片描述
从上图可以看出推送失败,这样就表示设置的分支保护成功了

五、分支合并

# Master 分支被保护了,创建一个新分支
	# 创建分支
[root@dev01 git_data]# git branch dev01
	# 切换分支
[root@dev01 git_data]# git checkout dev01
Switched to branch 'dev01'
	# 查看当前所在分支
[root@dev01 git_data]# git branch 
* dev01
  master
	# 创建一个文件
[root@dev01 git_data]# touch dev01.txt
	# 查看当前分支下文件
[root@dev01 git_data]# ll
total 12
-rw-r--r-- 1 root root 2 2021-12-06 19:57 a.txt
-rw-r--r-- 1 root root 2 2021-12-06 19:57 b.txt
-rw-r--r-- 1 root root 2 2021-12-06 20:00 c.txt
-rw-r--r-- 1 root root 0 2021-12-06 20:12 dev01.txt
	# 从当前目录上传文件至缓存仓库
[root@dev01 git_data]# git add .
	# 从缓存仓库上传文件至本地仓库
[root@dev01 git_data]# git commit -m '5'
	# 从本地仓库推送文件至远程仓库的 dev01 分支
[root@dev01 git_data]# git push -u origin dev01

Gitlab 上会发现 OPS 项目里面多了一个 dev01 分支

在这里插入图片描述

master 分支上内容和 dev01 上不一样

在这里插入图片描述

master 分支上并没有增加文件

请添加图片描述

这时候可以使用普通用户 dev01 请求合并分支

请添加图片描述

在这里也能请求合并

请添加图片描述

再点这里

请添加图片描述

用户在申请合并的时候写好标题与说明,便于管理员审核

请添加图片描述

管理员查看到有新的合并请求

请添加图片描述

确认后点击按钮开始合并

请添加图片描述

合并成功

请添加图片描述

查看 master 分支内容增加了

请添加图片描述

这样既保护了 master 分支,又可以满足系统的升级、变更的要求

请添加图片描述

为了方便后面的学习,还是先取消分支保护

请添加图片描述

六、Git GUI

桌面版的工具 Git GUI 使用方法后面有时间再添加

七、Gitlab备份与恢复

1.备份

修改Gitlab服务器的配置文件
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.81'
gitlab_rails['manage_backup_path'] = true			#开启备份
gitlab_rails['backup_path'] = "/data/backup/gitlab"	#备份目录
gitlab_rails['backup_archive_permissions'] = 0644	#备份文件的权限
gitlab_rails['backup_keep_time'] = 604800			#备份数据保留的时间 秒级换算=7天

#创建备份目录及授予权限
[root@gitlab ~]# mkdir -p /data/backup/gitlab
[root@gitlab ~]# chown -R git.git /data/backup/gitlab

#让其配置文件生效
[root@git ~]# gitlab-ctl reconfigure

#手动进行备份
[root@git ~]# gitlab-rake gitlab:backup:create

#检查备份结果
[root@git ~]# ll /data/backup/gitlab/
-rw-r--r-- 1 git git 122880 2020-03-12 14:47 1583995649_2020_03_12_10.2.2_gitlab_backup.tar
	#距离1970年1月1日0时0分0秒过了多少秒
[root@git git_data]# date +%s
1583995649

2020_03_12	# 备份时间
10.2.2		# Gitlab 版本

#删除所有数据

	# 先同步一下 Gitlab 上的数据
[root@git git_data]# git pull git@10.0.0.72:OPS/git_data.git
[root@git ~/git_data]# git rm -f *					#删除数据
[root@git ~/git_data]# git add .					#将删除变更上传到缓存仓库
[root@git ~/git_data]# git commit -m "delete"		#将删除变更上传到本地仓库
[root@git ~/git_data]# git push -u origin master	#将删除变更上传到远程Gitlab仓库

# 注意:出现异常情况的处理
	# 如果直接删除数据会出错
error: failed to push some refs to 'git@10.0.0.72:OPS/git_data.git'
	# 拉的过程如果出现异常,可以输入 :q 回车
From 10.0.0.72:OPS/git_data
 * branch            HEAD       -> FETCH_HEAD

查看 Gitlab 上数据已经没有了

请添加图片描述

2.恢复

#停服务
[root@gitlab ~/git_data]# gitlab-ctl stop unicorn
ok: down: unicorn: 1s, normally up
[root@gitlab ~/git_data]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up

#按照指定的备份文件恢复数据【此过程需要手动输入2次yes】
[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1583995649_2020_03_12_10.2.2
Unpacking backup ... done
Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.

Do you want to continue (yes/no)? yes
............
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yes

#启动服务
[root@gitlab git_data]# gitlab-ctl start unicorn
ok: run: unicorn: (pid 13065) 1s
[root@git git_data]# gitlab-ctl start sidekiq
ok: run: sidekiq: (pid 13105) 1s

#在 git 主机上检查数据是否恢复
[root@git ~]# rm -rf git_data/
[root@git ~]# git clone git@10.0.0.81:OPS/git_data.git
[root@git ~]# ll git_data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值