Gitlab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个Git 项目仓库,可通过Web 界面进行访问公开的或者私人的项目 Gitlab 拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,他非常易于浏览提交过的版本并提供一个文件历史库。他还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

关于gitlab的详细信息建议参考gitlab官网进行详细的了解!

博文大纲: 一、准备环境 二、安装Gitlab 三、汉化Gitlab 四、gitlab用户组、用户、项目 五、关闭用户注册功能 六、gitlab基本操作 七、远端库的基本操作 八、重置gitlab管理员密码 九、gitlab的备份与恢复

一、准备环境

操作系统 内存 CPU
centos 7 4G以上 双核

二、安装Gitlab

1)安装Gitlab所需依赖

[root@gitlab ~]# yum -y install  epel-release curl openssh-server openssh-clients postfix cronie policycoreutils-python wget vim

2)获取Gitlab的RPM软件包

**方法一:**通过清华大学的开源镜像站获取软件包(推荐)

[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm

**方法二:**通过Gitlab官网来获取软件包(网络稳定时使用)

[root@gitlab ~]# wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm/download.rpm

3)安装Gitlab

[root@gitlab ~]# rpm -ivh gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm 
#安装时间较长,耐心等待,安装过程中会出现gitlab的logo
[root@gitlab ~]# yum -y localinstall gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm
#效果较好,自动解决依赖关系

4) 修改gitlab的url并执行reconfigure

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb         #修改gitlab的配置文件
………………………………                 #省略部分内容
external_url 'http://192.168.1.8'
#将此处改为本机的IP地址,便于访问

#######以下为邮箱配置,实验环境不进行配置也可#############
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '1454295320@qq.com'         #发件人邮箱
gitlab_rails['gitlab_email_display_name'] = 'GitLab'              #发件人显示名称

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "1454295320@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

###############如需关闭Prometheus,配置如下###################

prometheus['enable'] = false

[root@gitlab ~]# gitlab-ctl reconfigure        #第一次时间较长
#重新配置gitlab,就算不修改配置文件,也需要在安装后重新配置gitlab
#接下来对这个文件进行操作,也需执行该条命令
[root@gitlab ~]# gitlab-ctl  start | status | restart | stop

5)web页面访问测试

如图: 可以访问到表示没有问题,但是都是英文界面,对于英文不好的我表示很是头疼,还好可以通过一些方法使其汉化,方法如下!

三、汉化Gitlab

1)获取gitlab汉化补丁包(如果不需要汉化,则跳过此步骤即可)

[root@gitlab ~]# head -1 /opt/gitlab/version-manifest.txt           #查看gitlab的版本
gitlab-ce 12.3.5
[root@gitlab ~]# git clone https://gitlab.com/xhang/gitlab.git -b v12.3.5-zh
#获取汉化补丁包(注意需与gitlab的版本保持一致)
[root@gitlab ~]# cd gitlab/               #进入刚才clone下来的gitlab目录
[root@gitlab gitlab]# git diff v12.3.5 v12.3.5-zh > /root/v12.3.5-zh.diff
#用diff将英文原版与中文版的对比生成.diff文件

2)将中文补丁导入gitlab

[root@gitlab gitlab]# gitlab-ctl stop              #停止gitlab
[root@gitlab gitlab]# yum -y install patch
[root@gitlab gitlab]# patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 <  ../v12.3.5-zh.diff
 #将刚才的diff文件做为补丁导入到gitlab中
#该命令执行过程中,一路回车跳过即可
[root@gitlab gitlab]# gitlab-ctl start                 #启动gitlab
[root@gitlab gitlab]# gitlab-ctl reconfigure      #重新配置gitlab

3)web页面再次访问

如图: 登录之后发现,只有局部汉化了,还需进行以下操作: 再次刷新页面即可!

四、gitlab用户组、用户、项目

1)创建用户组

如图:

2)创建项目并关联用户组

如图:

3)创建用户并进行邮箱验证

如图: 收到的邮件如下: 更改密码完成后收到的邮件如下: 以新创建的用户张三登录,如下:

4)将用户加入刚才的devops组中

