ぷ行走de猫げ

在快乐中成长,在快乐中学习!

Gitlab仓库管理系统-高可用部署

1、Gitlab介绍

GitLab是一个流行的版本控制系统平台,主要用于代码托管、测试和部署。

GitLab是基于Git的一个开源项目,它提供了一个用于仓库管理的Web服务。GitLab使用Ruby on Rails构建,并提供了诸如wiki和issue跟踪等功能。它允许用户通过Web界面访问公开或私有的项目,并能够管理团队对仓库的访问权限。此外,GitLab还支持持续集成(CI)和持续部署(CD),使其成为软件开发过程中的重要工具。

GitLab的主要特点包括:

  1. 版本控制:作为一个基于Git的平台,GitLab提供了强大的版本控制功能,允许用户创建分支、合并代码以及处理冲突。
  2. 代码审查:GitLab支持代码审查流程,团队成员可以对提交的代码进行评论和讨论。
  3. 项目管理:通过Issue和Merge Request等特性,GitLab帮助团队跟踪进度和管理任务。
  4. 持续集成/持续部署:GitLab CI/CD是其核心功能之一,支持自动化的构建、测试和部署流程。
  5. 自托管与云服务:GitLab可以自行在本地服务器上部署,也可以使用GitLab提供的云服务。
  6. 内置工具:GitLab提供了一系列的内置工具,如容器扫描、安全性报告、性能分析等,以增强开发流程的安全性和效率。
  7. 社区版和企业版:GitLab提供社区版(CE)和企业版(EE),社区版免费开放,而企业版提供了更多的高级功能。

2、GitLab与Git的关系,以及GitHub的区别和联系

GitLab是在Git的基础上搭建起来的,与GitHub有着相似的功能但也存在一些差异。

首先,Git是一个分布式版本控制系统,而GitLab和GitHub都是基于这个系统建立起来的平台。

GitLab的主要优点在于它的开源特性,允许用户在私有服务器上运行,这对于企业内部网络构建私有仓库非常有用。而GitHub虽然提供了类似的服务,但其核心是面向开源项目的托管平台,对于私有仓库则有一定的收费政策。

其次,GitLab提供了免费的无限私有存储库,适合企业、学校等内部网络搭建git私服。相比之下,GitHub的私有仓库需要付费。此外,GitLab还提供了企业版(GitLab EE),它包含了更高级的功能,如访问控制、安全性以及合规性等。

最后,GitHub因其较早成立,拥有更广泛的用户基础和社区支持。这使得GitHub在全球开发者中的知名度和使用率都较高。而GitLab虽然相对较新,但由于其开源和免费的特性,也逐渐获得了市场的认可。

3、搭建Gitlab

3.1、下载gitlab-ce的rpm软件包

wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/7/gitlab-ee-16.10.0-ee.0.el7.x86_64.rpm

3.2、rpm安装gitlab

rpm -ivh gitlab-ee-16.10.0-ee.0.el7.x86_64.rpm

安装完成后截图如下:

3.3、创建gitlab存储目录

创建gitlab数据存储目录
mkdir -p /nfs/gitlab/gitdata
创建gitlab备份存储目录
mkdir -p /nfs/gitlab/backups

3.3、修改gitlab配置文件

vi /etc/gitlab/gitlab.rb

修改访问地址
external_url 'http://10.1.16.173'

修改GitLab服务器时区
gitlab_rails[‘time_zone’] = 'Asia/Shanghai'

修改数据存储目录
git_data_dirs({
   "default" => {
     "path" => "/nfs/gitlab/gitdata"
    }
})

设置邮箱服务
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "emailsmtp02.mindray.com"
gitlab_rails['smtp_port'] = 25
# gitlab_rails['smtp_user_name'] = "smtp user"
# gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_domain'] = "mindray.com"
# gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'

修改日志存放路径
gitlab_rails['log_directory'] = "/nfs/gitlab/log"

停止当前gitlab,重新加载配置

gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl start

  重新加载后,会发现在/nfs/gitlab/gitdata目录下多出一个repositories目录
  最后启动gitlab即可
  gitlab-ctl restart

访问web系统
http://10.1.16.173

此时应该看到的是 GitLab 登录界面。在 GitLab 第一次初始化时,会自动生成一个管理员账户。其中,该账户的用户名为 root,密码在一个自动生成的文件 /etc/gitlab/initial_root_password 中(密码不会含空格),且会在 24 小时后自动被删除。

现在要做的是,先备份上述的文件 initial_root_password,然后登录管理员账户修改管理员密码。新密码长度不能小于 8 位。

[root@hqiotnfs01l ~]# cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: kCsRV6ijYc3X2RceyfdhZEB5E7OqXBjESLpQrCrpY/0=

修改密码
root
XXXXXXXX

3.4、gitlab相关命令

#启动服务
gitlab-ctl start
#停止服务
gitlab-ctl stop
#重启服务
gitlab-ctl restart
#状态
gitlab-ctl status
#监控
gitlab-ctl  tailunicorn 监控unicorn日志
gitlab-ctl  tail

查看Gitlab 安装包
rpm –qa | grep gitlab

删除gitlab
rpm –e gitlab-ce

查看gitlab 进程
ps aux | grep gitlab

杀掉所有gitlab 进程
Kill –9  进程号

删除所有包含gitlab文件
find / -name | grep gitlab rm -rf

4、Gitlab管理员常用配置

gitlab设置中文

点击头像——偏好设置——本地化
选择 Chinese, Simplified - 简体中文

gitlab帐户和限制

管理中心——设置——通用——账户和限制

