一、GitLab程序的介绍
GitLab是一个基于Web的开源平台,用于版本控制和协作管理。它提供了一套丰富的功能,包括代码仓库托管、问题跟踪、持续集成/持续交付(CI/CD)、团队协作以及各种项目管理工具。
以下是一些GitLab的关键特点和功能:
- 代码仓库托管:GitLab提供了一个方便的界面来管理Git代码仓库,使您可以轻松创建、克隆、推送和拉取代码。
- 问题跟踪:您可以在GitLab中创建、分配和跟踪问题、缺陷和需求。问题跟踪功能有助于团队有效地管理项目中的任务和工作流程。
- CI/CD:GitLab具有内置的持续集成/持续交付(CI/CD)功能,允许您自动构建、测试和部署应用程序。您可以配置自动化的流水线来加快软件交付速度并确保质量。
- 团队协作:GitLab支持团队协作功能,包括讨论区、合并请求和代码审查。团队成员可以共享想法、评论和评审代码,促进协作和知识共享。
- 权限和安全性:GitLab提供了丰富的权限和安全功能,使您可以细粒度地控制对代码库、问题跟踪和其他资源的访问权限。它还支持用户身份验证、单点登录(SSO)和集成LDAP等。
- 项目管理工具:除了代码
文章来源(Source):浅时光博客 托管和问题跟踪,GitLab还提供了一些项目管理工具,如看板、里程碑、时钟和文档。这些工具帮助团队更好地组织、计划和追踪项目进度。 - 可扩展性:GitLab是一个开源平台,提供了广泛的API和插件生态系统,允许您根据需要进行自定义和扩展。
GitLab是一个功能强大的协作开发平台,为团队提供了一个集中化的地方来管理代码、问题和项目。无论是小型团队还是大型组织,GitLab都提供了丰富的工具和功能来促进协作、持续交付和软件开发流程的改进。
二、GitLab与Github的不同
GitLab和GitHub都是广受欢迎的版本控制平台,但它们在一些方面有所不同。以下是GitLab和GitHub之间的主要区别:
- 部署位置:GitLab可以在您自己的服务器上或云中进行自托管,而GitHub是基于云的,由GitHub提供托管服务。
- 许可证:GitLab是开源软件,以MIT许可证发布,这意味着您可以自由地使用、修改和分发它。GitHub则是一个商业产品,需要付费来获得更高级的功能和服务。
- 功能范围:GitLab提供了更全面的功能集,包括代码仓库托管、持续集成/持续交付(CI/CD)、问题跟踪、团队协作和项目管理工具等。GitHub则更专注于代码托管和协作,尤其在开源社区中非常受欢迎。
- 费用:GitLab在其自托管版本中提供了免费的核心功能,并提供付费计划以获取更高级的功能和支持服务。GitHub则提供免费的公共存储库,但对于私有存储库以及高级功能和支持,需要选择适当的付费计划。
- 集成与插件:GitLab提供了丰富的API和插件系统,使用户可以扩展和集成其他工具与服务。GitHub也提供了API和插件支持,但相对GitLab而言功能更为有限。
- 企业版:GitLab提供了企业版,适用于大型组织或需要额外功能和安全性的团队。GitHub则在高级版本中提供了类似的功能,如GitHub Enterprise。
三、GitLab优势与应用场景
GitLab在许多方面都具有优势,并适用于各种应用场景。以下是GitLab的几个主要优势和适用场景:
- 集成的全面功能:GitLab提供了一套全面的功能,包括代码仓库托管、CI/CD、问题跟踪、团队协作和项目管理等。这使得团队可以在一个平台上进行开发、测试、部署和协作,而无需依赖多个独立工具。
- 自托管的灵活性:GitLab允许您在自己的服务器上或云中进行自托管。这为组织提供了更大的灵活性和控制权,可以根据特定需求进行配置和定制。
- 持续集成/持续交付(CI/CD):GitLab内置了强大的CI/CD功能,使团队能够自动化构建、测试和部署软件。这有助于加快交付速度、提高质量并减少手动操作。
- 团队协作和审查:GitLab提供了评论、问题跟踪、合并请求等功能,支持团队之间的协作和代码审查。这促进了知识共享、迭代改进和高效的团队合作。
- 可扩展性和集成性:GitLab具有丰富的API和插件系统,使您可以扩展和集成其他工具和服务。它与许多流行的开发工具和服务(如Jenkins、Slack、JIRA等)具有良好的集成能力。
- 安全性和权限控制:GitLab提供了强大的安全功能,包括用户身份验证、访问控制列表(ACL)、单点登录(SSO)和LDAP集成等。这有助于保护您的代码和数据,并确保只有授权人员能够访问特定资源。
适用场景:
- 开发团队:GitLab适用于任何规模的开发团队,提供一个集中化的平台来管理代码、问题和项目。
- CI/CD自动化:GitLab的内置CI/CD功能使其成为构建、测试和部署软件的理想选择。
- 自托管需求:如果您需要在自己的服务器上进行托管和定制化控制,则GitLab是一个优秀的选择。
- 敏捷开发:GitLab的协作工具和敏捷项目管理功能有助于团队实现快速迭代和持续交付。
无论是小型团队还是大型组织,无论是敏捷开发还是传统开发,GitLab都提供了一套功能强大的工具和平台来支持团队的软件开发和协作需求。
四、GitLab主要服务
- Nginx: Nginx充当GitLab的Web服务器,处理HTTP请求并将其转发到适当的后端。
- GitLab-Workhorse: GitLab-Workhorse是一个反向代理服务器,用于加速对GitLab的访问和提供各种功能,如静态文件缓存和大型文件支持。
- GitLab-Shell: GitLab-Shell是一个与GitLab进行通信的轻量级Shell。它处理Git操作并通过SSH或HTTP协议向GitLab发送请求。
- Logrotate: Logrotate是一个日志文件管理工具,用于对GitLab生成的日志文件进行定期轮转和压缩,以节省磁盘空间。
- PostgreSQL: 默认情况下,GitLab使用PostgreSQL作为其数据库,用于存储项目、用户和其他相关数据。
- Redis: Redis是一个内存数据存储系统,GitLab使用它来缓存数据、会话信息和临时数据。
除了这些组件之外,还有其他一些辅助服务和工具,如SMTP(邮件服务器)用于发送电子邮件通知,Elasticsearch(日志记录和搜索引擎)用于日志记录和搜索,以及Prometheus(监控工具)用于监控GitLab的性能和活动。
注意,
五、GitLab工程流程
- 创建并克隆项目:在GitLab中创建一个新项目,并将其克隆到本地开发环境中。
- 创建Feature分支:基于主分支(如Master)创建一个专门用于开发某项功能的Feature分支。
- 编写代码并提交:在Feature分支上进行代码编写、修改和调试,并定期进行代码提交,保持版本控制的完整性。
- 推送到远程服务器:将Feature分支推送到GitLab远程服务器,使其他团队成员可以查看和访问您进行的更改。
- 进行代码检查并提交合并申请:使用GitLab的合并请求(Merge Requests)功能,发起将Feature分支合并到主分支的申请。此过程会自动生成比较差异和变更的清单,并提供给其他团队成员进行审查。
- 项目领导审查代码并确认合并申请:项目领导或相关团队成员对合并申请进行审查,在代码质量和功能实现方面进行确认。一旦审查通过,将应用程序的更改合并到主分支。
以上是GitLab工程流程的一般概述,具体的细节和流程可能因团队和项目而有所不同。这个流程强调了协作、版本控制、代码审查和合并的重要性,以确保项目的高质量和可维护性
六、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、下载软件
- 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 https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/9/gitlab-ce-16.0.6-ce.0.`uname -r | grep -oP 'el\d+'`.x86_64.rpm/download.rpm

目录说明
/opt/gitlab #默认gitlab程序安装路径
/var/opt/gitlab/ #gitlab数据目录
/var/opt/gitlab/git-data/ #项目存储目录
/var/opt/gitlab/git-data/repositories #代码存放路径
常用命令
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汉化
说明:最新版本的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端口是否被占用
七、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.3:返回项目
7.4:命令行说明
- 您还可以使用以下说明从计算机上载现有文件。
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
八、GitLab外观配置
- 图表仅支持1MB大小的
.png.ico文件
- 预览
- 注册限制

九、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和password两个参数登录ldap服务器搜索用户
active_directory:LDAP服务是否是windows的AD,如果是AD这里配置为true,如果是其他的如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




















一般搭建git需要什么样的配置呢?
看你的使用的人数和项目规模,小团队,2C4G的差不多