如图: 收到的邮件,如图: 再次以张三的身份进行访问,如图:

从上可以看出: 1)对用户进行何种操作,都会发邮件进行通知; 2)项目是基于用户组创建的,所以用户组中的成员对项目也有相应的权限; 3)gitlab对用户权限方面的功能非常强大;

实验环境,接下来还是选择以管理员的身份进行接下来的操作!

五、关闭用户注册功能

看一下不关闭注册功能,会有什么影响?如图: 可以看到只要可以访问gitlab的用户都可以自行进行注册、登录,因为gitlab一般都是公司内部的人进行访问的,所以非常危险!

需要以管理员身份进行以下操作,关闭gitlab的注册功能!如图: 注册功能已经消失!

六、gitlab基本操作

1)配置SSH方式免密登录

[root@gitlab ~]# ssh-keygen -t rsa -C "1454295320@qq.com"
#生成秘钥对,一路回车即可,“-C”后是自己的邮箱
[root@gitlab ~]# cat ~/.ssh/id_rsa.pub         #查看生成的公钥并复制 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvNm+nXc59ugb0SGr9iMHDSFjvmdSJk0ORuX3hbjt822Y2ofXysUrIuBSQ1Jn0Rss/LPU54K32i4bIDsa/jD9gIpN/GqU+YP1MQ9bEw3YVUONAs+nYeWJWahQ1rMTeM0HC9aKvNTrNsOqrXIboJymBrs6Odt+1NnZsYHMwA/KlpYCFsi0HQgBzsLbrD5v++cIDTvM/V4rMq6fqFsfWoYYMHWc8JeNMl/aWJV1RhJpt7wm17FEv3XiH+wyoef5ZYI60IkH5qMJkjWhKcRXCWG5SH3nphUb1fmktB4DH92TW/EGw///VQEnE7tkpNjyJpOTXDuHnEk2tw43cctDN2sJH 1454295320@qq.com

回到web页面,操作如下:

2)创建一个基本库

如图: 回到服务器上输入测试的命令,如下:

[root@gitlab ~]# git config --global user.name "Administrator"
[root@gitlab ~]# git config --global user.email "admin@example.com"
[root@gitlab ~]# git clone git@192.168.1.8:root/test01.git         
#克隆到本地,根据提示输入“yes”即可!
[root@gitlab ~]# cd test01/
[root@gitlab test01]# touch README.md
[root@gitlab test01]# git add README.md
[root@gitlab test01]# git commit -m "add README"
[root@gitlab test01]# git push -u origin master

刷新web页面即可,如图:

七、远端库的基本操作

当你从远端仓库克隆时,实际上git自动把本地的master分支和远端的master分支对应起来了,并且远程仓库的默认名称是origin。

1)查看关联的远程库的信息

[root@gitlab test01]# git remote        #简洁信息
origin
[root@gitlab test01]# git remote -v         #详细信息
origin	git@192.168.1.8:root/test01.git (fetch)
origin	git@192.168.1.8:root/test01.git (push)

2)推送分支到远程仓库

[root@gitlab test01]# git checkout -b dev             #创建并切换到dev分支
[root@gitlab test01]# git push origin dev              #将本地的分支推送到远程仓库

刷新页面之后,如图:

3)解决多人协作产生的问题

当我们整个小组对同一个分支进行开发时,如果在你提交之前,你的同事已经修改了分支的内容并推送到远端仓库,而碰巧你也对同样的文件做了修改,并试图推送,那么会推送失败,因为你的同事的最新提交的数据和你试图提交的数据有冲突(你本地的内容比远端仓库的旧了),解决的办法会在提示你推送失败的返回信息中给出,这里我们模拟一下这一过程。

#进入另一个目录,克隆远端仓库,模拟多人操作
[root@gitlab test01]# cd /tmp           
[root@gitlab tmp]# git clone git@192.168.1.8:root/test01.git
[root@gitlab tmp]# cd test01/
[root@gitlab test01]# git checkout -b etc            #重新创建一个分支并切换
[root@gitlab test01]# echo -e "touch /tmp/test01" > tmp.txt
[root@gitlab test01]# git add tmp.txt
[root@gitlab test01]# git commit -m "commmit from /tmp"
[root@gitlab test01]# git push origin etc                #将新修改的内容推送到远端

