【devops】devops-gitlab之部署与日常使用

本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

1.什么是gitlab

复制代码
1.Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制。

2.GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习。

3.GitLab是一个基于Git实现的在线代码仓库软件,你可以用GitLab自己搭建一个类似于GitHub一样的仓库,
但是GitLab有完善的管理界面和权限控制,一般用于在企业、学校等内部网络搭建Git私服。

4.GitHub和GiLlab两个都是基于Web的Git远程仓库,它们都提供了分享开源项目的平台,
为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。从代码的私有性上来看,GitLab 是一个更好的选择。
但是对于开源项目而言,GitHub依然是代码托管的首选。

2.上传包

复制代码
# 安装包可参考清华源或阿里源下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
[root@git ~]# rz gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

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

安装环境:
1、  CentOS 6或者7
2、  2G内存(实验)生产(至少4G)
3、  安装包:gitlab-ce-10.2.2-ce
4、  禁用防火墙,关闭selinux

3.安装包

复制代码
#使用rpm安装,缺少依赖
[root@git ~]# 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

#安装依赖
[root@git ~]# yum install -y policycoreutils-python

#再次安装
[root@git ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

4.配置gitlab

复制代码
[root@git ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.80'

5.重新生成

复制代码
#修改配置文件以后重新生成
[root@git ~]# gitlab-ctl reconfigure


/var/opt/gitlab/	         # 配置文件
/etc/gitlab/gitlab.rb		 # 配置文件地址
/opt/gitlab/                    # gitlab的程序安装目录
/var/opt/gitlab                 # gitlab目录数据目录
/var/opt/gitlab/git-dfata       # 存放仓库数据
gitlab-ctl status               # 查看目前gitlab所有服务运维状态
gitlab-ctl stop                 # 停止gitlab服务
gitlab-ctl stop nginx           # 单独停止某个服务
gitlab-ctl tail                 # 查看所有服务的日志

6.gitlab组成

复制代码
[root@git ~]# gitlab-ctl status
run: gitaly: (pid 9873) 137s; run: log: (pid 9529) 207s
run: gitlab-monitor: (pid 9889) 136s; run: log: (pid 9630) 195s
run: gitlab-workhorse: (pid 9862) 137s; run: log: (pid 9483) 221s       #轻量级的反向代理服务器
run: logrotate: (pid 9513) 213s; run: log: (pid 9512) 213s		#日志管理工具
run: nginx: (pid 9496) 219s; run: log: (pid 9495) 219s			#web服务,web页面
run: node-exporter: (pid 9581) 201s; run: log: (pid 9580) 201s	
run: postgres-exporter: (pid 9908) 135s; run: log: (pid 9725) 176s
run: postgresql: (pid 9263) 285s; run: log: (pid 9262) 285s		#数据库
run: prometheus: (pid 9897) 136s; run: log: (pid 9695) 182s		#监控
run: redis: (pid 9203) 291s; run: log: (pid 9202) 291s			#缓存
run: redis-exporter: (pid 9647) 188s; run: log: (pid 9646) 188s
run: sidekiq: (pid 9467) 227s; run: log: (pid 9466) 227s		#后台的任务队列(异步执行)
run: unicorn: (pid 9429) 233s; run: log: (pid 9428) 233s		#动态web服务

7.常用命令

复制代码
#查看gitlab状态
[root@git ~]# gitlab-ctl status

#启动gitlab的服务
[root@git ~]# gitlab-ctl start nginx

#停止gitlab的服务
[root@git ~]# gitlab-ctl stop nginx

#查看服务日志
[root@git ~]# gitlab-ctl tail nginx

8.浏览器访问

复制代码
#访问 http://10.0.0.80
先修改默认密码:12345678

#登录
默认的用户名:root   密码:12345678

二、gitlab使用

1.外观设置

在登录界面增加自定义图片及文字

2.关闭注册接口

默认登录界面可用户自行注册并实现登录,但在公司中需要禁止用户自行注册,注册功能需经审批流程通过放可。所以在此将登录界面中的注册功能对外关闭。

3.汉化版配置

复制代码
1、下载汉化补丁 
git clone https://gitlab.com/xhang/gitlab.git

2、查看全部分支版本 
git branch -a

3、对比版本、生成补丁包 
git diff remotes/origin/10-2-stable remotes/origin/10-2-stable-zh > ../ 10.2.2-zh.diff

4、停止服务器 
gitlab-ctl stop

5、打补丁 
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.2.2-zh.diff

6、启动和重新配置 
gitlab-ctl start gitlab-ctl reconfigure

4.添加用户组

5.添加用户

6.把用户添加到用户组

7.创建项目

注意:默认创建的项目,只能对创建用户所在组用户有权限操作。如需其他普通用户对项目进行拉取,需要将其他普通 用户的组加入到项目中。如下图中,使用普通用户登录也可查看对应项目

8.推送和拉取项目

1)移除github的仓库
复制代码
[root@git git_data]# git remote remove origin
[root@git git_data]# git remote
2)添加gitlab的仓库
复制代码
[root@git git_data]# git remote add origin git@10.0.0.80:dev/git_data.git
[root@git git_data]# git remote
origin
# 查看当前分支的远端仓库地址
[root@git git_data]# git remote -v
3)推送代码
复制代码
#将公钥配置到gitlab仓库
复制代码
[root@git git_data]# git push -u origin master
Branch master set up to track remote branch master from origin.
Everything up-to-date
4)页面查看
5)克隆代码
复制代码
[root@git git_data]# cd /tmp/
#克隆代码
[root@git tmp]# git clone git@10.0.0.80:dev/git_data.git
Cloning into 'git_data'...
remote: Counting objects: 31, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 31 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (31/31), done.
Resolving deltas: 100% (2/2), done.
#查看
[root@git tmp]# ll
total 0
drwx------ 2 git  git  20 Sep 22 01:00 gitaly-ruby831479196
drwxr-xr-x 3 root root 59 Sep 22 02:10 git_data
6)拉取代码
复制代码
#创建仓库
[root@git opt]# mkdir git_data
[root@git opt]# cd git_data/