# 取消访问外网

取消勾选 启用 Gravatar 

# 禁止用户创建群组和项目

默认项目限制,修改数字为 0 

用户限制,全部取消勾选 

gitlab取消注册功能
管理中心——设置——通用——注册限制

gitlab设置默认分支为master

管理中心——设置——仓库——默认分支

gitlab管理员创建群组及子群组

点击主页——群组——新建群组或者新建子群组

gitlab管理员授予群组用户权限

管理中心——群组——点击某一个群组——点击管理权限——添加用户——授予用户最大角色

5、Gitlab维护者配置

gitlab创建个人令牌

点击头像——偏好设置——访问令牌

选择群组,创建一个空项目

获取项目地址

 VSCode关联项目地址,上传项目代码。

项目本地目录

 我们在VSCode可以进行源代码的相关管理

 在gitlab可以对源代码进行管理

6、Gitlab源代码迁移

在这里讲述一下,从Git仓库迁移到全新的gitlab平台的一个过程

# 旧项目,本地目录

E:\Git\C01.IOT.MANAGE.WEB

# 新项目,gitlab地址

http://10.1.16.173/pub/test.git

注意:新项目,一定是一个空白项目,并且不包含自述文件README.md

#  打开git bash命令行交互窗口

操作步骤如下:

克隆老项目的镜像(old.git为老项目的git地址)

git clone --mirror old.git

进入目录项

cd old.git
将老项目的地址替换成新项目(new.git为新项目的git地址)

git remote set-url --push origin new.git
将镜像推到远程

git push --mirror new.git
最后去gitlab上查看新项目的提交数据是否已更新
目前这个仓库的迁移是最方便简单的,有需要的同学可以试试!

 可以看到旧代码已经全部迁移过来,包含所有分支,以及签入日志。

7、Gitlab远程定时备份与恢复

代码是公司的核心资产,如果只是单机运行,或者单机备份,一旦出现磁盘损坏,数据无法取出,将会是一次重大生产事故。在此,我们一定要做好gitlab的远程备份与恢复验证。

7.1、环境准备

# gitlab运行环境  10.1.16.173

# gitlab备份环境  10.1.16.174

7.2、本地备份

vi /etc/gitlab/gitlab.rb

### Backup Settings
gitlab_rails['manage_backup_path'] = true   # 开启备份
gitlab_rails['backup_path'] = "/nfs/gitlab/backups"    # 备份目录
gitlab_rails['backup_archive_permissions'] = 0644     # 生成的备份文件权限
gitlab_rails['backup_keep_time'] = 604800  # 默认备份保留天数为7天
更改完成后重载配置文件
gitlab-ctl reconfigure
手动备份gitlab
gitlab-rake gitlab:backup:create

查看备份目录:

这样我们完成了gitlab的本地备份。

7.3、定时备份

我们通过crontab完成定时备份与文件迁移

# 运行环境  10.1.16.173

创建备份脚本     

vi /nfs/gitlab/gitlab_backup.sh

#!/bin/bash
# gitlab 服务器备份路径
LocalBackDir=/nfs/gitlab/backups #修改配置文件后,自定义的备份路径
# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/nfs/gitlab/backups
# 远程备份服务器 登录账户
RemoteUser=root
# 远程备份服务器 IP地址
RemoteIP=10.1.16.174
#当前系统日期
DATE=`date +"%Y-%m-%d"`
#Log存放路径
LogFile=/nfs/gitlab/log/$DATE.log
#执行备份
gitlab-rake gitlab:backup:create
# 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60  -name '*.tar*')
#新建日志文件
touch $LogFile
#追加日志到日志文件
echo "Gitlab auto backup to remote server, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile
# 输出日志,打印出每次scp的文件名
echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile
#备份到远程服务器
scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir
#追加日志到日志文件
echo "---------------------------------------------------------------------------" >> $LogFile
#删除备份服务器上旧的备份文件
ssh $RemoteUser@$RemoteIP "/nfs/gitlab/gitlab_backup_remove.sh"

修改脚本权限
chmod 777 /nfs/gitlab/gitlab_backup.sh

# 备份环境  10.1.16.174

创建定时删除脚本

vi /nfs/gitlab/gitlab_backup_remove.sh

#!/bin/bash
  
# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/nfs/gitlab/backups
echo '查找远程备份路径下,超过3天且文件后缀为.tar 的 Gitlab备份文件 然后删除'
find $GitlabBackDir -type f -mtime +3 -name '*.tar*' -exec rm {} \;

修改脚本权限
chmod 777 /nfs/gitlab/gitlab_backup.sh

# 运行环境  10.1.16.173

添加定时任务
crontab -e
每天23时执行脚本
0 23 * * * /nfs/gitlab/gitlab_backup.sh
查看任务计划
crontab -l

 这样,我们就可以在远程备份服务器,看到每天晚上23点执行的备份文件。

7.4、数据恢复

# 停止Gitlab服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
ok: down: sidekiq: 12s, normally up

# 开始恢复数据
gitlab-rake gitlab:backup:restore BACKUP=/nfs/gitlab/backups/1711897288_2024_03_31_16.10.0-ee
注意!!!! 指定备份文件时得把 _gitlab_backup.tar去掉 才可以正常恢复,否则会报错说找不到文件

# 启动Gitlab服务
gitlab-ctl start unicorn
gitlab-ctl start sidekiq
ok: run: sidekiq: (pid 83582) 0s

 

posted @ 2024-08-12 14:57  李天翔  阅读(274)  评论(0编辑  收藏  举报