1、GitLab介绍

gitlab是一个开源分布式版本控制系统
开发语言:Ruby
功能:管理项目源代码、版本控制、代码复用与查找

2、GitLab与Github的不同

Github分布式在线代码托管仓库,个人版本可直接在线免费使用,企业版本收费且需要服务器安装
GitLab分布式在线代码仓库托管仓库软件,分社区免费版和企业收费版本,都需要服务器安装

3、GitLab优势与应用场景

开源免费,适合中小型公司将代码放置在该系统中
差异化的版本管理,离线同步以及强大单独分支管理功能
便捷的GUI操作界面以及强大的账户权限管理功能
集成度很高,能够集成绝大多数的开发工具
支持内置HA,保证在高并发下仍旧实现高可用性

4、GitLab主要服务过程

Nginx静态web服务器
GitLab-workhorse轻量级反向代理服务器
GitLab-shell用于处理Git命令和修改authorized keys列表
Logrotate日志文件管理工具
Postgresql数据库
Redis缓存服务器

5、GitLab工程流程

创建并克隆项目
创建项目某Featuer分支
编写代码并提交至该分支
推送该项目分支至远程GitLab服务器
进行代码检查并提交master主分支进行合并申请
项目领导审查代码并确认合并申请

6、GitLab安装部署

6.1、环境准备

6.1.1:主机名更改

[root@localhost ~]# hostnamectl set-hostname gitlab

6.1.2:防火墙配置

#放开端口
[root@gitlab ~]# firewall-cmd --permanent --add-service=http
 
#查看放开的端口
[root@gitlab ~]# firewall-cmd --zone=public --list-ports
 
