前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >私有化代码仓库Gitlab的落地与应用(一)

私有化代码仓库Gitlab的落地与应用(一)

作者头像
大刚测试开发实战
发布2022-11-14 14:01:19
1.1K0
发布2022-11-14 14:01:19
举报
文章被收录于专栏:大刚测试开发实战

写在前面

前段时间,接到任务:尝试搭建一个私有化的代码仓库给前端团队使用。刚好在此之前我用Docker搭建过一个Gitlab,但使用了几天,出现了诸多问题,维护起来也比较麻烦,最终决定按照传统方法重新搭建。截至目前,服务已平稳运行数月。本文主要记录《私有化代码仓库Gitlab的落地与应用》系列(一):Gitlab传统搭建方式及后台维护,内容主要分为以下几个部分:

  • Gitlab简介
  • Gitlab搭建步骤
  • 常见问题及解决
  • Gitlab配置信息及常用操作命令
  • 代码仓库数据迁移
  • 代码仓库自动备份

一、Gitlab简介

GitLab是一个由GitLabInc.开发、利用Ruby on Rail开发的开源应用程序,用于实现一个自托管的Git项目仓库,可以通过web 界面进行访问公开的或者私人项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释,可以管理团队对仓库的访问。GitLab是专门为Unix操作系统开发的,不可运行在Windows操作系统上面,所以需要在Linux虚拟机或者 Docker上安装。GitLab分为社区版Community Edition 和 企业版Enterprise Edition。

二、Gitlab搭建步骤

1.安装依赖

代码语言:javascript
复制
yum install -y curl policycoreutils-python openssh-server

2.下载镜像文件并上传至服务器

国内镜像地址:

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

3.安装Gitlab

代码语言:javascript
复制
rpm -i gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

4.配置Gitlab

  • 编辑配置文件:
代码语言:javascript
复制
vi /etc/gitlab/gitlab.rb

主要涉及两处改动:

代码语言:javascript
复制
external_url 'http://192.168.1.122'       # 改为自己的IP地址
unicorn['port'] = 8080   # 默认8080端口,需提前确认端口是否被占用

5.启动Gitlab

代码语言:javascript
复制
gitlab-ctl reconfigure  # 重新加载配置文件,每次改动配置文件都需要执行
gitlab-ctl restart    # 重启gitlab服务

6.访问Gitlab

http://192.168.1.122:8090

三、常见问题及解决

1.前端页面访问出现502

出现502可能有以下原因:

  • 正在启动中 由于Gitlab组件较多,启动需要一定过程,因此,在输入启动命令后可稍等2分钟,待其完全启动,再次刷新前端页面即可。
  • 内存不足 由于Gitlab组件多、整体较为庞大,因此在部署成功启动运行后会占用相当一部分内存,大约在3-5G左右。出现前端访问页面报502可以考虑杀掉一些其他无用的进程,释放内存后,再重新启动Gitlab。
  • 端口被占用 默认的端口号是8080,可以使用netstat -ntpl 或 lsof -i:8080 命令来查看端口占用情况

通过后台运行日志,排查如果是因为端口被占用引起的,可以按照上述修改配置文件方法,将配置文件中的端口号修改即可,修改后需要按照第4步重新加载配置文件、重启服务。更多配置信息,可以在 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml 中进行查看。

四、Gitlab配置信息及常用操作命令

1.常见配置

默认安装的gitlab,主要有四个目录:

◆ /opt/gitlab/ # 主目录

◆ /etc/gitlab/ # 放置配置文件

◆ /var/opt/gitlab/ # 各个组件

◆ /var/log/gitlab/ # 放置日志文件

2.常用命令

◆ gitlab-ctl start # 启动所有 gitlab 组件;

◆ gitlab-ctl stop # 停止所有 gitlab 组件;

◆ gitlab-ctl restart # 重启所有 gitlab 组件;

◆ gitlab-ctl status # 查看服务状态;

◆ vim /etc/gitlab/gitlab.rb # 修改gitlab配置文件;

◆ gitlab-ctl reconfigure # 重新编译gitlab配置;

◆ gitlab-ctl tail # 查看日志;

◆ gitlab-ctl help # 查看相关的帮助

