gitlab介绍与操作

摘要:
GitlabGitLab使用RubyonRails的开源版本管理系统来实现一个自托管的Git项目库,它可以通过Web界面访问公共或私有项目。与Github一样,GitLab可以浏览源代码并管理缺陷和评论。团队成员可以使用内置的简单聊天程序进行交流。常用网站:官方网站:https://about.gitlab.com/国内形象:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/1.1Gitlab安装和安装依赖于yum installcurl policycoreutils openssh server openssh client policys coreutils python–y下载安装包wgethttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.6.10-ce.0.el7.x86_64.rpm安装gitlabrpm ivhgitlab-ce--11.4.14-c.0.el7.x86_64.rpm1.1.1 Gitlab配置的默认配置文件为/etc/Gitlab/Gitlab-Rb,如下图所示修改外部_ url是本地IP地址或可以访问本地计算机的域名。

Gitlab

GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。
与 Github 类似,GitLab 能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访
问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。
它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
常用的网站:
官网:https://about.gitlab.com/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

1.1 Gitlab安装

安装依赖
yum install curl policycoreutils openssh-server openssh-clients policycoreutils-python –y
下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.6.10-ce.0.el7.x86_64.rpm
安装gitlab
rpm -ivh gitlab-ce-11.4.14-ce.0.el7.x86_64.rpm

1.1.1 Gitlab配置

GitLab 的默认配置文件为于:/etc/gitlab/gitlab.rb,修改下图所示的 external_url为本机 IP 地址或者一个可以访问到本机的域名。

修改完配置文件后,使用gitlab-ctl reconfigure重新配置gitlab,

1.1.2 启动并访问Gitlab

重新配置执行完毕后,使用gitlab-ctl restart重启服务

使用10.0.0.11进行访问,首次登陆会要求更改root用户的密码,更改完密码之后如下

1.1.3 Gitlab关闭注册功能

由于我们Gitlab系统是私有仓库,一般用户都是由管理员创建和分派的,所以我们需要关闭注册

使用 root 用户登录,点击页面上方的 Adminarea

进入管理员区域页面,点击页面左侧菜单栏下方的 Setting

进入 Settings 页面,下拉页面找到 Sign-up Restrictions 选项

取消 Sign-up enabled 选项前面的勾选,下拉到页面的下方,点击 Save 按钮完成配
置。退回到系统的登录页面,发现已经没有用户注册功能

1.2 Gitlab使用

1.2.1 常用命令

[root@ci-node1 tools]# gitlab-ctl status
run: alertmanager: (pid 37584) 346s; run: log: (pid 23944) 46279s
run: gitaly: (pid 37594) 346s; run: log: (pid 23907) 46282s
run: gitlab-monitor: (pid 37606) 345s; run: log: (pid 23895) 46282s
run: gitlab-workhorse: (pid 37616) 345s; run: log: (pid 23866) 46282s
run: logrotate: (pid 37626) 344s; run: log: (pid 23839) 46283s
run: nginx: (pid 37633) 344s; run: log: (pid 23840) 46283s
run: node-exporter: (pid 37639) 343s; run: log: (pid 23858) 46283s
run: postgres-exporter: (pid 37643) 343s; run: log: (pid 23943) 46280s
run: postgresql: (pid 37654) 342s; run: log: (pid 23823) 46284s
run: prometheus: (pid 37656) 342s; run: log: (pid 23913) 46281s
run: redis: (pid 37669) 341s; run: log: (pid 23824) 46284s
run: redis-exporter: (pid 37675) 341s; run: log: (pid 23894) 46282s
run: sidekiq: (pid 37683) 338s; run: log: (pid 23825) 46284s
run: unicorn: (pid 37695) 337s; run: log: (pid 23826) 46284s

gitlab-ctl start:启动全部服务
gitlab-ctl restart:重启全部服务
gitlab-ctl stop:停止全部服务
gitlab-ctl reconfigure:使配置文件生效(一般修改完主配置文件/etc/gitlab/gitlab.rb,需要执行此命令)
gitlab-ctl show-config :验证配置文件
gitlab-ctl uninstall:删除gitlab(保留数据)
gitlab-ctl cleanse:删除所有数据,从新开始
gitlab-ctl tail 查看服务的日志

1.2.2 Gitlab常用组件

GitLab 由主要由以下服务构成,他们共同承担了 Gitlab 的运作需要

nginx:静态Web服务器
gitlab-shell:用于处理Git命令和修改authorized keys列表,我们的gitlab是以Git做为最层的,你操作实际上最后就是调用gitlab-shell命令进行处理。
gitlab-workhorse:轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)
unicorn:GitLab Rails应用是托管在这个服务器上面的