#初始化仓库
[root@git git_data]# git init
Initialized empty Git repository in /opt/git_data/.git/

#拉取代码
[root@git git_data]# git pull git@10.0.0.80:dev/git_data.git
remote: Counting objects: 31, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 31 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (31/31), done.
From 10.0.0.80:dev/git_data
 * branch            HEAD       -> FETCH_HEAD
 
#查看
[root@git git_data]# ll
total 8
-rw-r--r-- 1 root root  4 Sep 22 02:13 3
-rw-r--r-- 1 root root 12 Sep 22 02:13 master
-rw-r--r-- 1 root root  0 Sep 22 02:13 test_gihub

9.设置保护主分支

在实际中,一般不允许开发人员对分支进行合并到主分支,只能使用分支提交到gitlab中,再gitlab中进行申请 分支合并到主分支,交由管理员用户审批。 下面将实现做了分支保护之后各用户将代码上传到不同分支情况 结果:

  • 普通用户无法将master分支中的代码进行上传

  • 普通用户只能使用其他分支对代码进行上传

  • 普通用户如需将代码上传到主分支,只能使用普通分支对代码进行上传,再在页面中申请进行分支合并主分支

  • 管理员用户可以对主分支代码进行上上传和合并操作

  • 使用普通用户上传代码到master分支
