03.Gitlab版本控制系统实战
1.Gitlab基本概述
1.1 什么是gitlab
Gitlab是一个开源分布式的版本控制系统。 Ruby语言开发完成。
Gitlab主要实现的功能
1.管理项目源代码。
2.对源代码进行版本控制。
3.对代码进行超找与复用。
1.2 Gitlab与Github区别
1.相同点: 两者都是提供代码托管服务,在很大程度上GitLab是仿照GitHub来做的。
2.不同点: github创建私有仓库收费、gitlab创建私有仓库免费。
PS:
从安全方面来看,公司不希望员工获取到全部的代码,这个时候 GitLab 是最佳的选择。
但对于开源项目而言,GitHub 依然是代码托管的首选平台。
2.Gitlab的优势和应用场景
1.开源免费,搭建简单、维护成本较低、适合中小型公司。
2.权限管理,能实现代码对部分人可见,确保项目的安全性。
3.离线同步,保证我们不在实时依赖网络环境进行代码提交。
1.3 Gitlab服务构成
gitlab作为一个分布式代码托管软件,它必然有相关的服务组件去支持这个庞大系统。
nginx,作为gitlab的proxy代理,处理http/https以及静态资源访问请求。
gitlab-workhorse,用于处理文件上传和下载。
gitlab-shell,用于处理git clone、git pull、git push。
Logrotate,用于处理日志的切割和打包等操作。
Postgresql,用于保存所有的gitlab数据相关信息。
Redis,用于缓存数据库的信息,加快前台访问速度,以及交互读写。
2.Gitlab安装配置
本小章大纲
1.安装Gitlab服务所需的依赖包。
2.下载Gitlab服务、安装Gitlab服务。
3.配置Gitlab服务、访问域名以及邮箱。
4.初始Gitlab服务、启动Gitlab服务。
5.访问Gitlab服务、以及gitlab邮箱测试。
2.1 安装依赖软件
1.关闭防火墙
[root@gitlab ~]# setenforce 0
[root@gitlab ~]# systemctl stop firewalld && systemctl disable firewalld
2.安装 gitlab
所需依赖软件
[root@gitlab ~]# yum install -y curl openssh-server postfix wget
2.2 安装 Gitlab 组件
1.下载 Gitlab
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
2.使用 yum
安装 Gitlab
[root@gitlab ~]# yum localinstall gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm -y
2.3 配置 Gitlab 域名
后期通过域名访问 gitlab
服务
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
#1.Gitlab Url
external_url 'http://gitlab.oldbgx.com'
2.4 配置 Gitlab 邮箱
1.在账号注册时,需要使用邮件验证。
2.后期修改密码时,需要通过邮件修改。
#2.Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = "[email protected]" # 发件邮箱
gitlab_rails['gitlab_email_display_name'] = 'OldXu-GitLab' # 发件人显示名称
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]" #发件人邮箱账户
gitlab_rails['smtp_password'] = "nvguuktrefkmbcbe" #发件人邮箱客户端授权码
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
2.5 关闭 Gitlab 组件
由于 Gitlab
核心功能是代码托管,所以有些额外的组件比较浪费资源,所以可以考虑关闭。
#将不需要使用的组件都设定为false
1385 prometheus['enable'] = false
1386 prometheus['monitor_kubernetes'] = false
1474 node_exporter['enable'] = false
1493 redis_exporter['enable'] = false
1511 postgres_exporter['enable'] = false
1540 gitlab_monitor['enable'] = false
1553 prometheus_monitoring['enable'] = false
1560 grafana['enable'] = false
1452 alertmanager['enable'] = false
2.6 初始化 Gitlab 组件
第一次需要初始化 gitlab
服务,后续如果对 gitlab
配置文件进行修改,也需要执行初始化进行重新配置。
[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl status
[root@gitlab ~]# gitlab-ctl stop
[root@gitlab ~]# gitlab-ctl start
2.7 验证 Gitlab 组件
1.重新初始化后通过 gitlab-rails
检查 gitlab
邮箱是否可正常使用。
[root@gitlab ~]# gitlab-rails console
Notify.test_email('接收方邮件地址','邮件标题','邮件内容').deliver_now
2.第一次登录需要gitlab,需要配置 Gitlab root
超级管理员的密码。
3.登陆后可见如下界面所示
2.8 汉化 Gitlab 组件
1.使用 git
命令下载汉化补丁包 gitlab中文汉化传送门
# wget https://gitlab.com/xhang/gitlab/-/archive/12-0-stable-zh/gitlab-12-0-stable-zh.tar.gz
# tar xf gitlab-12-0-stable-zh.tar.gz
# cat gitlab-12-0-stable-zh/VERSION #查看汉化版本是否与gitlab版本一致
12.0.3
2.停止 gitlab
,进行中文汉化。
# gitlab-ctl stop
# \cp -r gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
3.重启 gitlab
,验证汉化结果。
#重新配置gitlab服务
[root@gitlab ~]# gitlab-ctl reconfigure
#重启gitlab服务
[root@gitlab ~]# gitlab-ctl restart
4.登陆 gitlab
服务器,会发现处理半中文半 English
状态
5.我们需要将 gitlab
配置为简体中文即可整体汉化
6.至此 Gitlab
汉化完毕,下面就可以开启 Gitlab
之旅
3.Gitlab用户与组
3.1 用户与组及仓库的关系
Gitlab
中的用户、用户组、项目仓库之间的关系是什么样的?
- 注意:
- 如果使用
user
创建一个仓库,那么这个用户就是这个仓库的owner
- 如果使用
group
创建一个仓库,那这个组下面添加的所有用户就是这个仓库的owner
3.2 用户与组及仓库案例1
- 案例1:验证项目是不是隶属于该组的成员才可以看见
- 1.首先创建
dev、ops
两个组 - 2.然后基于组创建两个项目项目
- 3.最后创建用户、为用户分配组、以及组中的权限
3.3 用户与组及仓库案例2
- 案例2:验证主程序员和开发者身份的权限
- 1.主程序员:能够对
master、dev
分支进行操作;[通过命令测试] - 2.测试开发者:仅能对非
master
分支进行操作;[通过命令演示效果]
3.4 用户与组及仓库案例3
- 案例3:模拟日常开发者如何更新代码至
master
分支
- 1.首先创建一个
dev
分支,然后编写代码提交至远程gitlab
- 2.登陆
gitlab
服务端,像主程序员申请合并请求,请求dev
合并master
- 3.登陆主程序员账户查看合并信息,并确认合并操作
- 4.登陆
gitlab
查看该项目是否已经是master
与dev
分支合并后的效果
4.Gitlab日常操作
4.1 如何关联远程仓库
[root@A-devops ~]# mkdir demo && cd demo/
[root@A-devops demo]# git init
[root@A-devops demo]# git config --global user.name "Xuliangwei"
[root@A-devops demo]# git config --global user.email "[email protected]"
[root@A-devops demo]# git remote add origin [email protected]:shoping/demo.git
[root@A-devops demo]# echo "Gitlab Web" > README.md
[root@A-devops demo]# git add .
[root@A-devops demo]# git commit -m "init commit"
[root@A-devops demo]# git push -u origin master
如果出现输入密码提示,则说明该主机与gitlab服务器没有配置免秘钥。那么需要在当前主机上执行ssh-keygen 生成秘钥,然后将其公钥放置gitlab服务器上。
PS: 有人说为什么放root用户上,其实只要该用户对该项目拥有提交权限就行。(完成后记得再次提交)
4.2 新成员加入操作流程
- 如果有新成员需要加入该项目该怎么办?
- 1.先给新成员创建用户
- 2.将成员加入组,此时该用户就能看到对应的项目
- 3.使用http方式,输入用户名与密码,测试能否获取项目代码
- 3.使用ssh方式,添加对应公钥信息,测试能否获取项目代码
5.Gitlab日常运维
Gitlab
的备份与恢复非常简单,话不多说,我们来看具体操作
5.1 Gitlab备份
1.修改默认存放备份站点目录,然后进行重新加载配置文件
[root@gitlab-ce ~]# vim /etc/gitlab/gitlab.rb
...
gitlab_rails['backup_path'] = "/data/gitlab/backups" #备份路径变更
gitlab_rails['backup_keep_time'] = 604800 #备份保留7天
...
[root@gitlab-ce ~]# gitlab-ctl reconfigure
2.手动执行备份命令,会将备份的结果存储至 /data/gitlab/backups
目录中
[root@gitlab-ce ~]# mkdir -p /data/gitlab/backups
[root@gitlab-ce ~]# gitlab-rake gitlab:backup:create
3.当然也可以将备份命令写入定时任务每天进行自动备份
[root@gitlab-ce ~]# crontab -l
00 02 * * * /usr/bin/gitlab-rake gitlab:backup:create
5.2 Gitlab 恢复
1.停止数据写入服务
[root@gitlab-ce ~]# gitlab-ctl stop unicorn
[root@gitlab-ce ~]# gitlab-ctl stop sidekiq
2.通过 gitlab-rake
命令进行恢复,恢复时需要指定此前备份的名称。(但不需要写名称的.tar
后缀)
[root@gitlab-ce ~]# gitlab-rake gitlab:backup:restore BACKUP=1528102291_2018_06_04_10.8.3
3.重启gitlab
,检测是否 gitlab
是否恢复。
[root@gitlab-ce ~]# gitlab-ctl restart
5.3 Gitlab升级与迁移
1.升级 10.0.0.110
上的 gitlab-ce
到 12.10
版本
[root@git ~]# yum localinstall gitlab-ce-12.10.9-ce.0.el7.x86_64.rpm -y
2.在 10.0.0.110
上对 gitlab
进行初始化
[root@git ~]# gitlab-ctl reconfigure
3.在 10.0.0.110
上备份当前 gitlab
的数据以及用户
[root@git ~]# gitlab-rake gitlab:backup:create
4.将 10.0.0.110
上备份的配置文件、仓库数据文件,推送到 10.0.0.120
[root@git ~]# scp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json \
/var/opt/gitlab/backups/1592295445_2020_06_16_12.10.9_gitlab_backup.tar [email protected]:~
5.在 10.0.0.120
上安装 gitlab-ce-12.10.x
版本
[root@jenkins ~]# yum localinstall gitlab-ce-12.10.9-ce.0.el7.x86_64.rpm -y
6.将 10.0.0.110
备份过来的配置与仓库文件,存储至对应的目录中,然后对gitlab
进行初始化
[root@jenkins ~]# \cp gitlab.rb gitlab-secrets.json /etc/gitlab/
[root@jenkins ~]# cp 1592295445_2020_06_16_12.10.9_gitlab_backup.tar /var/opt/gitlab/backups/
[root@jenkins ~]# chown git.git /var/opt/gitlab/backups/1592295445_2020_06_16_12.10.9_gitlab_backup.tar
[root@jenkins ~]# gitlab-ctl reconfigure
7.恢复数据,检查数据是否正常。
[root@jenkins ~]# gitlab-ctl stop unicorn
[root@jenkins ~]# gitlab-ctl stop sidekiq
[root@jenkins ~]# gitlab-rake gitlab:backup:restore BACKUP=1592295445_2020_06_16_12.10.9
注意:不能直接从12升级到13,需要先升级到12的最新版,然后在升级13,但是升级到13会有很多配置的变化,需要自行修改。
1.直接yum localinstall 进行软件包升级,升级至13版本。
[root@gitlab ~]# yum localinstall gitlab-ce-13.0.10-ce.0.el7.x86_64.rpm -y
#会提示报错:
Running transaction
* gitlab_monitor['enable'] has been deprecated since 12.3 and was removed in 13.0. Use gitlab_exporter['enable'] instead.
2.根据提示编辑 /etc/gitlab.rb
配置文件
gitlab_monitor['enable'] =false
#变更为
gitlab_exporter['enable'] = false
3.修改配置后重新初始化,然后在进行升级
[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# yum localinstall gitlab-ce-13.0.10-ce.0.el7.x86_64.rpm -y
4.重启 gitlab
服务,然后检查版本以及数据。
5.4 Gitlab忘记密码
如何重置 GitLab
的 root
密码 官方修改密码方式
1.在 root
用户下,执行
[root@gitlab-ce ~]# gitlab-rails console -e production
2.获得用户数据,修改用户密码
irb(main):001:0> user = User.where(id: 1).first
#更改密码并确认密码
irb(main):002:0> user.password="oldxu.com"
irb(main):003:0> user.password_confirmation="oldxu.com"
#保存退出
irb(main):004:0> user.save!
irb(main):005:0> quit