如何使用Gitlab搭建属于自己的代码管理平台

大家好,我是Mandy。今天分享的主题内容是如何使用GitLab搭建属于自己的代码管理平台。

为什么会单独分享这篇文章呢,相信在很多的开发同学任职的公司中,都用到了gitlab来做代码管理平台,同时结合GitLab的一些自动化功能,实现devops的功能。

GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用Ruby语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。

GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。同时官方也提供了免费版本,可以支持独立安装,也可以支持直接使用官方搭建的web服务。

gitlab_1043_screenshot_1537358584_h9tgk

与GitLab同类的产品也很多,例如国外微软旗下的GitHub,国内的Gitee都属于同类的代码管理平台,同时这些平台也结合了一些企业开发相关的功能。例如项目任务管理、项目自动化构建发布等等功能。

使用GitHub的同学应该知道,GitHub属于国外的网站在访问上经常遇到无法访问或者访问较慢的情况,并且个人是没法直接创建私有仓库,你只能通过创建公开仓库,对于有私有仓库的需求就需要付费使用并且费用还不算低。

what-is-github

对于Gitee来说,属于国内的网站避免了访问的问题,但Gitee是开发部分免费功能,其他的功能是需要收费使用。

ccdd18beea044a3e9e6a01594dcc50bc

基于上述的一些原因,企业也选择GitLab来搭建代码管理平台,同时里面的一些自动化功能也是完全不亚于GitHub、Gitee。对于个人开发者使用GitLab,不仅能够管理自己的代码,同时也能学到GitLab与其他的系统实现一些自动化功能,这将是一个不错的选择。

如何搭建

接下来,我将全面的演示如何在Linux上搭建GitLab。整体来说是非常的简单,整篇文章都是采用Docker来搭建,毕竟现在Docker的使用不管是个人还是企业都是非常主流的技术栈。

这里要特别的说明一下,强烈建议你选择一个高配置的服务器来搭建GitLab,在我个人的测试过程中发现GitLab是非常消耗内存,基本搭建好GitLab就会占用4G的内存,如果你只是在本地搭建用作学习,应该是完全没问题的,毕竟个人的电脑应该没有低于4G内存大小的计算机。

检索官方镜像并拉取到本地

通过docker search xxx可以查找Docker官方镜像中,关于GitLab的镜像,你会看到如下很多的镜像。有的是一些插件,有的是基于官方镜像构建的镜像。这里还是强烈推荐直接使用官方提供的GitLab镜像。