复制代码
1.找一台新机器
2.使用新机器生成密钥对
3.将密钥对使用普通用户记录到gitlab
4.克隆代码
5.修改代码
[root@zabbix git_data]# echo 12312123123 > haoda
6.设置全局用户
[root@zabbix git_data]# git config --global user.email "123@qq.com"
[root@zabbix git_data]# git config --global user.name "haoda"
# 此操作是将远端代码库命名为origin,后面直接调用origin就可使用
[root@zabbix git_data]# git remote add origin git@10.0.0.80:dev/git_data.git
[root@zabbix git_data]# git config --list
7.提交代码到远程仓库
[root@zabbix git_data]# git add haoda
[root@zabbix git_data]# git commit -m "使用普通用户提交到master分支"
[root@zabbix git_data]# git push -u origin master
8.查看仓库
查看结果:普通用户直接将代码提交到了master主分支,不安全,于是需要在管理员用户中进行下面图片中的操作
  • 分支保护

  • 再次使用普通用户将代码提交到master分支

复制代码
1.再次修改代码
[root@zabbix git_data]# echo 123123123 > haoda3
2.提交代码
[root@zabbix git_data]# git add haoda3
[root@zabbix git_data]# git commit -m "配置完分支保护使用普通用户提交代码"
[root@zabbix git_data]# git push -u origin master
 Counting objects: 4, done.
 Compressing objects: 100% (2/2), done.
 Writing objects: 100% (3/3), 319 bytes | 0 bytes/s, done.
 Total 3 (delta 1), reused 0 (delta 0)
 remote: GitLab: You are not allowed to push code to protected branches on
this project.
 To git@10.0.0.80:dev/git_data.git
  ! [remote rejected] master -> master (pre-receive hook declined)
 error: failed to push some refs to 'git@10.0.0.80:dev/git_data.git'
3.提交代码被拒绝,没被允许
  • 使用管理员用户将代码提交至master分支
复制代码
1.先拉取代码(修改代码前,习惯性先拉取新代码在进行修改)
[root@git git_data]# git pull git@10.0.0.80:dev/git_data.git
2.修改代码
[root@git git_data]# echo 123456 > haoda2
3.推送代码到远程仓库
 [root@git git_data]# git add haoda2
 [root@git git_data]# git commit -m "使用管理用户推送代码带master分支"
 [root@git git_data]# git remote
 origin
 [root@git git_data]# git push -u origin master
4.使用管理用户提交是没有问题的
  • 使用普通用户向普通用户提交代码
复制代码
1.创建一个普通分支
[root@zabbix git_data]# git branch test
2.切换到普通分支
[root@zabbix git_data]# git checkout test
3.再次修改代码
[root@zabbix git_data]# echo 12312312312 >> haoda3
4.提交代码到新分支
[root@zabbix git_data]# git add haoda3
 [root@zabbix git_data]# git commit -m "使用普通用户向普通分支提交代码"
 [test f8bd225] 使用普通用户向普通分支提交代码
  1 file changed, 1 insertion(+)
 [root@zabbix git_data]# git push -u origin test
5.查看提交的代码
页面结果:提交成功

下面将实现普通用户代码申请合并主分支,一般第一次会直接在此处显示,如果未找到,可以参考图二

  • 图二:

  • 使用管理员用户登录查看合并请求

  • 查看合并成功

10.git-gui的使用

专门为开发人员准备

复制代码
0. 安装:傻瓜式安装,直接使用工具一直下一步就行
1.鼠标右键--> Git bash Here
2.配置全局变量,指定用户和邮箱
复制代码
windows密钥对生成
复制代码
1.针对开发人员操作,把公钥加入gitlab,当然是普通用户的gitlab
2.鼠标右键--> Git Gui Here
复制代码
选择克隆
  • 拉取后查看文件

  • 创建一个文件

复制代码
1.使用页面上传代码
Rescan #搜索有更新的代码
Stage Changed #上传到暂存区
Sign Off #提交到本地仓库前添加的注释
Commit #提交到本地仓库
Push #提交到远程仓库
注意:因为之前已经设置了分支保护,普通用户无法将代码上传到master分支中,只能创建新的分支,然后进行上传
  • 报错,因为普通用户无法向master分支提交代码

  • 创建新的分支

  • 再次提交,先切换至其他分支

  • 页面进行合并

