2.代码控制平台:Gitlab版本控制系统实战

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 查看该项目是否已经是 masterdev 分支合并后的效果

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-ce12.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忘记密码

如何重置 GitLabroot 密码 官方修改密码方式

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





猜你喜欢

转载自blog.csdn.net/xiaoleinb/article/details/112544733