# 查找gitlab镜像
docker search gitlab
[root@VM-4-9-centos ~]# docker search gitlab
NAME                                     DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
bitnami/gitlab-runner                                                                     35
bitnami/gitlab-runner-helper                                                              3
alpinelinux/gitlab-runner-helper         Helper image container gitlab-runner-helper …   4
rapidfort/gitlab-ce                                                                       12
okteto/gitlab                                                                             2
alpinelinux/gitlab-runner                Alpine Linux gitlab-runner (supports more ar…   5
drud/gitlab-ce                                                                            18
accurics/gitlab-connector                                                                 0
domjudge/gitlabci                                                                         0
wodby/gitlab                             Alpine-based GitLab CE container image           0
ustclug/gitlab                           Dockrized GitLab used by LUG@USTC                0
alpinelinux/gitlab                       Alpine Linux based Gitlab image                  8
itisfoundation/gitlab-runner-docker                                                       0
pnnlmiscscripts/gitlab-runner-operator                                                    0
jitesoft/gitlab-ci-runner                  Image inheriting from the gitlab runner. I…   0
vulhub/gitlab                                                                             0
alpinelinux/gitlab-shell                 Alpine Linux based gitlab-shell image, provi…   1
wodby/gitlab-nginx                       Nginx for GitLab CE container image              0
corpusops/gitlabtools                    https://github.com/corpusops/docker-gitlabto…   0
vulhub/gitlab-cve-2016-9086              gitlab cve-2016-9086                             0                    [OK]
drud/gitlab-backups                                                                       0
gromacs/gitlab-runner                                                                     0
wodby/gitlab-runner                                                                       0
avenga/gitlab-job                                                                         0
osuosl/gitlab-runner-helper                                                               0

接下来拉取官方镜像到本地,直接拉取最新的镜像。

docker pull gitlab/gitlab-ce:latest

拉取好镜像之后,可以查看本地是否拉取到镜像。这里使用docker images查看本地的镜像有哪些,下面就可以看到gitlab/gitlab-ce的镜像地址,表示我们已经成功拉取到本地。

[root@VM-4-9-centos ~]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
gitlab/gitlab-ce        latest    df5003a3217c   2 days ago      2.86GB
zmister/mrdoc           v6        f4973a0fcd4b   3 months ago    1.34GB
postgres                15.2      bf700010ce28   6 months ago    379MB
openspug/spug-service   latest    db1e45c81bec   7 months ago    593MB
surveyking/surveyking   latest    7445aa54d4c4   12 months ago   157MB
mariadb                 10.8.2    51adad759c74   21 months ago   414MB

启动镜像容器

拉取到镜像之后,就可以基于镜像在本地启动一个GitLab容器。这里要说明一点,你再创建容器时,一定要做磁盘挂载和端口映射。不过磁盘挂载很可能容器删除导致数据丢失,端口映射是为了通过宿主机的访问达到访问容器内部的GitLab服务,否则是没法直接访问容器内的服务。

# 启动容器
docker run \
 -itd  \
 -p 9981:80 \
 -p 9922:22 \
 -v /opt/gitlab/etc:/etc/gitlab  \
 -v /opt/gitlab/log:/var/log/gitlab \
 -v /opt/gitlab/opt:/var/opt/gitlab \
 --restart always \
 --privileged=true \
 --name gitlab \
 gitlab/gitlab-ce

上述命令主要的作用是:

1、 run:启动容器命令,这是Docker自带的命令,创建容器时必须使用该命令才能创建容器。

2、-itd:-i参数是以交互模式运行容器,通常与 -t 同时使用命令解释;-t参数是为容器重新分配一个伪输入终端,通常与 -i 同时使用;-d参数是后台运行容器,并返回容器id。

3、-p:是做端口映射,第一个-p是为了将容器内的web端口映射宿主机的端口,这样就能通过宿主机的端口直接访问到容器内的端口,也就是说后面通过浏览器访问GitLab就需要该端口;第二个-p是为了将容器内22端口映射至宿主机9922端口,这是访问ssh的端口,例如后面使用命令git push代码到GitLab会用到该协议。

4、-v:该参数为了将宿主机的目录和容器内的目录做一个映射,容器内的文件和宿主机实现同步,防止数据丢失,哪怕是后续你容器被删掉,宿主机的文件保持存在,数据就不会丢失。

5、–restart:保持容器自动启动。比如你关闭了Docker服务,容器也会随着退出,再次启动Docker服务时,容器会自动启动,不需要你手动去启动容器。

6、–privileged:该参数是为了让容器内获取到宿主机的root权限。

7、–name:该参数是为了给容器取一个名称,记住这个名称要不能重复。例如你本地有一个名字叫做A的容器,就不能取同样名称的容器。

8、gitlab/gitlab-ce:该参数是表示容器从哪一个镜像中创建,前面我们拉取了官方镜像到本地仓库,因此会自动从本地的镜像中去创建。如果你没拉取镜像到本地,此时会自动去Docker官方镜像仓库中拉取到本地。

此时,我们的GitLab容器已经创建完毕,但要访问容器,还需要你修改一些其他的配置。这里推荐直接在容器中去修改配置,如果直接在宿主机修改,可能出现同步到容器中存在延迟,导致访问出现问题。

修改配置

在修改配置之前,你需要明确如下几点:

1、访问方式:如果你是想通过域名的方式访问,你需要解析一个域名,如果不需要直接使用配置成宿主机的IP地址。我这里假设域名是a.baidu.com。

2、ssh方式:ssh适用于代码同步,这里也需要配置成域名或者IP的方式。

#第一步是进入到容器内部,gitlab可以写成你容器的id
docker exec -it gitlab /bin/bash
 
#修改gitlab.rb的配置文件
vi /etc/gitlab/gitlab.rb
 
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.1.194'
或者是
external_url 'a.baidu.com'

#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.1.194'

#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922

修改好之后,在容器中重启gitlab-ctl reconfigure配置,并且使用gitlab-ctl restart来重启GitLab服务。此时就可以直接使用IP的方式访问GitLab,如果你配置的是域名,还需要在Linux系统中使用域名配置,做端口代理访问到GitLab服务。假设你用的是NGINX做web服务,你需要做如下的配置。

server{
	listen 80;
	server_name a.baidu.com;
	location / {
		proxy_pass http://127.0.0.1:9981;
	}
}

配置好域名之后,重启NGINX服务nginx -s reload就可以通过域名的方式访问。

Snipaste_2023-11-18_10-51-32

注意事项

在网上有的文章会提到如下的配置操作:

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

gitlab:
  host: 192.168.1.194
  port: 9980
  https: false

但实际测试下来,并非一定要做这一步操作。在你上面修改好配置之后,执行``gitlab-ctl reconfigure命令重启后,上面的gitlab.yml`文件会自动帮你同步配置。

账号修改

当你能访问搭建好的GitLab服务,并且能够访问,但一开始会让你进行登录注册,GitLab默认的超级管理员账号是root,此时是需要你修改默认的密码。

# 进入容器内部
docker exec -it gitlab /bin/bash
 
# 进入控制台
gitlab-rails console -e production
 
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(id:1).first
# 修改密码为gitlab001
user.password='gitlab001'
# 保存
user.save!
# 退出
exit

此时你使用root账号,并且密码是gitlab001就可以正常访问了。

自此GitL按服务就算搭建完成,你就可以直接使用了。更多的功能,你也可以直接进行摸索使用。

相关链接

一、GitHub拥有28kstar,Go开源的多文件存储神器

二、强烈推荐使用的Markdown编辑器工具

三、又遇到一款神仙级别的PDD绘图工具

四、使用Go开源的一款性能监控软件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/160771.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧能源太阳能光伏数据采集终端钡铼技术4G无线RTU

智慧能源太阳能光伏系统在当今的能源行业中扮演着越来越重要的角色,而钡铼技术有限公司的4G无线RTU(远程终端单元)作为数据采集终端,为智慧能源太阳能光伏系统的监测和管理提供了全新的解决方案。 首先,钡铼技术的4G无…

Linux基本指令(一)

前言:我们今天换个口味,我们来学习Linux,我们平时电脑上都只使用windows系统,但是作为后来者,Linux有着windows所没有的优点,那么我们今天就来学习Linux的一些基本指令。我会通过Xshell和阿里云云服务器进行…

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(5)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…

NC65 如何设置现金流量明细查询的查询框中核算账簿可多选??

NC65 如何设置现金流量明细查询的查询框中核算账簿可多选?? NC65 如何设置现金流量明细查询的查询框中核算账簿可多选??效果如下图 解决方案二开,即在 nc.ui.gl.cashflowcase.CashFlowDetailQueryUI 的 onButtonQuer…

周年纪念篇

一周年纪念! 凌晨逛手机版csdn时才突然发现已经错过一周年了,但我当闰年来纪念一下不过分吧hhh 浅浅的整些怀念的东西吧! 这是人生第一段代码:不是hello world写不起,而是纯爱单推人更有性价比。 有这段代码在&#x…

【汇编】Loop指令、段前缀

文章目录 前言一、Loop指令1.1 Loop指令是什么?1.2 他的条件是什么?1.3 例子示例1示例2 1.4 要点总结 二、段前缀2.1 为什么要引入他2.2 对策 总结 前言 在计算机编程的世界里,了解底层的硬件操作是提升程序员能力的关键一步。汇编语言作为一…

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

文章目录 最终效果前言简单绘制一下环境显示当前波数生成不同的敌人控制游戏运行速度游戏结束最终效果扩展源码完结最终效果 前言 本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。 简单绘制一下环境 环境可以按自己喜好,去找一些瓦片,想怎么配置怎…

基于热交换算法优化概率神经网络PNN的分类预测 - 附代码

基于热交换算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于热交换算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于热交换优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

电脑技巧:低配置的旧电脑也可以使用Win11系统了

目录 一、优点和适用场景 二、下载以及版本说明 三、安装说明 四、Tiny11 设置安装简体中文语言方法 Windows 11,作为微软最新一代操作系统,固然有其强大的功能和卓越的性能,但有时,更轻、更小、更快速的需求也在用户的考虑范…

LLM大模型权重量化实战

大型语言模型 (LLM) 以其广泛的计算要求而闻名。 通常,模型的大小是通过将参数数量(大小)乘以这些值的精度(数据类型)来计算的。 然而,为了节省内存,可以通过称为量化的过程使用较低精度的数据类…

某app c++层3处魔改md5详解

hello everybody,本期是安卓逆向so层魔改md5教学,干货满满,可以细细品味,重点介绍的是so层魔改md5的处理. 常见的魔改md5有: 1:明文加密前处理 2:改初始化魔数 3:改k表中的值 4:改循环左移的次数 本期遇到的是124.且循环左移的次数是动态的,需要前面的加密结果处理生成 目录…

[C/C++]数据结构 链表(单向链表,双向链表)

前言: 上一文中我们介绍了顺序表的特点及实现,但是顺序表由于每次扩容都是呈二倍增长(扩容大小是自己定义的),可能会造成空间的大量浪费,但是链表却可以解决这个问题. 概念及结构: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接…

halcon识别验证码,先训练后识别

识别验证码图片,使用halcon 21.05 下面代码识别准确率100% 目录 训练,图片打标签使用代码创建分类器;识别验证码,检验识别效果使用“助手”加载训练文件,加载训练分类器,察看收集的字符,训练识别…

Theory behind GAN

假如要生成一些人脸图,实际上就是想要找到一个分布,从这个分布内sample出来的图片像是人脸,分布之外生成的就不像人脸。而GAN要做的就是找到这个distribution。 在GAN之前用的是Maximum Likelihood Estimation。 Maximum Likelihood Estimat…

【C++】类和对象(5)--运算符重载

目录 一 概念 二 运算符重载的实现 三 关于时间的所有运算符重载 四 默认赋值运算符 五 const取地址操作符重载 一 概念 C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数…

Android 13.0 Launcher3仿ios长按app图标实现抖动动画开始拖拽停止动画

1.概述 在13.0的系统rom定制化开发中,在对系统原生Launcher3的定制需求中,也有好多功能定制的,在ios等电子产品中 的一些好用的功能,也是可以被拿来借用的,所以在最近的产品开发需求中,需求要求模仿ios的 功能实现长按app图标实现抖动动画,接下来看如何分析该功能的实现…

基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码

基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于静电放电优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

【数据结构与算法】JavaScript实现双向链表

文章目录 一、双向链表简介二、封装双向链表类2.0.创建双向链表类2.1.append(element)2.2.toString()汇总2.3.insert(position,element)2.4.get(position)2.5.indexOf(element)2.7.update(position,element)2.8.removeAt(position)2.9.其他方法2.10.完整实现 三、链表结构总结3…

苍穹外卖--员工分页查询

请求参数封装: Data public class EmployeePageQueryDTO implements Serializable {//员工姓名private String name;//页码private int page;//每页显示记录数private int pageSize;}请求结果封装: public class PageResult implements Serializable {…