1.2.3 Gitlab基础目录

/var/opt/gitlab/git-data/repositories:库默认存储目录
/opt/gitlab:            应用代码和相应的依赖程序
/var/opt/gitlab:gitlab-ctl reconfigure命令编译后的应用数据和配置文件,不需要人为修改配置
/etc/gitlab:    配置文件目录
/var/log/gitlab:此目录下存放了gitlab各个组件产生的日志
/var/opt/gitlab/backups/:备份文件生成的目录

1.3 Gitlab仓库管理

GitLab 是通过组(group)的概念来统一管理仓库(project)和用户(user),通过创建组,在组下再创建仓库,再将用户加入到组,从而实现用户与仓库的权限管理

1.3.1 创建组create group

在管理员页面点击页面顶部的 Admin area 按钮,进入管理员区域,在页面右侧点击绿色的 New group 按钮,进入创建组页面

在创建组页面中,组路径和组名称为必填项,而且此两处内容好一致:

  • 注:visibility Level:选择谁可以访问该组:我们默认选择 private 即可
  • Private:只有授权的用户才可以看到
  • Internal:只要是登录 gitlab 的用户就可以看到
  • Public:只要可以访问 gitlab web 页面的人就可以看到

点击页面下的 create group 按钮,完成组的创建,进入组管理页面

1.3.2 创建用户 create user

在管理员页面点击页面顶部的 Admin area 按钮,进入管理员区域,在页面右侧点击绿色的 New user 按钮,进入创建用户页面:

在创建用户页面,输入用户名昵称、用户名、电子邮件、选择用户级别

点击页面下部的 create user 按钮,完成用户创建,进入用户管理页面,点击页面右上页的 Edit 按钮,为用户设置初始密码,在此页面也可同时修改用户注册信息。

1.3.3 用户授权 grant user

用户创建完成后,我们就需要对用户进行授权,从而使用户可以管理仓库,有两种方式,一是将用户加入到组,这样用户可以管理组内的仓库,二是直接授权用户管理仓库。通常我们采用的方式是将用户加入相应的组,并赋予不同的角色。GitLab 中用户的角色是系统定义好的,不能更改。这一点可能不符合我们正常的思维习惯。

下面我们将刚创建的 dev 用户添加到我们的 oldboy 组,将赋予 developer 权限,在管理员区域,

点击 oldboy 组,进入组管理页面:

选择我们刚创建的 dev 用户,选择 developer 角色,然后添加到组:

注:关于每一种角色对应的权限,可参见官方文档相关内容:https://docs.gitlab.com/ee/user/permissions.html

1.3.4 创建仓库 create project

在 GitLab 中,你可以创建 project 用来存储你的程序代码、作为一个问题跟踪器、用于代码协作、用于持续集成中的构建、测试和部署等
在管理员区域点击 New project 按钮,或者点击导航栏中的 选择 New project 选项

进入到新建 project 页面

选择仓库所属的组,输入仓库名称、仓库描述,选择可见级别,即可完成仓库创建。进入仓库主页面:页面左侧部分为仓库操作相关菜单栏,右侧空仓库下显示如何在命令行连接该仓库,非空时显示仓库内容。

我们将 git_test 仓库加入到 oldboy 组后,组内的成员即可以看到该仓库,我们使用
dev 用户登录,即可看到该仓库

1.3.5 配置SSH KEY

前面我们已经在 GitLab 创建了仓库,并且授权用户可以使用仓库,我们所有的操作都是在 WEB 页面进行,下在我们介绍如何使用客户端来连接我们的仓库。
我们的仓库是私有的,只有授权的用户才可以访问到该仓库,那么只要将客户端的用户与我们 GitLab 的用户绑定,客户端即可访问到 GitLab 上的仓库,我们建议使用 SSH 方式实现客户端与 Gitlab 用户的绑定,具体配置如下:

在客户端生成 ssh 密钥对(注 windows 客户端下只能使用 rsa 加密方式)

[root@ci-node1 tools]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ijcm2IoY2fwwYZCGEKjvTVciRLkovKYLX26y2woy5UY root@ci-node1
The key's randomart image is:
+---[RSA 2048]----+
|Bo ...           |
|+o  o            |
|+ oo .           |
|o*.+o . .        |
|ooE +.=oS        |
|.O.=.=.o         |
|X.+oo.           |
|+=o+o            |
|..=*o            |
+----[SHA256]-----+

我们将该用户与 GitLab 的 root 用户绑定,复制用户的公钥,在 GitLab 主页面点击用户设置

此处只能添加公钥,如果添加私钥系统将报错,此外一个公钥在整个 GitLab 系统中只能添加一次,但是一个 GitLab 用户可以添加多个公钥