五、代码仓库数据迁移

1.旧服务器数据手动备份

先停掉gitlab,然后执行备份命令

代码语言:javascript
复制
gitlab-ctl stop
gitla-rake gitlab:backup:create

生成的备份文件会存在/var/opt/backups/目录下,生成的文件名如1633777959_2021_10_09_14.0.6_gitlab_backup.tar,其中14.0.6是当前gitlab的版本号,恢复时使用的gitlab必须是同样的版本号,否则没法进行恢复。该文件里面包含了所有user、group、git repository数据。

2.新服务器上恢复数据

将备份文件复制到新服务器的/var/opt/backups/目录下,停掉gitlab的puma、sidekiq两个服务,然后执行恢复操作

代码语言:javascript
复制
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
gitla-rake gitlab:backup:restore BACKUP=1633777959_2021_10_09_14.0.6
gitlab-ctl start puma
gitlab-ctl start sidekiq

特别注意:

gitlab不能跨版本升级,只能一个一个大版本地升级

可能遇到的报错:

Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'

解决方法:

代码语言:javascript
复制
chmod 2770 /var/opt/gitlab/git-data/repositories

六、代码仓库自动备份

方式一:使用gitlab配置文件设置自动备份

1.编辑 /etc/gitlab/gitlab.rb文件,找到以下内容并按照如下配置:

  • 本地默认备份路径:/var/opt/gitlab/backups
  • gitlab备份命令:gitlab-rake gitlab:backup:create
  • gitlab恢复命令:gitlab-rake gitlab:backup:restore BACKUP=备份包名
  • gitlab备份配置修改:/etc/gitlab/gitlab.rb

2.更新配置

代码语言:javascript
复制
gitlab-ctl reconfigure

方式二:使用Linux系统crondtab服务自动备份

1.配置定时任务:crontab -e

查看定时任务:crontab -l

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 表示每天凌晨两点执行备份命令

设置cron服务开机自启:systemctl enable crond.service

修改后重启cron服务:systemctl restart crond

【tips】:

代码语言:javascript
复制
tips1:
cron服务的启停:
systemctl start crond.service 服务启动
systemctl stop crond.service  服务停止
systemctl restart crond.service 服务重新启动
systemctl reload crond.service  服务重新加载配置

tips2:
*  *  *  *  *  command
分  时  日  月  周  命令
其中,
第1列表示分钟,1~59,每分钟用*表示
第2列表示小时,1~23,(0表示0点)
第3列表示日期,1~31
第4列表示月份,1~12
第5列表示星期,0~6(0表示星期天)
第六列表示要运行的命令

2.自动上传gitlab的备份文件到另一台服务器

1)设置两台服务器免密登录

2)编写自动上传备份文件shell脚本:gitlab-upload.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash
backup_dir='/var/opt/gitlab/backups/new_backups'
last_file=`ls $backup_dir -t | head -n 1`

cd $backup_dir
`scp $last_file root@192.168.1.122:/home/gitlab_auto_bakcups/`

编写完成后要对文件赋予执行权限:chmod +x gitlab-upload.sh

3)设置crondtab定时任务

执行crondtab -e命令,设置为每天凌晨三点执行远程传输备份文件任务,内容如下,

代码语言:javascript
复制
0 3 * * * /opt/gitlab/bin/gitlab-upload.sh

保存后要重载crond服务:systemctl reload crond.service

七、小结

总的来说,Gitlab的搭建过程比一般软件的搭建要繁琐,另外像数据自动备份、数据迁移所用到的Linux技能也较多,可以按需配置和操作。最后,总结一下本次用到的Linux技能:

  • 文件及文件夹的增删改查复制等:vi、touch、rm、find、cat、cd、cp、mv、mkdir命令
  • 文件远程拷贝:scp命令
  • 赋予文件权限:chmod命令
  • shell脚本编写
  • 定时任务工具crontab的用法
  • 配置免密登录
  • 查看端口占用:lsof、netstat命令
  • 查看内存:free命令

更多Linux技能可点击关注小程序,一起打卡提升:

【下集预告】

《私有化代码仓库Gitlab的落地与应用》系列(二):测试代码接入Gitlab仓库

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
代码托管
CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档