#放开端口
[root@gitlab ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
 
#使其规则生效
[root@gitlab ~]# firewall-cmd --reload
 
#查看服务是否存在
[root@gitlab ~]# firewall-cmd --list-services

6.1.3:关闭SELINUX

[root@gitlab ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@gitlab ~]# setenforce 0
[root@gitlab ~]# getenforce 
Permissive

6.1.4:设置epel源、安装基本操作命令

[root@gitlab ~]# yum -y install wget
[root@gitlab ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@gitlab ~]# yum install -y net-tools vim lrzsz tree screen lsof tcpdump ntpdate

6.1.5:时间同步

[root@gitlab ~]# cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime 
[root@gitlab ~]# echo "*/5 * * * *  ntpdate time1.aliyun.com &> /dev/null && hwclock -w" >> /var/spool/cron/root
[root@gitlab ~]# systemctl  restart crond

6.2、下载软件

官方源:https://packages.gitlab.com/gitlab/gitlab-ce
清华源:https://mirrors.tuna来源(Source):www.dqzboy.com.tsinghua.edu.cn/gitlab-ce/yum/el7/
ce为社区办,ee为企业版

6.3、安装部署

[root@gitlab ~]# mkdir /soft
[root@gitlab ~]# cd /soft/
[root@gitlab soft]# rz -E
 
#先安装依赖
[root@gitlab soft]# yum install -y curl policycoreutils-python openssh-server
[root@gitlab soft]# rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm


 

6.3.1:目录说明

/opt/gitlab         #默认gitlab程序安装路径
/var/opt/gitlab/    #gitlab数据目录
/var/opt/gitlab/git-data/  #项目存储目录
/var/opt/gitlab/git-data/repositories   #代码存放路径

6.3.2:常用命令

gitlab-ctl status    #查看目前gitlab所有服务
gitlab-ctl stop        #停止gitlab服务
gitlab-ctl stop nginx    #单独停止某一个服务
gitlab-ctl tail        #查看所有服务日志

6.4、修改配置

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb

 

#重载配置,需要等待
[root@gitlab ~]# gitlab-ctl reconfigure


6.5、检查服务

#默认端口80
[root@gitlab ~]# ss -tnlp | grep 80
[root@gitlab ~]# gitlab-ctl status


6.6、GitLab汉化

6.6.1:下载汉化补丁

[root@gitlab ~]# git clone https://gitlab.com/xhang/gitlab.git
如果克隆下载很慢,那么直接gitlab下载安装包上传至服务器


6.6.2:解压备份

[root@gitlab soft]# tar -xf gitlab-12-0-stable-zh.tar.gz
 
#查看版本
[root@gitlab soft]# cat gitlab-12-0-stable-zh/VERSION 
12.0.3
 
#备份原文件,汉化失败可及时恢复
[root@gitlab ~]# mkdir /gitlab_bak
[root@gitlab ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails/* /gitlab_bak/

6.6.3:修改别名

默认cp -i
拷贝完汉化包之后去掉注释
# 注释掉
[root@gitlab ~]# vim /root/.bashrc




# 切换下用户
[root@gitlab ~]# su

6.6.4:停止服务

[root@gitlab ~]# gitlab-ctl stop

6.6.5:拷贝汉化包

# 拷贝汉化包文件
[root@gitlab ~]# cp -rf /soft/gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

6.6.6:重新配置GitLab

[root@gitlab ~]# gitlab-ctl reconfigure
 
# 需要等待一会

6.6.7:重启GitLab

[root@gitlab ~]# gitlab-ctl restart

6.7、访问页面

直接输入IP即可
首次访问时,您将被重定向到密码重置页面。提供初始管理员帐户的密码,您将被重定向回登录页面。使用默认帐户的用户名登录。root
汉化后的页面如下图





注:gitlab访问监听端口为80,如果访问gitlab一直未502错误码,先检查80端口是否被占用

7、GitLab操作使用

7.1、创建代码库组

先创建组方便后面进行管理

7.1.1:点击创建一个群组


7.1.2:定义组




7.2、在该组创建项目

或者通过如下方式建立

7.3、添加ssh公钥


7.3.1:创建密钥对

[root@dev-host1 ~]# ssh-keygen -t rsa
[root@dev-host1 ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEP4cs5ypik4xAdTgJqROTO0Qgm43wY90hXoBXAvN/LMGGB3gSvPJjMIkrx9j+lZyiFxdHqV3SV2j+3G83ve+DLPzuGVdqNgE86i7h6+ybWsAhA+5EvlSuUQFBfDtEyEyF9QUViCnn2iTT5A6VHT64Ly43KCQSdQDmCdMOVJyekH117b6jXVKinLHROVKtO58i2GtsSJb8M5xyBd9MuF5TtVNKtY1ZFaHE3qbwnfpTFch3F/7Yw7kbiy9Y9r+OGQL2BhNzdKjGtMs1pIoj97xwVoitVcBNuA5+rIqFOFrD3O9KbE8vfuznUOKkYGaVdTF/Nz/iEYJEyX4WJaAqOdJv root@dev-node1

7.3.2:添加公钥至gitlab

7.3.2.1:选择设置


7.3.2.2:选择SSH Keys


7.3.2.3:添加公钥

将上面服务器生成的密钥对中公钥添加至如下图所示的位置

7.3.3:返回项目


7.4:使用仓库

7.5、命令行说明

您还可以使用以下说明从计算机上载现有文件。

Git 全局设置

# 第一次使用Git
git config --global user.name "Administrator"      #配置用户名
git config --global user.email "admin@example.com"  #配置用户邮箱
 
# 示例:
[root@dev-host1 ~]# git config --global user.name "dqz"
[root@dev-host1 ~]# git config --global user.email "1981xxx@qq.com"

创建新存储库

git clone git@192.168.66.30:webapp/webapp.git   #克隆当前服务器上的仓库到本地
cd webapp   #进入到该仓库
touch README.md    #创建代码
git add README.md        #添加到缓冲区
git commit -m "add README"    #提交到仓库
git push -u origin master    # 推送当前分支到远端仓库
 
# 示例:
[root@gitlab ~]# git clone git@192.168.66.30:webapp/webapp.git
正克隆到 'webapp'...
The authenticity of host '192.168.66.30 (192.168.66.30)' can't be established.
ECDSA key fingerprint is SHA256:GekNYo0EMfZmAbn4DNBgmlQuHIi9lnRzDOyblNHZGv0.
ECDSA key fingerprint is MD5:93:8f:0c:56:33:af:e8:8b:91:05:8b:77:ed:bd:c2:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.66.30' (ECDSA) to the list of known hosts.
warning: 您似乎克隆了一个空版本库。
 
[root@gitlab ~]# cd webapp/
[root@gitlab webapp]# touch README.md
 
[root@gitlab webapp]# git add README.md 
 
[root@gitlab webapp]# git commit -m "add README"
[master(根提交) 0b4c1c1] add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
[root@gitlab webapp]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.66.30:webapp/webapp.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

推送现有文件夹

cd existing_folder                                                                          #进入到一个目录下
git init                                                                                            #将该目录作为新的git仓库
git remote add origin git@192.168.66.30:webapp/webapp.git    #添加远程仓库,并取一个简短的名称
git add .                                                                                          #提交工作区所有文件到暂存区
git commit -m "Initial commit"                                                      #将暂存区中的文件提交到本地仓库中,即打上新版本
git push -u origin master                                                                # 推送当前分支到远端仓库

推送现有的 Git 存储库

cd existing_repo
git remote rename origin old-origin
git remote add origin git@192.168.66.30:webapp/webapp.git
git push -u origin --all
git push -u origin --tags

8、GitLab外观配置








图表仅支持1MB大小的.png .ico文件




预览





注册限制

9、GitLab与LDAP认证

9.1:前提工作

LDAP管理员账号创建

9.2:配置GitLab

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
289 gitlab_rails['ldap_enabled'] = true
 290 
 291 ###! **remember to close this block with 'EOS' below**
 292 gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
 293    main: # 'main' is the GitLab 'provider ID' of this LDAP server
 294      label: 'LDAP'
 295      host: 'LDAP服务器IP'
 296      port: 389
 297      uid: 'sAMAccountName'
 298      bind_dn: 'LDAP账号'
 299      password: 'LDAP密码'
 300      encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
 301 #     verify_certificates: true
 302 #     smartcard_auth: false
 303      active_directory: true
 304      allow_username_or_email_login: true
 305 #     lowercase_usernames: false
 306      block_auto_created_users: false
 307      base: 'dc=LDAP_dc地址,dc=com'
 308      user_filter: ''

配置参数说明:
host:ldap服务器地址
port:ldap服务端口
uid:以哪个属性作为验证属性,可以为uid、cn等,我们使用uid
method:如果开启了tls或ssl则填写对应的tls或ssl,都没有就填写plain
bind_dn:search搜索账号信息的用户完整bind(需要一个有read权限的账号验证通过后搜索用户输入的用户名是否存在)
password:bind_dn用户的密码,bind_dn来源(Source):www.dqzboy.com和password两个参数登录ldap服务器搜索用户
active_directory:LDAP服务是否是windows的AD,我们是用的openldap,这里写false
allow_username_or_email_login:是否允许用户名或者邮箱认证,如果是则用户输入用户名或邮箱都可
base:从哪个位置搜索用户,例如允许登录gitlab的用户都在ou gitlab里,name这里可以写ou=gitlab,dc=domain,dc=com
filter:添加过滤属性,例如只过滤employeeType为developer的用户进行认证(employeeType=developer)

9.3:重载GitLab配置

[root@gitlab ~]# gitlab-ctl reconfigure

9.4:获取用户列表

[root@gitlab ~]# gitlab-rake gitlab:ldap:check

9.5:重启GitLab

[root@gitlab ~]# gitlab-ctl restart

9.6:访问GitLab