GitLab之搭建(Building GitLab)
GitLab之搭建
“ 在企业开发过程中,GitLab凭借其强大的版本管理、CI/CD集成和项目管理功能,成为许多团队的首选工具。本文将探讨GitLab的基础介绍、搭建过程、权限管理、代码审查以及团队知识管理等方面。通过详细的步骤和实用的技巧,旨在帮助读者更好地利用GitLab提升工作效率。”
01
GitLab简介
GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。很多公司都是基于 GitLab 进行版本管理的。
GitLab是一种基于Web的Git仓库管理工具,提供版本控制和协作开发的功能。它集成了源代码管理(SCM)、持续集成和持续交付(CI/CD)、项目管理等功能,旨在支持整个软件开发生命周期。
GitLab的主要特点:
-
提供Git仓库的托管,支持多用户协作,便于代码版本控制。
-
持续集成/持续交付(CI/CD): 内置CI/CD功能,可以自动化构建、测试和部署流程,提高开发效率。
-
提供问题跟踪、看板、里程碑、标签等功能,帮助团队管理项目进度和任务。
-
代码审查: 支持合并请求(Merge Request)和代码审查,促进团队间的协作与代码质量保证。
-
安全: 提供权限管理和审计日志,确保代码的安全性和合规性。
GitLab适用于各种规模的团队,从小型开源项目到大型企业级应用开发。它的全面功能使其成为DevOps实践的重要工具。
02
搭建 GitLab
搭建步骤:
-
安装一些依赖软件。
sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates sudo apt-get install -y postfix # postfix发送邮件,其它的邮件配置见:https://docs.gitlab.com/omnibus/settings/smtp.html
postfix
发送邮件,其它的邮件配置见:https://docs.gitlab.com/omnibus/settings/smtp.html
。 -
添加下载源:
vim /etc/apt/sources.list.d/gitlab_gitlab-ee.list # 打开该文件添加:# deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main
-
安装GitLab:
sudo apt-get updatesudo apt-get install gitlab-ce
-
配置GitLab:
vim /etc/gitlab/gitlab.rb # 把external_url修改成访问的IP,更复杂的配置信息可以参考 # https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab external_url 'http://192.168.2.129' # 开始配置 gitlab-ctl reconfigure
在这个过程中,可能会遇到类似下面这个问题,是因为
external_url
配置的url
不正确。
更多的配置可以参考
https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
。reconfigure
成功会出现以下内容: -
重启查看状态:
gitlab-ctl restart/start/status/stop # 通过gitlab-ctl help都能查看到该信息
比如
gitlab-ctl status
,会显示以下信息:
启动gitlab
后,访问http://192.168.2.129
可能出现502
错误:
此时可以使用gitlab-ctl tail
来查看gitlab
的服务日志,通过日志可以看到8080
端口被别的进程占用了:
此时需要修改gitlab
的配置信息,如下:
vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
# 然后把listen的8080端口改成8088,然后重启gitlab
把listen
的8080
端口改成8088
,然后重启gitlab
:
gitlab-ctl restart
如果不出什么意外,再次打开http://192.168.2.129
会出现下面这个页面,这个时候需要配置root
账户
的密码了:
配置账户密码成功后:
03
GitLab 的权限管理
3.1、用户注册
如果我们不是gitlab
的用户,可以通过两种方式成为gitlab
的用户:
-
通过这个页面去注册http://192.168.2.129/users/sign_in:
-
让gitlab的管理员去添加,如下图所示点击后进入管理页面,点击“New user”去添加一个用户:
3.2、创建用户组
创建用户组:
之后出现下图所示的界面:
在这个界面上,有几个点需要明白:
-
Visibility level
:可见性,三种级别:-
Private :这个用户组下的所有工程对该用户组可见。
-
Internal :用户组下和Internal工程对所有的用户可见。
-
-
Public :用户组和public的工程对所有人可见。
-
Allowd to create projects
:是否允许创建工程对于用户权限引入了角色进行管理,比如guester
,Developers
,Maintainers
等等。 -
Two-factor authentication
:类似github
的2F
验证,就是在使用gitlab
的时候必须通过2F
进行验证。
3.3、为用户组添加用户
点击groups
,然后点击用户组,就可以向该用户组添加用户了:
然后
3.4、为工程添加访问权限
选中工程,在左侧边栏会有一个setting
选项,点击该选项的members
选项:
04
GitLab的code review
-
分支合并的时候进行代码
review
。 -
对线上现有代码进行
review
。
不是所有人都可以去直接往Master
,develop
等分支去交接代码,而必须从feature
,hotfix
或者bug
分支去merge request
,经过有merge request
权限的人review
代码通过后,才能merge
到被保护的分支。设置分支权限如下所示:
每个开发人员解决了 PR 或者开发完了feature
之后,需要提交一个merge request
到master
分支。
选择源分支和目标分支,然后点击“compare branches and continue
”。
按照要求填写好,选择assignee
给谁去merge
,然后点击“submit merge request
”。
可以针对这个merge request
去给出一些评论,甚至可以在commit
代码上提交评论,然后如果没有什么问题就可以点击“merge
” 按钮。
05
团队知识管理
为什么需要知识管理?因为程序员最痛恨的四件事:写注释,写文档,别人不写注释,别人不写文档。
产品需求、架构设计、接口等等文档:
核心流程和架构设计要有文档:
GitLab 需要团队知识管理的原因:
-
信息共享:团队成员可以方便地访问项目相关的文档、代码、最佳实践等知识,有助于提高团队的协作效率。
-
新成员 onboarding:良好的知识管理可以帮助新成员快速熟悉项目和团队工作流程,减少学习曲线,加速融入团队。
-
防止知识流失:随着人员变动,可能会导致关键知识的流失。系统化的知识管理可以保留重要的信息和经验,让团队在人员更替时依然高效运作。
-
提高生产力:通过文档化和流程标准化,团队成员可以减少重复的工作和问题,提高整体的生产力。
-
支持决策:系统化的知识管理能够为团队提供必要的信息支持,帮助做出更明智的决策。
-
促进创新:知识管理可以通过分享新想法和实践,激发创新思维,促进团队的持续改进。
06
总结
在企业中,GitLab因其强大的功能和灵活的管理而受到广泛青睐。它不仅是一个版本控制和协作开发的工具,更是支持整个软件开发生命周期的综合平台。通过搭建GitLab,团队能够实现高效的源代码管理、自动化的持续集成与持续交付,以及有效的项目管理与权限控制。
GitLab提供的代码审查机制与知识管理能力,使得团队能够在保证代码质量的同时,有效共享和传承项目知识。这种知识管理不仅能帮助新成员快速上手,而且能避免因人员变动而造成的知识流失,提升整体团队的生产力。
通过采用GitLab的功能,企业能够更好地适应快速变化的市场环境,促进团队协作和创新,建立起良好的团队文化,从而实现更高效的软件开发过程。在今后的工作中,GitLab将继续发挥其重要的作用,助力企业的数字化转型与技术进步。
相关文章:
GitLab之搭建(Building GitLab)
GitLab之搭建 “ 在企业开发过程中,GitLab凭借其强大的版本管理、CI/CD集成和项目管理功能,成为许多团队的首选工具。本文将探讨GitLab的基础介绍、搭建过程、权限管理、代码审查以及团队知识管理等方面。通过详细的步骤和实用的技巧,旨在帮…...
R 语言科研绘图第 38 期 --- 饼状图-玫瑰
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
array和list在sql中的foreach写法
在MyBatis中,<foreach>标签用于处理集合或数组类型的参数,以便在SQL语句中动态生成IN子句或其他需要遍历集合的场景。以下是array和list在SQL中的<foreach>写法总结。 <if test"taskIds ! null and taskIds.length > 0">…...
国内MCP服务有哪些?MCP服务器搜索引擎哪家好?
随着MCP(Model Context Protocol)协议的广泛应用,国内出现了越来越多的MCP服务提供商,这些服务覆盖了从开发工具、数据科学到金融、游戏等多个领域。 如果你对MCP协议和相关开发感兴趣,可以访问AIbase(htt…...
二叉树的应用
目录 一、二叉树遍历算法的应用 二、树的存储结构 1、双亲表示法 2、孩子表示法 带双亲的孩子链表 3、孩子兄弟表示法(左孩子、右兄弟)较为普遍 三、森林与二叉树的转换 四、哈夫曼树 哈夫曼(Huffman)树的构造 一、二叉树…...
【LaTeX】
基本使用 \documentclass 类型:文章(article)、报告(report)、书(book) 中文的文章是ctexart,中文字体是UTF8 \documentclass[UTF8]{ctexart} []说明可以省略不写的意思…...
Java基础 - 泛型(基本概念)
文章目录 基本概念参数化类型类型安全和编译时检查 为什么需要泛型?解决类型安全问题避免重复代码提高可读性和维护性 泛型(Generics)是编程语言中一种支持参数化类型的特性,允许在定义类、接口、方法时使用类型参数(T…...
面试之《前端信息加密》
前端代码是直接暴漏给用户的,请求的接口也可以通过控制台network看到参数,这是不够安全的,如果遇到坏人想要破坏,可以直接修改参数,或者频繁访问导致系统崩溃,或数据毁坏。 所以信息加密在某些场合就变得非…...
【含文档+PPT+源码】基于微信小程序的小区物业收费管理系统
项目视频介绍: 毕业作品基于微信小程序的小区物业收费管理系统 课程简介: 本课程演示的是一款基于微信小程序的小区物业收费管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目…...
KDD 2025 顶会最新力作,多变量时间序列预测登顶!
在多变量时间序列预测领域,如何高效捕捉时间分布变化和通道间复杂关系是两大核心挑战。传统方法往往难以同时处理时间模式的异质性和通道间的噪声影响。近期,基于时频结合的方法在这一领域取得了显著进展。本文总结了两篇创新性论文,分别从时…...
for循环的优化方式、循环的种类、使用及平替方案。
本篇文章主要围绕for循环,来讲解循环处理数据中常见的六种方式及其特点,性能。通过本篇文章你可以快速了解循环的概念,以及循环在实际使用过程中的调优方案。 作者:任聪聪 日期:2025年4月11日 一、循环的种类 1.1 默认有以下类型 原始 for 循环 for(i = 0;i<10;i++){…...
OpenFeign 的实现原理详解
前言 OpenFeign 是一个声明式的 HTTP 客户端,它简化了服务间的 HTTP 调用。通过简单的注解和接口定义,开发者可以轻松调用远程服务,而无需手动编写复杂的 HTTP 请求代码。本文将深入探讨 OpenFeign 的实现原理,并结合源码分析其核…...
const关键字理解
const关键字主要的作用是告诉编译器这个东西是个常量,不可被修改。 或者是用来和指针玩一些奇奇怪怪的东西,这玩意面试八股文常青树。 const int* p://表示指针指向的内容不能更改,指针可以更改。 int* const p: //表示指针不能…...
操作系统 4.3-生磁盘的使用
磁盘的物理组成 盘面: 磁盘由多个盘面组成,每个盘面上都有数据存储的区域。 磁道: 每个盘面上都有若干个同心圆,这些同心圆称为磁道。磁道是数据存储的路径。 扇区: 磁道被进一步划分为若干个扇区,扇区…...
Uniapp Vue 实现当前日期到给定日期的倒计时组件开发
应用场景与需求分析 在移动端应用开发中,倒计时功能是常见的交互需求,例如限时促销活动、订单超时提醒、考试倒计时等场景。本文将基于 Uniapp 框架,实现一个从当前日期到给定日期的倒计时组件,支持显示 HH:mm:ss 格式的剩余时间…...
3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换
3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换 3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换...
操作系统 3.3-多级页表和快表
分页的问题 这张幻灯片讨论了操作系统中内存管理的一个核心问题:页大小与页表大小之间的权衡。 页(Page)是内存管理中的一个基本概念,指的是将虚拟内存分割成固定大小的块,以便于管理和访问。页的大小直接影响内存空间…...
Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)
阿里云的KMS(Key Management Service)也是一种托管式密钥管理服务,帮助用户安全地创建、控制和使用密钥,保护敏感数据。通过使用KSM,您可以专注于构建和优化应用程序,而不必担心密钥管理的复杂性。 1、主要…...
游戏引擎学习第218天
构建并运行,注意一下在调试系统关闭前人物的移动速度 现在我准备开始构建项目。如果我没记错的话,我们之前关闭了调试系统,主要是为了避免大家在运行过程中遇到问题。现在调试系统没有开启,一切运行得很顺利,看到那个…...
城电科技 | 光伏太阳花:碳减排路上的璀璨新光光伏智慧花
当谈及 “碳减排” 与 “碳中和”,你脑海中率先浮现的是什么?想必很多人都会想到太阳能发电。太阳能光伏,作为人类取之不尽、用之不竭的绿色清洁能源,具备充分的清洁性、高度的安全性以及相对的广泛性。正因如此,在探讨…...
AI领域再突破,永洪科技荣获“2025人工智能+创新案例”奖
在2025年的今天,人工智能已从技术概念全面渗透至产业核心。中国作为全球AI技术应用的前沿阵地,正通过“人工智能”行动加速推进技术与实体经济深度融合。 这一背景下,永洪科技凭借其“国内某头部ICT人力资源板块GenAI项目”荣获“2025全国企业…...
大模型day1 - 什么是GPT
什么是GPT 全称 Generative Pre-trained Transformer 是一种基于 Transformer 架构的大规模 预训练 语言模型,由OpenAI研发,但GPT仅仅只是借鉴了Transformer 中 Decoder 的部分,并且做了升级 Transformer 架构 Transformer架构 是一种用于…...
飞凌嵌入式T527核心板正式发布OpenHarmony4.1系统,实现从芯片架构到操作系统的全链路国产化
飞凌嵌入式FET527N-C核心板正式发布OpenHarmony4.1系统,实现了从芯片架构到操作系统的全链路国产化。该产品具备灵活可编程、高效能运算、低成本控制等多重优势,通过多核异构设计同步支持边缘智能计算与精准实时控制,能够满足智能制造、能源管…...
机动车号牌管理系统设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对机动车号牌信息管理的提升&…...
测试模板1
本篇技术博文摘要 🌟 引言 📘 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...
小试牛刀-抽奖程序
编写抽奖程序 需求:设计一个抽奖程序,点击抽奖按钮随机抽取一个名字作为中奖者 目标:了解项目结构,简单UI布局,属性方法、事件方法,程序运行及调试 界面原型 待抽奖: 点击抽奖按钮&#x…...
Foundry框架在FISCO BCOS区块链中的高级应用与实战技巧
引言:从入门到精通的进阶之路 在看过我发布的《FISCO BCOS区块链智能合约测试利器:Foundry框架从入门到实战》基础上,我们可以进一步深入探索Foundry框架在FISCO BCOS生态中的高级应用场景。Foundry作为一款强大的区块链开发工具集,其功能远不止于基础测试,它还能为FISCO…...
反转链表系列
206. 反转链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int …...
算力租赁:数字经济时代的 “电力革命”—— 从资源租赁到创新生态的范式重构
引言:当算力成为新 “石油”,租赁模式如何重塑商业未来? 在数字经济浪潮中,算力早已超越传统硬件范畴,成为驱动企业创新的核心生产要素。据 IDC 预测,全球数据总量将在 2025 年突破 175 ZB,而人…...
Go:基本数据
文章目录 整数浮点数复数布尔值字符串字符串字面量UnicodeUTF - 8字符串和字节 slice字符串和数字的相互转换 常量常量生成器 iota无类型常量 整数 分类 Go 的整数类型按大小分有 8 位、16 位、32 位、64 位 ,同时有符号整数包括int8、int16、int32、int64 &#…...
金融行业软件介绍
金融,本质为货币资金的融通,是经济活动中至关重要的领域。它围绕货币、信用、利率等核心要素运转,借助银行、证券机构、保险机构等众多主体,在货币市场与资本市场中实现资金的调配与流转,具有优化资源配置、分散风险及…...
Python的那些事第四十九篇:基于Python的智能客服系统设计与实现
基于Python的智能客服系统设计与实现 摘要 随着人工智能技术的飞速发展,智能客服系统逐渐成为企业提升客户服务质量和效率的关键工具。本文详细介绍了基于Python的智能客服系统的设计与实现方案,涵盖了系统架构、核心功能、技术选型及优化建议,旨在为企业构建高效、智能的客…...
vscode报错:unins000.exe 尝试在目标目录创建文件时发生一个错误
打开vscode,报错 这个错误提示表明在卸载或安装 Visual Studio Code 时,系统拒绝访问目标目录中的文件 unins000.exe。以下是解决此问题的有效方法: 检查文件权限 找到文件所在目录(如 D:\software\Microsoft VS Codeÿ…...
当气象水文遇见R语言——破解时空数据的“达芬奇密码“
在气象水文科学领域,数据从来不只是简单的数字阵列。台风路径的时空跳跃、流域径流的非线性涨落、气候要素的混沌演变,这些充满不确定性的自然现象转化为数据时,呈现出多维时空交织的复杂图景。研究人员常常要在TB级遥感数据中捕捉毫米级降水…...
LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】
LEARNING DYNAMICS OF LLM FINETUNING 一句话总结 作者将LLM的学习动力机制拆解成AKG三项,并分别观察了SFT和DPO训练过程中正梯度信号和负梯度信号的变化及其带来的影响,并得到以下结论: SFT通过梯度相似性间接提升无关…...
【射频仿真学习笔记】变压器参数的Mathematica计算以及ADS仿真建模
变压器模型理论分析 对于任意的无源电路或者等效电路,当画完原理图后,能否认为已经知道其中的两个节点?vin和vout之间的明确解析解 是否存在一个通用的算法,将这里的所有元素都变成了符号,使得这个算法本身就是一个函…...
改善 Maven 的依赖性
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项: 还有另一个用例, mvn dependency:analyze 它可…...
循环神经网络 - LSTM 网络的各种变体
前面的博文中,我们了解和学习了长短期记忆网络,本文我们来学习LSTM 网络的各种变体。 目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息.我们可以对门控机制进行改进并获…...
LangGraph 概述
LangGraph 介绍 LangGraph 是 LangChain 框架的扩展,专为创建基于大型语言模型(LLMs)的有状态、多角色应用而设计。它提供了一个灵活的架构,用于构建复杂的多步骤 LLM 应用,其中状态管理和流程控制至关重要。 为什么…...
Linux系统06---信号
目录 信号 1.1 进程间通信方式 1.2 信号的概念 1.3 查看信号 1.4 信号的产生 1.5 信号的处理 信号的 API 函数 2.1 函数名:kill() 2.2 函数名:raise() 2.3 函数名:alarm() 2.4 函数名:pause() 2.5…...
Java 程序调试与生产问题排查工具Arthas
好的,以下是修改后的博客内容,将公司信息替换为通用的占位符: 深入探索 Arthas:Java 程序调试与生产问题排查的利器 在 Java 开发中,调试和诊断问题往往是一个复杂且耗时的过程。Arthas(Alibaba Java Dia…...
PH热榜 | 2025-04-11
1. Voicenotes Pages 标语:如果出版的感觉像是在和朋友聊天呢? 介绍:Voicenotes Pages 是一个极其简单的发布创意和故事的方式。它就像是一个简易的博客或播客,但更容易上手。你只需录制内容,点击发布,就…...
从三围学校项目看:中建海龙智能建造的崛起与突破
在建筑行业迈向智能化、数字化的浪潮里,中建海龙科技有限公司(以下简称“中建海龙”)从中脱颖而出,成为推动智能建造发展的重要力量。凭借深厚的技术积累、创新的理念以及先进的实践,中建海龙正引领着建筑行业的变革&a…...
aviator 自定义表达式
引入依赖 如果你使用的是 Maven 项目,在 pom.xml 中添加以下依赖: <dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>5.3.2</version> </dependency>…...
电商中的购物车(redis的hash类型操作)
购物车样式 ①、创建service-cart模块 spring:profiles:active: devserver:port: 8513 spring:application:name: service-cartcloud:nacos:discovery:server-addr: localhost:8848data:redis:host: localhostport: 6379启动类 SpringBootApplication(excludeDataSourceAutoC…...
Ubuntu 系统错误日志常见问题
一、Ubuntu 系统日志文件位置 1. 核心系统日志 日志文件用途说明/var/log/syslog所有系统级别的日志(包括内核、服务等)/var/log/kern.log内核相关的详细日志(如硬件驱动问题)/var/log/auth.log用户认证日志(SSH登录、sudo权限等)/var/log/dpkg.log软件包安装/卸载日志/…...
《Uniapp-Vue 3-TS 实战开发》TypeScript 泛型详解
泛型(Generics)是 TypeScript 中非常重要的特性,它允许我们创建可重用的组件,这些组件可以支持多种类型,而不会丢失类型安全性。 一、泛型基础 1. 基本概念 泛型允许我们在定义函数、接口或类时不预先指定具体类型,而是在使用时再指定类型。 // 不使用泛型 function …...
mysql 删除表等待
今天有个表加字段,语句是先删除,后重新建,表没有数据 ,但是删除一个表的时候,语句drop table 提示超时 show processlist 后,等待类型是 Waiting for table metadata lock 取消重试几次后仍然是如此…...
如何深入理解protobuf
Protocol Buffers(protobuf)是一种轻便高效的结构化数据存储格式,用于数据序列化和反序列化,具有语言无关、平台无关、可扩展性强等特点,能有效提高数据存储和传输的效率。 一.协议的设计 我们在介绍protobuf之前我们…...
《分布式软总线牵手云服务,拓展应用新维度》
分布式软总线与云服务的融合,正掀起一场前所未有的变革,重塑着我们工作、生活和交互的方式。二者的结合,犹如天作之合,不仅打破了设备与数据之间的壁垒,更开启了一系列令人瞩目的全新应用场景。 分布式软总线…...