回到web界面进行刷新,即可看到新提交的分支:

#上述操作是在/tmp目录下执行的,接下来的操作在/root目录下执行:
[root@gitlab test01]# cd /root/test01/
[root@gitlab test01]# git checkout -b etc
[root@gitlab test01]# echo "touch /root/test01.txt" > root.txt
[root@gitlab test01]# git add root.txt
[root@gitlab test01]# git commit -m "commit from /root"
[root@gitlab test01]# git push origin  etc            
#再次推送,将会出现以下错误
To git@192.168.1.8:root/test01.git
 ! [rejected]        etc -> etc (fetch first)
error: 无法推送一些引用到 'git@192.168.1.8:root/test01.git'
提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外
提示:一个版本库已推送了相同的引用。再次推送前,您可能需要先合并远程变更
提示:(如 'git pull')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
[root@gitlab test01]# git pull origin etc              #将远端的etc分支pull到本地
[root@gitlab test01]# ls               #可以看出在/tmp目录下提交的文件就存在了
README.md  root.txt  tmp.txt
[root@gitlab test01]# git push origin etc                  #然后再次将本地的dev分支推送到gitlab,即可成功

再次刷新web页面,etc分支下就会有了我们在/tmp目录和/root目录下提交的所有内容,如图:

4)合并远程分支

[root@gitlab test01]# git checkout master           #切换至master分支
[root@gitlab test01]# git merge etc                    #合并etc分支
[root@gitlab test01]# ls                   #查看合并后的分支下内容
README.md  root.txt  tmp.txt
[root@gitlab test01]# git add .
[root@gitlab test01]# git commit -m "提交"
[root@gitlab test01]# git push origin master             #推送到远端版本库

再次刷新web页面,如图:

5)删除远程的分支

[root@gitlab test01]# git branch -d etc                 #删除本地的dev分支
[root@gitlab test01]# git branch -r -d origin/etc     #删除指定的远程分支
[root@gitlab test01]# git push origin :etc               #将删除的分支提交到远程版本库中
[root@gitlab test01]# git branch -d dev
[root@gitlab test01]# git branch -r -d origin/dev
[root@gitlab test01]# git push origin :dev                      #同上

再次刷新web页面,如下:

八、重置gitlab管理员密码

[root@gitlab ~]# gitlab-rails console production             #必须是root用户登录服务器执行该命令
irb(main):001:0> user = User.where(id: 1).first             #id为1的是超级管理员
irb(main):002:0> user.password = 'yourpassword'       #密码必须至少8个字符
irb(main):003:0> user.save!                  #保存用户修改信息,如没有问题返回true
irb(main):004:0> exit                             #退出

至此,再次登录,就需要使用新密码yourpassword进行登录了。

九、gitlab的备份与恢复

1)更改配置文件,实现备份

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb             #更爱gitlab配置文件
gitlab_rails['backup_path'] = "/data/gitlab/backups"          #更改备份路径
gitlab_rails['backup_keep_time'] = 604800              #备份保留的时间
[root@gitlab ~]# mkdir -p /data/gitlab/backups
[root@gitlab ~]# gitlab-ctl reconfigure

2)手动备份、自动备份

[root@gitlab ~]# gitlab-rake gitlab:backup:create       #手动进行备份
[root@gitlab ~]# crontab -e              #创建计划任务的方式实现自动备份
00 20 * * *  /usr/bin/gitlab-rake gitlab:backup:create

3)恢复数据

[root@gitlab ~]# gitlab-ctl stop unicorn
[root@gitlab ~]# gitlab-ctl stop sidekiq          #停止数据写入服务
[root@gitlab ~]# ls /data/gitlab/backups/
1581862634_2020_02_16_12.3.5_gitlab_backup.tar
[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1581862634_2020_02_16_12.3.5
[root@gitlab ~]# gitlab-ctl restart
[root@gitlab ~]# gitlab-ctl tail
#查看gitlab的日志信息

————————本文到此结束,感谢阅读——————————————