Gitlab搭建以及使用(一)

gitlab搭建

详情查看安装文档:

docs.gitlab.com/ee/install/...

本文简单介绍docker搭建和本地搭建两种方式

docker安装

安装docker

docs.docker.com/engine/inst...

这里以centos系统为例,其他系统也一样

在官方文档找到对应系统的安装介绍,然后排查一下自己的系统是否满足要求,移除旧版本docker和检查自己的内存是否充足

bash 复制代码
## 查看系统的版本信息
cat /etc/os-release  lsb_release -a 

我的系统刚好是centos7,然后系统之前没有安装docker,但是请注意,docker安装gitlab需要一定的磁盘容量,需要检查一下自己的磁盘够不够,可以通过top命令查看具体数据,如果不够,可以通过命令删除一些文件

ini 复制代码
du -ah --max-depth=1 

gitlab安装

docs.gitlab.com/ee/install/...

推荐两种安装方式,一种docker,一种本地安装(无网络)

两个前提条件:先按照前面的步骤安装好docker,还有可以访问的外部host名,我的理解就是一个可用的ip

我装的是社区版本,可以来这里查看需要安装的版本,比如我安装的是gitlab/gitlab-ce:16.10.6-ce.0,

hub.docker.com/r/gitlab/gi...

那么执行

bash 复制代码
sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://43.159.35.99'" \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ce:16.10.6-ce.0即可

rpm包安装

详情可以参考这里

docs.gitlab.com/ee/update/p...

去官方网站下载安装包,社区版ce,企业版ee

packages.gitlab.com/gitlab/gitl...
packages.gitlab.com/gitlab/gitl...

然后根据自己的系统对应的 Distro/Version(系统版本)下载文件,如果不清楚el/7、el/8的可以了解下:

复制代码
EL5是Red Hat 5.x,CentOS 5.x
EL6是Red Hat 6.x,CentOS 6.x
EL7是Red Hat 7.x,CentOS 7.x
EL8是Red Hat 8.x,CentOS 8.x

根据自己的系统选择对应的版本 ,比如我centos7就选择下载:

gitlab-ce-16.10.6-ce.0.el7.x86_64.rpm

bash 复制代码
*# Debian/Ubuntu*
dpkg **-i** <package_name>

*# RHEL/CentOS 7 and Amazon Linux 2*
rpm **-Uvh** <package_name>
 
*# RHEL/Almalinux 8/9 and Amazon Linux 2023*
dnf install <package_name>

*# SUSE*
zypper install <package_name>

centos就用rpm -Uvh gitlab-ce-16.10.6-ce.0.el7.x86_64.rpm进行安装

启动

本地安装

通过 指令编辑配置文件

bash 复制代码
vim /etc/gitlab/gitlab.rb

找到external_url,把自己部署gitlab的ip地址填进行并保存;注意这里的端口好,如果冲突了,需要自己重新选择一个

bash 复制代码
external_url 'http: *//IP:8080/'*

然后重新加载gitlab配置

bash 复制代码
gitlab-ctl reconfigure

如果这里提示gitlab-ctl不是命令,需要我们自己再安装下,可以参考下面:

blog.csdn.net/qq_44370158...

然后查看root默认密码:

bash 复制代码
cat /etc/gitlab/initial_root_password 

然后通过上面配置的额external_url地址和root用户密码就可以正常登录访问gitlab了

gitlab使用

有两种使用方法,一种是通过gitlab提供的可视化页面,进行用户、项目、CI/CD等的操作,这个不是本文介绍的,本文要介绍的是另一种,通过API使用;

在有的场景下,我们需要在别的系统中使用gitlab,即在某个自建系统中自动在gitlab创建对应的默认代码仓,gitlab通过接口响应创建好后的项目地址,这时候用户就可以通过提供的地址进行上传和下载代码;

gitlab提供了标准的rest格式的api接口,通过适当的鉴权模式(即token)可以正常调用;在使用过程中,我们只需要根据自己对应的安装的版本,然后选择对应接口版本就行,下面我就以我安装的16.10.6版本为例,然后鉴权方式使用的是OAuth2.0

docs.gitlab.com/ee/api/rest...

OAuth2.0

需要在gitlab管理页面创建application

Gitlab允许用户创建Applications, 这些Applications可以通过OAuth2授权来访问Gitlab的相应资源

在Gitlab中, Applications分两种:

  • 第一种是用户级别的Application, 这一般通过用户的Profile菜单进入创建

  • 第二种是系统级别的Application, 这一般只有管理员权限的人通过Admin菜单进入创建

创建好application后就获得了client_id和client_screate了,然后就可以通过标准的OAuth2.0协议接口获取到code,最后获取到access_token;

注册的application获取到access_token,也就代表通过了gitlab认证,那么就可以通过获取到代表某个gitlab用户的access_token和api对gitlab进行操作了;

上面的过程涉及到两个接口:

${external_url}表示我们配置的gitlab访问地址

GET:/oauth/authorize

url 复制代码
https://${external_url}/api/v4/oauth/authorize?client_id=APP_ID&redirect_uri=REDIRECT_URI&response_type=code&state=STATE&scope=REQUESTED_SCOPES

其中client_id可以在管理页面创建的应用中查看,然后重定向地址就是被gitlab信任的client地址,在认证通过后,会生成授权码code跳转到重定向地址,然后scope就表示在创建应用时,授予的该应用的权限,多个权限的话,用+号拼接;state可以随机填一个,是用来防止跨域伪造攻击的。

POST:/oauth/token

css 复制代码
parameters = 'client_id=APP_ID&code=RETURNED_CODE&grant_type=authorization_code&redirect_uri=REDIRECT_URI&client_secret =xxx

请求api

注意,在header头里面带上token,key为Authorization, value为Bearer拼接空格拼接上面获取到的access_token

bash 复制代码
Authorization: Bearer ${assess_token}

参考

juejin.cn/post/713550...

www.cnblogs.com/anliven/p/1...

www.cnblogs.com/cangqinglan...

相关推荐
猪猪拆迁队1 小时前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库1 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横1 小时前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户6757049885021 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan2 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户6757049885022 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia2 小时前
Geo Scene域名修改引起的一些问题
后端
用户298698530142 小时前
Java 实现 Word 文档加密与权限解除
java·后端
饼干哥哥2 小时前
扣子3.0测评:我让 Codex 和 Claude Code 住同一个桌面,结果它们打架了!
人工智能·开源·代码规范
vanuan2 小时前
给你的A2A-Agent加把锁-认证鉴权实战指南
后端