11.gitlab备份

  • 1.备份
复制代码
对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。
gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。
备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。
如果自定义备份目录需要赋予git权限。

1) 配置gitlab
[root@git git_data]# vim /etc/gitlab/gitlab.rb
#开启备份
gitlab_rails['manage_backup_path'] = true
#备份文件的目录
gitlab_rails['backup_path'] = "/backup/gitlub"
#备份文件的权限
gitlab_rails['backup_archive_permissions'] = 0644
#备份文件保留的时间(单位是秒)
gitlab_rails['backup_keep_time'] = 604800        备份保留的时间(以秒为单位,这个是七天默认值

2)创建备份目录
[root@git git_data]# mkdir /backup/gitlub -p
#授权
[root@git git_data]# chown -R git.git /backup/gitlub/

3)gitlab重新生成
[root@git git_data]# gitlab-ctl reconfigure

4)手动备份
#先拉取最新代码
[root@git git_data]# git pull git@10.0.0.80:dev/git_data.git
#备份
[root@git git_data]# gitlab-rake gitlab:backup:create

5)检查备份
[root@git git_data]# ll /backup/gitlub/
total 512
-rw-r--r-- 1 git git 522240 Sep 23 00:49
1600793349_2020_09_23_10.2.2_gitlab_backup.tar

6) 自动备份
#写脚本结合定时任务

2.误删除数据

复制代码
注意:gitlab只能恢复相同版本的代码

1) 代码拉取
[root@git git_data]# git pull git@10.0.0.80:dev/git_data.git

2) 误删除代码
[root@git git_data]# rm -rf ./*
[root@git git_data]# git add -A
[root@git git_data]# git commit -m "故意误删除数据"
[root@git git_data]# git push -u origin master

3) 恢复数据
- 停止相关服务
[root@git git_data]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
[root@git git_data]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
[root@git git_data]# gitlab-ctl status

4) 使用备份数据恢复数据
#查看备份的文件
[root@git git_data]# ll /backup/gitlub/
total 1024
-rw-r--r-- 1 git git 522240 Sep 23 00:49
1600793349_2020_09_23_10.2.2_gitlab_backup.tar
-rw-r--r-- 1 git git 522240 Sep 23 00:50
1600793421_2020_09_23_10.2.2_gitlab_backup.tar
[root@git git_data]# gitlab-rake gitlab:backup:restore
BACKUP=1600793421_2020_09_23_10.2.2

5)启动服务
[root@git git_data]# gitlab-ctl start sidekiq
ok: run: sidekiq: (pid 33707) 0s
[root@git git_data]# gitlab-ctl start unicorn
ok: run: unicorn: (pid 33724) 1s
[root@git git_data]# gitlab-ctl status

6) 查看恢复数据
直接在页面中进行查看
相关推荐
南棋网络安全41 分钟前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
帷幕落秋1 小时前
进程服务与文件描述符
linux·运维·面试
帷幕落秋1 小时前
信号、Ctrl 组合键与进程状态
linux·运维·面试
开开心心就好1 小时前
文件被占用删不掉?解锁工具强制删除
java·运维·服务器·开发语言·前端·pdf·ocr
小超人诞生日记1 小时前
Linux 进程优先级
linux·运维·服务器
科技象限1 小时前
数据防泄漏系统:文件是怎么溜出门的,就该怎么堵
运维·网络·网络安全·安企神
cpolar技术支持2 小时前
端口被谁占了、这台机上开了哪些监听?本机起一个端口占用只读清单,cpolar 给异地同事远程看谁在监听
运维·python·内网穿透·cpolar·端口占用
在西安放羊的牛油果2 小时前
WebP 图片优化方案详解
运维·前端·架构
JavaPub-rodert2 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器
学IT的周星星3 小时前
记忆系统:让 Agent 记住你是谁、上次聊到哪
运维·服务器·人工智能·windows·大模型·llm·agent