安装环境:

虚拟机:Centos7 最小安装 4核8G

下载GitLab

本次实验下载的是 gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm

官网截图

gitlab-a

清华源截图

gitlab-b

安装GitLab

安装Postfix用于发送通知邮件,当然也可以使用其他SMTP服务器来发送邮件,本次实验使用Postfix。

yum install -y postfix

gitlab-d

安装GitLab

gitlab-c

在线安装

curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

gitlab-e

gitlab-f

yum install gitlab-ce-14.1.0-ce.0.el7.x86_64

gitlab-h

gitlab-g

离线安装

将安装程序下载并上传至服务器,在安装程序所在目录执行

rpm -ivh gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm --nodeps --force

与在线安装一样出现GitLab图标安装成功

配置GitLab

修改/etc/gitlab/gitlab.rb

vi /etc/gitlab/gitlab.rb

gitlab-i

external_url 指的是通过外部的哪个域名访问GitLab。可以写成本机的IP如:http://10.0.0.60

external_url 'http://10.0.0.60'

可选邮件配置

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xchensir.qq.com"
gitlab_rails['smtp_password'] = "***************"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

gitlab_rails['gitlab_email_from'] = 'xhcensir@qq.com'
user['git_user_email'] = "xchensir@qq.com"

初始化服务

执行配置并启动服务

# 修改完配置文件需执行该命令并执行重启命令
gitlab-ctl reconfigure

# 重启命令
gitlab-ctl restart

GitLab相关目录:

  • 配置文件目录:/etc/gitlab
  • 运行PID目录:/run/gitlab
  • 安装目录:/opt/gitlab
  • 数据目录:/var/opt/gitlab
  • 日志目录:/var/log/gitlab

GitLab常用命令

  • 启动控制台进行特殊操作(修改管理员密码、打开数据库控制台等’gitlab-rails dbconsole’):gitlab-rails

  • 数据库命令行:gitlab-psql

  • 数据备份恢复等操作:gitlab-rake

  • 客户端命令行操作:gitlab-ctl

    • 停止gitlab:stop
    • 启动gitlab:start
    • 重启gitlab:restart
    • 查看组件运行状态:status
    • 查看某个组件的日志:tail nginx

验证GitLab启动完成

gitlab-ctl status

gitlabj

验证端口及状态

80端口是在初始化GitLab时启动的,如果之前有程序占用会导致初始化失败或无法访问GitLab。

# 最小化安装没有lsof 需要安装
yum install -y lsof

# 查看80端口状态
lsof -i:80

gitlab-01

登录GitLab

进入到页面会让你输入用户名和密码

gitlab-002

初始管理员用户为root,密码在安装过程中已随机生成并保存在/etc/gitlab/initial_root_password中,有效期24小时

# 查看root用户密码
cat /etc/gitlab/initial_root_password

默认首页

gitlab-003

关闭注册

gitlab-004

gitlab-005

问题汇总

发送邮件通知问题

邮件发布出去大致两个原因:

  • 默认端口好被限制
  • SMTP邮箱有问题

上操作:

  • 检查配置文件SMTP配置是否有问题,参照上文中配置GitLab的配置

  • 如果SMTP配置没有问题 进入控制台查看

    gitlab-rails console

    # 输入邮箱地址后根据响应的提示排错找到具体原因:
    # 如QQ邮箱:需要授权码 密码配置填写的是授权码而不是邮箱密码
    Notify.test_email('***@******.com','email title','email content desc').deliver_now

    修改好配置文件,依次执行:

    gitlab-ctl reconfigure
    gitlab-ctl restart

登录GitLab 422

服务器时间与本地时间不一致

解决方法:大多数是服务器时间的问题,修改时间即可

重置GitLab管理员密码

切换到相应路径

cd /opt/gitlab/bin/

进入控制台

gitlab-rails console

查询root用户账号信息并赋值

u=User.find(1)

设置密码

u.password='root123456'

确认密码(非必须)

u.password_confirmation = 'root123456'

保存设置

u.save!

退出控制台

exit

重启GitLab

gitlab-ctl restart

完全卸载GitLab

停止GitLab

gitlab-ctl stop

卸载GitLab

rpm -e gitlab-ce

查看GitLab进程

ps aux | grep gitlab

kill掉第一个进程

kill掉之后 再次查看gitlab进程,确认是否被停止

删除所有包含gitlab的文件

find / -name gitlab | xargs rm -rf

Git常用命令

设置全局用户名

git config --global user.name "name"

设置全局邮箱

git config --global user.email xxx@xxx.com

列出用户全局配置

git config --global --list

添加到暂存区

git add -A

提交文件到工作区

git commit -m '工作内容'

查看工作区状态

git status

提交代码到服务器

git push

获取代码到本地

git pull

查看操作日志

git log

定义忽略文件上传至gitlab

vim .gitignore

版本回滚

# HEAD为当前版本,加上一个^为上一版本 ^^为上上一个版本
git reset --hard HEAD^^

获取每次提交的ID

# 可以使用 --hard 根据提交的ID进行版本回退
git reflog

回退到指定版本

git reset --hard 5ae4b07i0

查看当前所在分支

git branch

创建并切换到一个新分支

git checkout -b develop

切换分支

git checkout develop

GitLab数据备份与恢复

停止gitlab数据服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

手动备份数据

# 在任意目录即可备份当前gitlab数据
gitlab-rake gitlab:backup:create

# 备份完成后启动gitlab
gitlab-ctl start

查看要恢复的文件

  • 数据备份目录:/var/opt/gitlab/backups/
  • nginx配置文件:/var/opt/gitlab/nginx/conf
  • gitlab配置文件:/etc/gitlab/gitlab.rd
  • key文件:/etc/gitlab/gitlab-secrets.json

执行恢复

gitlab-ctl stop unicorn

# 数据恢复之前停止服务
gitlab-ctl stop sidekiq

gitlab-rake gitlab:backup:restore BACKUP=备份文件名

启动服务

gitlab-ctl start sidekiq
gitlab-ctl start unicorn

本地定时备份数据

准备工作:

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

修改配置文件

vim /etc/gitlab/gitlab.rd
gitlab_rails['manage_backup_path'] = true

# 备份目录
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

# 生成备份文件的权限
gitlab_rails['backup_archive_permissions'] = 0644

# 备份保留天数,秒计算
gitlab_rails['backup_keep_time'] = 604800

更新配置文件使其生效

gitlab-ctl reconfigure

添加定时任务

crontab -e

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

查看定时任务

corntab -l

设置crontab自启

systemctl enable crontab

# 修改后重启crontab服务
systemctl restart crontab

验证备份结果

ls -al /var/opt/gitlab/backups