1.3.6 推送本地仓库到gitlab

首先我们要将GitLab上的git_data仓库配置为ci-node1上git_data仓库的远程仓库,再使用推送的功能进行推送

[root@ci-node1 git_data]# git remote add gitlab git@10.0.0.11:oldboy/git_data.git
[root@ci-node1 git_data]# git push -u gitlab
Counting objects: 42, done.
Compressing objects: 100% (32/32), done.
Writing objects: 100% (42/42), 3.60 KiB | 0 bytes/s, done.
Total 42 (delta 8), reused 0 (delta 0)
To 10.0.0.11:oldboy/git_data.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from gitlab.

推送完后可以在gitlab仓库中看到推上来的内容

1.3.7 克隆gitlab仓库到本地客户端

首先,我们配置 ci-node2 客户端与 GitLab 上 dev 用户绑定

使用 git clone 命令克隆仓库到 ci-node2 本地

[root@ci-node2 git_data]# git clone git@10.0.0.11:oldboy/git_data.git
Cloning into 'git_data'...
remote: Enumerating objects: 42, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 42 (delta 8), reused 0 (delta 0)
Receiving objects: 100% (42/42), done.
Resolving deltas: 100% (8/8), done.
[root@ci-node2 git_data]# ls
git_data
[root@ci-node2 git_data]# cd git_data/
[root@ci-node2 git_data]# ls
ab  a.txt  b.txt  c.txt  test
[root@ci-node2 git_data]# git remote 
origin

我们可以看到已经将 GitLab 上的 git_data 仓库克隆到了 ci-node2 本地,同时为本地仓库添加了一个指向 GitLab 上 git_data 仓库的远程仓库
我们 ci-node2 的 git_data 上创建一个 dev 分支,并将 dev 分支,推送到 GitLab 上:

[root@ci-node2 git_data]# git branch dev #创建分支
[root@ci-node2 git_data]# git branch  #查看分支
  dev
* master
[root@ci-node2 git_data]# git checkout dev #切换分支
Switched to branch 'dev'
[root@ci-node2 git_data]# git status #查看分支状态
# On branch dev
nothing to commit, working directory clean
[root@ci-node2 git_data]# git push -u origin dev #推送到远程仓库
Total 0 (delta 0), reused 0 (delta 0)
remote: 
remote: To create a merge request for dev, visit:
remote:   http://10.0.0.11/oldboy/git_data/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To git@10.0.0.11:oldboy/git_data.git
 * [new branch]      dev -> dev
Branch dev set up to track remote branch dev from origin.

完成后可以在gitlab在看到我们推送上来的分支

1.3.8 设置分支保护

在实际使用过程中,我们通常会保持 master 分支稳定,用于生产环境的版本发布,只有授权的用户才可以向 master 合并代码。要实现此功能,我们需要将 master 设置为保护分支,并授权什么用户可以向 master 用户推送代码

使用 root 用户点击 git_data 仓库页面左下角的 Settings


设置完成后,在仓库分支页面,可看到 master 分支后面出现一个绿色的 protected 标记

此时我们再尝试在 ci-node2 上推送 master 分支到 GitLab

[root@ci-node2 git_data]# git add 123
[root@ci-node2 git_data]# git commit -m "add 123"
[master 13225ae] add 123
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 123
[root@ci-node2 git_data]# git push  origin master 
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 221 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.
To git@10.0.0.11:oldboy/git_data.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@10.0.0.11:oldboy/git_data.git'

我们发现此时我们已经不能在 ci-node2 上向 GitLab 上推送 master 分支,因为我们ci-node2 绑定的是 dev 用户,dev 用户属于 developer 角色,master 分支不允许 developer角色向其推送内容

1.4 Gitlab的备份、恢复、升级

对 gitlab 进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的 gitlab 相同的版本。将 gitlab 迁移到另一台服务器上的佳方法就是通过备份和还原。gitlab 提供了一个简单的命令行来备份整个 gitlab,并且能灵活的满足需求

1.4.1 Gitlab的备份配置

备份文件将保存在配置文件中定义的backup_path 中,文件名TIMESTAMP_gitlab_backup.tar,TIMESTAMP 为备份时的时间戳。TIMESTAMP 的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。
默认的备份文件目录为:/var/opt/gitlab/backups,如果自定义备份目录需要赋予目录 git 权限,具体操作如下:

在配置文件/etc/gitlab/gitlab.rb 最后处加入:

gitlab_rails['backup_path'] = '/data/backup/gitlab' 
gitlab_rails['backup_keep_time'] = 604800 #备份保留的时间(以秒为单位, 这个是七天默认值)

