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

简介: 本文主要介绍了:gitlab安装搭建步骤、部署常见问题及解决办法、gitlab常用操作命令示例、代码仓库数据迁移、代码仓库自动备份

写在前面

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

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

一、Gitlab简介

4a71ee94b2cfde3a86d9080ba515beb1.jpeg

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

二、Gitlab搭建步骤

1.安装依赖

yum install -ycurl policycoreutils-python openssh-server

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

内镜像地址

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

3.安装Gitlab

rpm -i gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

4.配置Gitlab

  • 编辑配置文件gitlab.rb,主要涉及两处改动:
external_url 'http://192.168.1.122'# 改为自己的IP地址unicorn['port'] =8080# 默认8080端口,需提前确认端口是否被占用

5.启动Gitlab

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,然后执行备份命令

gitlab-ctl stopgitla-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两个服务,然后执行恢复操作

gitlab-ctl stop puma
gitlab-ctl stop sidekiq
gitlab-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]',解决方法:
chmod2770 /var/opt/gitlab/git-data/repositories

六、代码仓库自动备份

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

1.配置gitlab.rb

编辑 /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.更新配置

gitlab-ctl reconfigure

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

1.配置定时任务,设置开机自启

1)配置定时任务

crontab -e  # 进入定时任务编辑模式

2)查看定时任务

crontab -l

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

3)设置cron服务开机自启

systemctl enable crond.service

4)修改后重启cron服务

systemctl restart crond

【tips】:

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)设置两台服务器免密登录

① 生成秘钥文件

在主机A上执行如下命令,并一路回车,默认生成的文件为 ~/.ssh 目录下的id_rsa和id_rsa.pub

ssh-keygen -t rsa
② 上传公钥到服务器B
scp id_rsa.pub root@192.168.1.2:~/.ssh
③ 追加公钥到认证文件

登录服务器B,找到上传的 id_rsa.pub 文件,将公钥(id_rsa.pub)追加到认证文件authorized_keys

cd ~/.ssh/
cat id_rsa.pub >> authorized_keys

2)编写自动上传备份文件shell脚本

#!/bin/bashbackup_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

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

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命令

【下集预告】

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

相关文章
|
6月前
|
Java Serverless 项目管理
云效常见问题之自建gitlab代码同步到codeup报通过token访问失败如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
151 1
|
1月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
5月前
|
运维 Java Devops
阿里云云效操作报错合集之在进行GitLab代码分支迁移时遇到报错,一般是什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5月前
|
JSON API 开发工具
gitlab如何实现批量clone仓库
在Windows环境下,通过GitLab Group ID获取项目URL的步骤概要: 1. 使用API `http://gitlab域名/api/v4/groups/你的group id` 获取JSON,提取`http_url_to_repo`。 2. 在Sublime中处理JSON,用快捷键选中并提取所有`http_url_to_repo`值。 3. 保存到h.txt,去除其他信息,仅保留URL。 4. 创建e.bat文件,内容为克隆h.txt中所有URL的批处理命令。 5. 放置h.txt和e.bat在同一文件夹,运行e.bat批量克隆仓库。URL含凭证,便于后续操作。
177 8
|
6月前
|
安全 Linux iOS开发
技术文档 | 使用 OpenSCA 批量扫描 Gitlab 仓库,盘点资产安心过节
按照下述教程快速批量扫描您的仓库,一旦新的攻击或0Day出现,通过资产清单即可快速定位漏洞及影响范围、有效缩短响应时间。
100 1
|
3月前
|
jenkins 持续交付 数据安全/隐私保护
GitLab——如何快速部署GitLab仓库
GitLab——如何快速部署GitLab仓库
39 0
|
5月前
|
持续交付 开发工具 git
阿里云云效产品使用问题之在云效代码域中gitlab使用docker安装的,迁移时遇到“获取企业信息失败”,是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用问题之代码关联能关联自建的gitlab吗
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
运维 Serverless 开发工具
函数计算产品使用问题之通过GitLab仓库来部署代码,该如何配置GitLab仓库
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
数据安全/隐私保护
解决使用SourceTree下载GitLab服务器上的代码每次都需要输入密码问题
解决使用SourceTree下载GitLab服务器上的代码每次都需要输入密码问题
132 2