GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。

环境说明
系统版本 CentOS 7.2 x86_64(较新版本的gitlab集成了更多功能,顺利运行起来的硬件要求较高,这里给了3G内存)
软件版本 gitlab-ce-10.8.4

1、安装

Gitlab的rpm包集成了它需要的软件,简化了安装步骤,所以直接安装rpm包即可,rpm包的获取从官方网站或者国内镜像源(如:清华)获取,gitlab又分为社区版和企业版(收费),这里部署的是社区版本10.8.4

[root@gitlab ~]# mkdir -p /service/tools
[root@gitlab ~]# cd /service/tools/
[root@gitlab tools]# yum localinstall -y gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm			#安装下载好的rpm包
或者
[root@gitlab ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm		#执行rpm -ivh 在线安装

安装完成后出现上面的提示,按照提示修改配置文件中的url地址为本地服务器的地址

[root@gitlab tools]# vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.5'
[root@gitlab tools]# gitlab-ctl reconfigure		#重新加载配置
[root@gitlab tools]# gitlab-ctl stop		#停止gitlab,进行后面的汉化
[root@gitlab tools]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 
10.8.4		#查看版本
或
[root@gitlab tools]# rpm -qa gitlab-ce
gitlab-ce-10.8.4-ce.0.el7.x86_64		#查看版本
[root@gitlab tools]# ls /opt/gitlab/				#相关目录
bin                       embedded  init     LICENSES  sv   version-manifest.json
dependency_licenses.json  etc       LICENSE  service   var  version-manifest.txt
[root@gitlab tools]# ls /var/opt/gitlab				#相关目录
alertmanager  git-data        gitlab-shell      node-exporter      public_attributes.json
backups       gitlab-ci       gitlab-workhorse  postgres-exporter  redis
bootstrapped  gitlab-monitor  logrotate         postgresql         trusted-certs-directory-hash
gitaly        gitlab-rails    nginx             Prometheus

2、汉化

默认的全英文界面对于英文水平低的来讲当然用着很不舒服,于是便需要来一波操作进行汉化,英文好的请自觉忽略
GitLab中文社区的项目,v7-v8.8是由Larry Li发起的GitLab中文社区版项目,从v8.9之后由@xhang开始继续汉化项目

[root@gitlab tools]# pwd
/service/tools
[root@gitlab tools]# mkdir /backup
[root@gitlab tools]# cp /opt/gitlab/embedded/service/gitlab-rails/* /backup	#防止汉化失败,备份原文件
[root@gitlab tools]# git clone https://gitlab.com/xhang/gitlab.git		#下载最新的汉化包

汉化包的版本更新速度不得而知,所以尽量不要安装最新版本的gitlab。如果是要下载老版本的汉化包,需要加上老版本的分支,如果想下载10.0.2,可以运行如下语句

[root@gitlab tools]# git clone https://gitlab.com/xhang/gitlab.git -b v10.0.2-zh
[root@gitlab tools]# ls		#git下来的文件为gitlab
gitlab  gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm
[root@gitlab tools]# \cp -rf gitlab/* /opt/gitlab/embedded/service/gitlab-rails/	#拷贝文件
检验汉化
[root@gitlab tools]# gitlab-ctl reconfigure			#加载配置(第一次执行此命令会启动,若只启动执行start)
启动时查看控制台输出,需要等待一段时间,无输出后启动完成,执行free -m命令查看到当前的内存使用情况为
[root@gitlab tools]# free -m
              total        used        free      shared  buff/cache   available
Mem:           2993        2123         156          62         713         597
Swap:          2047           0        2047
[root@gitlab tools]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9100          0.0.0.0:*               LISTEN      4319/node_exporter  
tcp        0      0 127.0.0.1:9229          0.0.0.0:*               LISTEN      4628/gitlab-workhor 
tcp        0      0 127.0.0.1:9168          0.0.0.0:*               LISTEN      4659/ruby           
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      4191/unicorn master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4223/nginx: master  
tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      4196/sidekiq 5.0.5  
tcp        0      0 127.0.0.1:9236          0.0.0.0:*               LISTEN      4642/gitaly         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1439/sshd           
tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      4223/nginx: master  
tcp        0      0 0.0.0.0:6783            0.0.0.0:*               LISTEN      4696/alertmanager   
tcp        0      0 127.0.0.1:9121          0.0.0.0:*               LISTEN      4425/redis_exporter 
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN      4681/prometheus     
tcp        0      0 127.0.0.1:9187          0.0.0.0:*               LISTEN      4710/postgres_expor 
tcp        0      0 127.0.0.1:9093          0.0.0.0:*               LISTEN      4696/alertmanager   
tcp6       0      0 ::1:9168                :::*                    LISTEN      4659/ruby           
tcp6       0      0 :::22                   :::*                    LISTEN      1439/sshd

浏览器访问,第一次登录需要修改密码(不小于8位),汉化成功!!!

3、登录并进行基本操作

GitLab终端常用命令

gitlab-ctl start    			#启动所有 gitlab 组件;
gitlab-ctl stop        		#停止所有 gitlab 组件;
gitlab-ctl restart        	#重启所有 gitlab 组件;
gitlab-ctl status        		#查看服务状态;
gitlab-ctl reconfigure       	#启动服务;
vim /etc/gitlab/gitlab.rb     #修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace    #检查gitlab;
gitlab-ctl tail        		#查看日志;
修改密码后进行登录,登录的用户名为root

3.1 使用前可选操作

  • 修改web端口

如果80和8080端口被占用可以修改

[root@gitlab tools]# vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
listen "127.0.0.1:8080", :tcp_nopush => true
修改nginx端口
[root@gitlab tools]# vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
server {
  listen *:80;
  • 修改Prometheus端口
[root@gitlab tools]# vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.5:port'		#根据需要修改端口

修改后需要重新加载配置并启动
登录使用

3.2、创建空白项目

选择项目路径,输入项目名称,项目描述,选择项目等级(私人的,内部的,公开的),这里测试时使用网上的开源java cms项目jeesns

创建项目成功,此时若客户端想使用该项目还需要建立与客户端的密钥文件以进行客户端对项目的操作

3.3、客户端生成密钥文件

[root@gitlab-client ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
07:f8:5c:75:83:aa:c2:a6:5c:25:d9:87:d0:4e:7a:1c root@gitlab-client
The key's randomart image is:
+--[ RSA 2048]----+
|       .    ..o  |
|      ..E  ... . |
|      .O.o..     |
|      +oBoo      |
|     . +So.      |
|      = ..       |
|   . + .         |
|    o            |
|                 |
+-----------------+
[root@gitlab-client ~]# cat .ssh/id_rsa.pub 		#查看公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDI5yMQBjSftxN9PHg3ogCwaTxPNZ3n5+TZRwJZBKO5sQGNirAzNdq8wFwbUFqtFDqYFxU3mTBh5LG3Fk1Zh8R8abpzmHijP09gdgB4Ae31axRAPcngXss//flKQCSHoQlvwI+ZWozMGItmFMcmRCla4BTq/e3mVJuIdR8VQwSG32SeRqReZIrjbvsa8hp3D5nbLa5KWRiAuOj4OhPBwHOG8hx/wSnplyI8rtMayj6BjuczDdrZNotyv0IntxFZPoUQJ/+pN1azHGm6tI1TmKyh1lmmc5Tu0a7TxTf7Ve+P/srbxlqb7CWT168fZRzziglXcR5e2Ge7tNrkXo+dl2tf root@gitlab-client

将上面的公钥文件复制到gitlab中

ssh key添加完成

点击项目,查看项目的ssh地址及http地址

按照项目下面的提示进行简单配置

在客户端操作
git全局设置

[root@gitlab-client ~]# git config --global user.name "test"			#配置使用Git仓库的人员姓名
[root@gitlab-client ~]# git config --global user.email "test@test.com"	#配置使用Git仓库的人员email
设置后提交记录才会在gitlab上显示带名字的记录
[root@gitlab-client ~]# git config --list		#检查配置信息

3.4、导入新项目文件到仓库

[root@gitlab-client ~]# cd /service/tools/jeesns/
[root@gitlab-client jeesns]# rm -rf .git		#在网站下载的jeesns有.git目录,删除该目录
[root@gitlab-client jeesns]# git init		#初始化仓库(创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干)
初始化空的 Git 版本库于 /service/tools/jeesns/.git/
[root@gitlab-client jeesns]# git remote add origin git@10.0.0.5:root/jeesns.git		#添加远程项目地址(可从项目主页复制)
[root@gitlab-client jeesns]# git add .	#将修改保存到索引区
[root@gitlab-client jeesns]# git commit -m "tijiao"	#提交所有代码到本机的版本库
[root@gitlab-client jeesns]# git push -u origin master		#将本地的更改提交到远程服务器
The authenticity of host '10.0.0.5 (10.0.0.5)' can't be established.
ECDSA key fingerprint is b7:9c:07:5c:a0:01:c3:00:50:f4:59:8e:e3:f5:f5:e2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.5' (ECDSA) to the list of known hosts.
Counting objects: 1932, done.
Compressing objects: 100% (1851/1851), done.
Writing objects: 100% (1932/1932), 37.69 MiB | 9.26 MiB/s, done.
Total 1932 (delta 283), reused 0 (delta 0)
remote: Resolving deltas: 100% (283/283), done.
To git@10.0.0.5:root/jeesns.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

此时查看项目,代码已经成功上传到gitlab

3.5、创建一个新的仓库

参照提示进行操作,首先在gitlab上创建新的版本库,接着客户端进行操作

git clone git@10.0.0.5:root/12345.git		#将远程服务器项目的内容clone下来
cd 12345								#进入该项目的文件夹
touch README.md						#新建readme文件
git add README.md					#将新的文件添加到git的暂存区
git commit -m "add README"			#将暂存区的文件提交到某一个版本保存下来,并加上注释
git push -u origin master				#将本地的更改提交到远程服务器
git 中clone过来的时候,git不会对比本地和服务器的文件,也就不会有冲突,建议确定完全覆盖本地的时候用clone,不确定会不会有冲突的时候用git pull,将远程服务器的代码download下来

3.6、已存在git版本库

cd existing_repo
git remote rename origin old-origin				#重命名
git remote add origin git@10.0.0.5:root/12345.git	#添加远程项目地址
git push -u origin –all		#上传
git push -u origin --tags		#上传tag(分支)

3.7、基本操作总结及其他交互操作

git init //初始化
git add main.cpp //将某一个文件添加到暂存区
git add .          //将文件夹下的所有的文件添加到暂存区
git commit -m ‘note’ //将暂存区中的文件保存成为某一个版本
git log             //查看所有的版本日志
git status          //查看现在暂存区的状况
git diff            //查看现在文件与上一个提交-commit版本的区别
git reset --hard HEAD^ //回到上一个版本
git reset --hard XXXXX //XXX为版本编号,回到某一个版本
git pull origin master //从主分支pull到本地
git push -u origin master //从本地push到主分支
git pull                //pull默认主分支
git push                //push默认主分支
更多git命令可参考:https://www.yiibai.com/git/git_push.html

4、gitlab邮件功能配置

4.1、配置

以163邮箱为例

[root@gitlab tools]# vim /etc/gitlab/gitlab.rb
gitlab_rails['time_zone'] = 'Asia/Shanghai' 
gitlab_rails['gitlab_email_enabled'] = true 
gitlab_rails['gitlab_email_from'] = '邮件用户名@163.com' 
gitlab_rails['gitlab_email_display_name'] = 'Gitlab CE' 
gitlab_rails['smtp_enable'] = true 
gitlab_rails['smtp_address'] = "smtp.163.com" 
gitlab_rails['smtp_port'] = 25 
gitlab_rails['smtp_user_name'] = "邮件用户名@163.com" 
gitlab_rails['smtp_password'] = "邮件帐号的授权码" 
gitlab_rails['smtp_domain'] = "163.com" 
gitlab_rails['smtp_authentication'] = "login" 
gitlab_rails['smtp_enable_starttls_auto'] = false 
user['git_user_email'] = "邮件用户名@163.com"
[root@gitlab tools]# gitlab-ctl reconfigure		#重新加载配置

qq邮箱配置

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "******@qq.com"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '******@qq.com'

4.2、邮箱测试

命令行测试:

执行 gitlab-rails console进入控制台
输入Notify.test_email('收件人邮箱', '邮件标题', '邮件正文').deliver_now

命令行测试成功,可以在邮箱中查收
为用户添加一个邮箱

点击增加,并登陆邮箱查看,点击确认即可增加邮箱

忘记密码邮箱发送邮件测试

查看邮箱信息