配置完后,使用 gitlab-ctl reconfigure重新加载配置文件

1.4.2 Gitlab手动备份

使用命令gitlab-rake gitlab:backup:create进行备份
[root@ci-node1 git_data]# gitlab-rake gitlab:backup:create 
Dumping database ... 
Dumping PostgreSQL database gitlabhq_production ... [DONE]
done
Dumping repositories ...
 * root/test ... [DONE]
[SKIPPED] Wiki
 * oldboy/git_data ... [DONE]
[SKIPPED] Wiki
done
Dumping uploads ... 
done
Dumping builds ... 
done
Dumping artifacts ... 
done
Dumping pages ... 
done
Dumping lfs objects ... 
done
Dumping container registry images ... 
[DISABLED]
Creating backup archive: 1554132551_2019_04_01_11.4.14_gitlab_backup.tar ... done
Uploading backup archive to remote storage  ... skipped
Deleting tmp directories ... done
done
done
done
done
done
done
done
Deleting old backups ... done. (0 removed)
You have new mail in /var/spool/mail/root
#查看备份的文件
[root@ci-node1 git_data]# ll /data/backup/gitlab/
total 264
-rw------- 1 git git 133120 Apr  1 23:24 1554132241_2019_04_01_11.4.14_gitlab_backup.tar
-rw------- 1 git git 133120 Apr  1 23:29 1554132551_2019_04_01_11.4.14_gitlab_backup.tar

1.4.3 Gitlab定时备份

通过在定时任务里添加:
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
我们来实现定时备份,由于代码是一个企业非常重要的资产,所以我们要重视 GitLab的备份工作。至少做到每天备份一次,平时要注意检查备份的完整性。
环境变量 CRON=1 的作用是如果没有任何错误发生时, 抑制备份脚本的所有进度输

1.4.4 Gitlab恢复备份

GitLab 的恢复只能还原到与备份文件相同的gitlab 版本的系统中,恢复时,停止连接到数据库的进程(也就是停止数据写入服务),但是保持 GitLab 是运行的

停止这两个服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
然后再进行恢复
gitlab-rake gitlab:backup:restore BACKUP=1554132241_2019_04_01_11.4.14

1.4.5 Gitlab升级

首先,下载新版本的 RPM 包,可以通过官网或者清华镜像站获取。
其次关闭部分 gitlab 服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx

执行升级操作

rpm -Uvh gitlab-ce-11.4.14-ce.0.el7.x86_64.rpm
重新配置 gitlab
gitlab-ctl reconfigure
重启 gitlab 服务
gitlab-ctl restart

注:升级操作不建议进行。如果确实需要,也可以采取在一台新的服务器上安装新版本的 Gitlab,然后采用导入库的方式将旧系统的代码仓库导入到新 Gitlab 上。

免责声明:文章转载自《gitlab介绍与操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【python】获取高德地图省市区县列表rancher v2.2.4创建kubernetes集群出现[etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.git目录文件过大

最近clone一个仓库发现文件夹巨大,查看具体文件体积并不大 后来发现是.git目录占用过多空间 显示pack内容 Git 往磁盘保存对象时默认使用的格式叫松散对象 (loose object) 格式 Git 时不时地将这些对象打包至一个叫 packfile 的二进制文件以节省空间并提高效率 而git verify-pack 命令就是用于显示已打包的内容...

基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(1)

作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台tiny4412 ADK Linux-4.9   概述前面几篇博文列举了在有设备树的时候,gpio中断的用法示例。下面我们尝试分析一下Linux内核是如何做到的,如果哪写的有问题,欢迎大家批评指正,谢谢。 还是以GPIO中断为例分析,对于tiny4412,gpi...

Spring boot(4)-应用打包部署

摘自:http://blog.csdn.net/hguisu/article/details/51072683 1、Spring Boot内置web springBoot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成...

docker-compose 创建轻量级git服务——gitea

docker-compose.yml version: '2'services: web: image: gitea/gitea:1.6container_name: gitea_web hostname: gitea.trio.ai environment: - USER_UID=1000 - USER...

对于根目录磁盘满的了问题

/dev/sda3 99534436 43344344 51167220 100% / tmpfs 7125612 0 7125612 0% /dev/shm /dev/sda1 194241 99173 84828 54% /boot /dev/sdb 515930552 47483724 442232428 10% /data1 /dev/sda3 磁...

kudu安装部署

安装部署节点规划 节点 kudu-master kudu-tserver node01 是 是 node02 是 是 node03 是 是 配置本地Yum的Repository 下载kudu安装yum源。并配置安装yum源 [root@hadoop03soft]# wget http://archive.clouder...