介绍
gitlab官方文档:https://docs.gitlab.com/14.10/
gitlab中文官方文档:https://docs.gitlab.cn/jh/install/requirements.html
GitLab 是一个用于仓库管理系统的开源项目,是由GitLabInc.开发,
使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。
使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
虚拟机至少 4G 内存, CPU核心2 个以上,否则初始化时会内存 溢出而失败,或者 UNicon 服务起不来
实验环境
主机名 | ip | 备注 |
test | 192.168.188.60 | git、nginx |
gitlab | 192.168.188.61 | gitlab |
安装
1.下载到/opt/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.6.0-ce.0.el7.x86_64.rpm(这次实验用14.6.0版本)
去清华源下载gitlab-ce-13.3.8版本https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.3.8-ce.0.el7.x86_64.rpm
[root@gitlab ~]# cd /opt/
2.安装依赖
[root@gitlab opt]# yum install -y curl policycoreutils-python openssh-server perl
3.安装
[root@gitlab opt]# rpm -ivh gitlab-ce-14.6.0-ce.0.el7.x86_64.rpm
或者
[root@gitlab opt]# yum install -y gitlab-ce-14.6.0-ce.0.el7.x86_64.rpm
# 成功如下图出现一个狐狸的图案,还会告诉你要干什么
4.修改配置文件
[root@gitlab opt]# cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
[root@gitlab opt]# vim /etc/gitlab/gitlab.rb
# 修改如下
改:32 external_url 'http://gitlab.example.com'
为:32 external_url 'http://192.168.188.61' # 改为本机地址
# 刷新配置
[root@gitlab opt]# sudo gitlab-ctl reconfigure
5.常用命令
[root@gitlab opt]# gitlab-ctl status
run: alertmanager: (pid 2955) 26748s; run: log: (pid 2700) 26807s
run: gitaly: (pid 2856) 26749s; run: log: (pid 2234) 26897s
run: gitlab-exporter: (pid 2843) 26750s; run: log: (pid 2639) 26825s
run: gitlab-workhorse: (pid 2820) 26751s; run: log: (pid 2435) 26849s
run: grafana: (pid 2972) 26747s; run: log: (pid 2795) 26763s
run: logrotate: (pid 2487) 26838s; run: log: (pid 2506) 26837s
run: nginx: (pid 2466) 26844s; run: log: (pid 2478) 26841s
run: node-exporter: (pid 2829) 26750s; run: log: (pid 2628) 26830s
run: postgres-exporter: (pid 2964) 26747s; run: log: (pid 2731) 26799s
run: postgresql: (pid 2243) 26894s; run: log: (pid 2297) 26891s
run: prometheus: (pid 2863) 26749s; run: log: (pid 2683) 26812s
run: puma: (pid 2385) 26862s; run: log: (pid 2393) 26861s
run: redis: (pid 2075) 26906s; run: log: (pid 2092) 26903s
run: redis-exporter: (pid 2851) 26749s; run: log: (pid 2664) 26817s
run: sidekiq: (pid 2402) 26856s; run: log: (pid 2415) 26855s
# 检查端口
[root@gitlab opt]# netstat -lntp # 可以找到与上面对应的进程与端口号
# 停止gitlab集成的服务中的某一服务
[root@gitlab opt]# gitlab-ctl stop nginx
[root@gitlab opt]# gitlab-ctl status
# 启动gitlab集成的服务中的某一服务
[root@gitlab opt]# gitlab-ctl start nginx
[root@gitlab opt]# gitlab-ctl status
# 重启服务
[root@gitlab opt]# gitlab-ctl restart
# 查看日志
[root@gitlab opt]# gitlab-ctl tail
# 查看某个服务的日志
[root@gitlab opt]# gitlab-ctl tail nginx
默认日志存放在:/var/log/gitlab
注意:
1、端口冲突 : unicorn 是反向代理服务, 默认端口 8080 ,不要占用,它如果无法启动,则 应用会报 502 错误
2、配置不足: 内存不足,导致 gitlab-ctl reconfigure 时无法通过
3、配置不足: CPU核心数量不足,导致 unicorn 无法启动,报如下错误
使用
1.打开页面
浏览器输入IP地址即可,如下图
2.设置密码
需要设置八位以上的密码
3.登陆
新版本不需要创建密码,在成功启动时,会生成/etc/gitlab/initial_root_password登录密码文件
4.更改语言
5.注册限制
生产中,当新来一个同事或者有人忘记密码直接新创一个账户,是不允许的
6.新建项目
新建项目有多处可以新建,如:新建gitlab刚进去的欢迎页面、仪表板和管理中心等
点击新建项目过后会出现跟gitee、github一样的操作,回到test机子上操作
操作推送现有的 Git 仓库的步骤
# 如果是新的本地仓库,需要git init初始化,不然本地找不到master分支之类的
# 因为之前在test机子操作过,所以可以不用初始化直接配置推送
[root@test ~]# cd /opt/
[root@test opt]# ls
shy yum
[root@test opt]# cd shy/
[root@test shy]# ls
dev.php index.html install.sh monitor README.md test.sh test.txt
[root@test shy]# git remote rename origin old-origin # 因为本地仓库因为有这个源,所以不用操作
error: 不能重命名配置小节 'remote.origin' 到 'remote.old-origin'
[root@test shy]# git remote add origin http://192.168.188.61/root/uplooking.git # 配置远程git版本库
[root@test shy]# git push -u origin --all # 推送上去
Username for 'http://192.168.188.61': root # 因为没有做免密需要账号密码
Password for 'http://root@192.168.188.61':
Counting objects: 29, done.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (29/29), 3.37 KiB | 0 bytes/s, done.
Total 29 (delta 6), reused 12 (delta 1)
remote:
remote: To create a merge request for dev, visit:
remote: http://192.168.188.61/root/uplooking/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
remote: To create a merge request for test, visit:
remote: http://192.168.188.61/root/uplooking/-/merge_requests/new?merge_request%5Bsource_branch%5D=test
remote:
To http://192.168.188.61/root/uplooking.git
* [new branch] dev -> dev
* [new branch] master -> master
* [new branch] test -> test
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
分支 master 设置为跟踪来自 origin 的远程分支 master。
分支 test 设置为跟踪来自 origin 的远程分支 test。
[root@test shy]# git push -u origin --tags # 标签提交
Username for 'http://192.168.188.61': root
Password for 'http://root@192.168.188.61':
fatal: Authentication failed for 'http://192.168.188.61/root/uplooking.git/'
[root@test shy]# git push -u origin --tags
Username for 'http://192.168.188.61': root
Password for 'http://root@192.168.188.61':
Counting objects: 1, done.
Writing objects: 100% (1/1), 165 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To http://192.168.188.61/root/uplooking.git
* [new tag] v0.1 -> v0.1
* [new tag] v0.6 -> v0.6
* [new tag] v1.0 -> v1.0
回到gitlab的web页面刷新,会发现分支和标签都会显示
7.删除项目
8.项目导入(迁移)
导入一个gitee上的web项目https://gitee.com/kangjie1209/monitor,复制https的克隆链接
9.拉取仓库代码进行部署
# 复制gitlab中monitor的http克隆链接进行拉取
# 需要有nginx
# 在test机子操作
[root@test opt]# git clone http://192.168.188.61/root/monitor.git
正克隆到 'monitor'...
Username for 'http://192.168.188.61': root
Password for 'http://root@192.168.188.61':
remote: Enumerating objects: 439, done.
remote: Counting objects: 100% (439/439), done.
remote: Compressing objects: 100% (375/375), done.
remote: Total 439 (delta 56), reused 434 (delta 54), pack-reused 0
接收对象中: 100% (439/439), 8.78 MiB | 0 bytes/s, done.
处理 delta 中: 100% (56/56), done.
[root@test opt]# ls
monitor shy yum
[root@test opt]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /opt/monitor;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@test opt]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@test opt]# nginx -s reload
# 浏览器打开页面验证,输入test机子的ip
10.新建用户与授权
Gitlab权限管理
Gitlab用户在组中有五种权限:(Guest、Reporter)很少用、Developer、Master、Owner
Guest:可以创建问题、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA、
Developer:可以克隆代码、开发、提交、push,不能合并分支
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,可以合并分支,核心项目负责人可以赋予这个权限
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
Gitlab中的组和项目有三种访问权限:Private、Internal、Public
Private:只有组成员才能看到
Internal:只要登录的用户就能看到
Public:所有人都能看到
开源项目和组设置的是Internal
新建用户
确认密码
登录
注:如果用同一浏览器登录可能会导致顶号,想多用户登录要用不同浏览器
此时退出登录普通账户会发现是英文需要更改,没有管理中心,只能创建项目,之前创建、导入的项目都没有,所以需要回到管理员用户给予授权
授权
回到管理账户对项目授权
回到被授权的用户,会发现出现运行读写的项目以及该项目的身份
对项目的修改,申请合并请求
修改了readme.md,申请合并,因为不是项目拥有者,所以需要通过管理审核
回到管理员账户
在没有管理员同意审核之前是看不到修改,管理员审核过后同意就会看到,如下图
案例01:项目与组
案例1:验证项目是不是隶属于该组的成员才可以看见
1.首先创建dev、ops两个组
2.然后基于组创建两个项目
dev组选择的是自动初始化,直接执行下面的语句即可
[root@git opt]# git clone http://192.168.91.183/dev/dev_buy_list.git
ops组选的是手动执行
git clone git@192.168.91.183:ops/ops_jobs.git
warning: 您似乎克隆了一个空版本库。
[root@git opt]# cd ops_jobs/
[root@git ops_jobs]# echo hahahah > README.md
[root@git ops_jobs]# git add .
[root@git ops_jobs]# git commit -m "ops提交1"
[root@git ops_jobs]# git branch
* master
[root@git ops_jobs]# git push -u origin master
在主页刷新即可
3.最后创建用户、为用户分配组、以及组中的权限
先给密码,然后用户登录之后改密码登录。。。
案例02:主程序员与普通开发
案例2:验证主程序员和开发者身份的权限
dev组:hcjpl 主程序员
ops组:wyh 开发者
1.主程序员:能够对master、dev分支进行操作:
hcjpl登录后只能查看dev
因为是自动初始化,我们给他加个分支:
git branch dev
vim dev.txt
git add .
git commit -m "update master"
git push -u origin dev
同时修改main跟dev,发生冲突直接可以解决
如上测试得到结果,主程序员可以直接修改master跟dev分支,分支合并操作需要管理员同意!
2.测试开发者:仅能对非master分支进行操作
wyh登录后,只能查看ops
网瘾海不能改master,拒绝你合并!
上面的实验证明开发者修改master,不仅内容不能修改,且该身份用户合并时需要管理员的授权同意;修改非master的分支时,能够修改内容,但合并时需要管理员同意
11.备份
手动备份
[root@gitlab gitlab]# vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 604800
[root@gitlab gitlab]#gitlab-ctl restart
[root@gitlab backups]# gitlab-backup create /var/opt/gitlab/backups
[root@gitlab backups]# cd /var/opt/gitlab/backups
[root@gitlab backups]# ll
-rw------- 1 git git 9584640 10月 26 17:14 1666775653_2022_10_26_14.6.0_gitlab_backup.tar
到gitlab上删除项目
[root@gitlab backups]# gitlab-backup restore /var/opt/gitlab/backups/1666775653_2022_10_26_14.6.0 #后接包名到数字位置即可
需截图
此时,数据已恢复
两个yes后
恢复成功
自动备份
安排备份在工作日之后的每天早上运行,周二(第 2 天)到周六(第 6 天)
crontab -e
15 04 * * 2-6 cd /var/opt/gitlab/backups && gitlab-backup create /var/opt/gitlab/backups