Git远程仓库☞GitLab的使用

一.GitLab基本介绍

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

 常用的网站:https://about.gitlab.com/

 国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

二.安装部署

 1.安装环境准备:

  操作系统:centos6/7
  内存:实验环境至少 2G,生产建议 4G 以上
  磁盘:至少 50G,根据生产实际仓库大小进行配置
  安全:关闭防火墙、selinux

 2.安装依赖:yum install curl policycoreutils openssh-server openssh-clients policycoreutils-python -y

  下载安装包:wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.6-ce.0.el7.x86_64.rpm

  

  下载完毕直接rpm 安装即可:rpm  -ivh   XXX.rpm

 3.配置GitLab

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

  

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

 4.启动Gitlab

  gitlab-ctl restart

  

  在浏览器地址输入Ip出现页面首次登陆我们需要重新设置root用户密码,设置完毕登陆即可

  

  登陆界面如上就完成了安装。

三.Gitlab服务构成

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

  Nginx:静态 web 服务器。
  gitlab-shell:用于处理 Git 命令和修改 authorized keys 列表。
  gitlab-workhorse: 轻量级的反向代理服务器。
  logrotate:日志文件管理工具。
  postgresql:数据库。
  redis:缓存数据库。
  sidekiq:用于在后台执行队列任务(异步执行)。
  unicorn:An HTTP server for Rack applications,GitLab Rails 应用是托管在这个服务器上面的。

  我们可以使用 gitlab-ctl status 命令来查看各服务的状态:

  

四.Gitlab工作流程

 1.工作流程图:

  

  GitLab Shell
  GitLab Shell 有两个作用:为 GitLab 处理 Git 命令、修改 authorized keys 列表。
  当通过 SSH 访问 GitLab Server 时,GitLab Shell 会:
  限制执行预定义好的 Git 命令(git push, git pull, git annex)
  调用 GitLab Rails API 检查权限
  执行 pre-receive 钩子(在 GitLab 企业版中叫做 Git 钩子)
  执行你请求的动作 处理 GitLab 的 post-receive 动作
  处理自定义的 post-receive 动作
  当通过 http(s)访问 GitLab Server 时,工作流程取决于你是从 Git 仓库拉取(pull)代码还是向 git 仓库推送(push)代码。
  如果你是从 Git 仓库拉取(pull)代码,GitLab Rails 应用会全权负责处理用户鉴权和执行 Git 命令的工作;
  如果你是向 Git 仓库推送(push)代码,GitLab Rails 应用既不会进行用户鉴权也不会
  执行 Git 命令,它会把以下工作交由 GitLab Shell 进行处理:
  调用 GitLab Rails API 检查权限
  执行 pre-receive 钩子(在 GitLab 企业版中叫做 Git 钩子)
  执行你请求的动作
  处理 GitLab 的 post-receive 动作
  处理自定义的 post-receive 动作

  GitLab Workhorse
  GitLab Workhorse 是一个敏捷的反向代理。它会处理一些大的 HTTP 请求,比如文件上传、文件下载、Git push/pull 和 Git 包下载。其它请求会反向代理到 GitLab Rails 应用,
  即反向代理给后端的 unicorn。

五.GitLab常用命令:

  # 启动所有 gitlab 组件:gitlab-ctl start

  # 停止所有 gitlab 组件:gitlab-ctl stop
  # 停止 postgresql 组件:gitlab-ctl stop postgresql
  # 停止相关数据连接服务:gitlab-ctl stop unicorn  gitlab-ctl stop sidekiq
  # 重启所有 gitlab 组件:gitlab-ctl restart
  # 重启 gitlab-workhorse 组件:gitlab-ctl restart gitlab-workhorse
  # 查看服务状态:gitlab-ctl status
  # 如果更改了主配置文件 [gitlab.rb 文件],使配置文件生效 但是会初始化除了gitlab.rb 之外的所有文件:sudo gitlab-ctl reconfigure
  # 查看日志:sudo gitlab-ctl tail
  # 检查 redis 的日志:sudo gitlab-ctl tail redis

六.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/:备份文件生成的目录  

七.GitLab关闭用户注册:

  由于 Gitlab 系统是企业内部私有代码仓库,所有用户都是由管理员创建,并不需要注册功能,因此我们需要关闭此功能:
  

  去掉此选项保存即可。再次登录就没有注册功能啦

八.Gitlab仓库管理

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

  在管理员页面点击页面顶部的 Admin area 按钮,进入管理员区域

  

  然后点击new Group进行创建:

  

  注:visibility Level:选择谁可以访问该组:我们默认选择 private 即可,
  Private:只有授权的用户才可以看到
  Internal:只要是登录 gitlab 的用户就可以看到
  Public:只要可以访问 gitlab web 页面的人就可以看到
  点击页面最下的 create group 按钮,完成组的创建,进入组管理页面,再页面我们可以为组添加用户

 2.创建用户create user

  在管理员页面点击页面顶部的 Admin area 按钮,进入管理员区域

  

  然后点击new user进行创建:

  

  点击页面最下部的 create user 按钮,完成用户创建,进入用户管理页面

  点击右上角的Edit按钮为用户设置初试密码:

  

  

  在此页面可同时修改用户注册信息。修改完毕点击save changes按钮。

 3.用户授权(grant  user)

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

  

  点击进入组内,进入组管理界面:

  

  之后就添加用户至组内了。

 4.创建仓库(create  project) 

  在 GitLab 中,你可以创建 project 用来存储你的程序代码、作为一个问题跟踪器、用于代码协作、用于持续集成中的构建、测试和部署等。

  在管理员区域点击 New project 按钮,或者点击导航栏中的 选择 New project 选项,

  

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

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

  

 5.配置SSH KEY

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

  

  一路回车即可。然后将公钥复制至gitlab下:

  

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

 6.推送本地客户端仓库到GitLab

  首先我们需要绑定远程仓库:

  

  其次,使用 git push 命令直接推送本地仓库的 master 分支到远程仓库

  

  提示推送功能,我们在 GitLab 上的 git_test 仓库就可以看到我们推送上来的内容

 7.克隆Gitlab仓库到本地客户端

  首先我们需要配置node2客户端与Gitlab 的dev 用户绑定(dev用户登录配置sshkey即可)

  然后使用 git clone 命令克隆仓库到 node2 本地

  

  本地已经克隆成功。

  

  可以看到已经将 GitLab 上的 git_data 仓库克隆到了 node2 本地,同时为本地仓库添加了一个指向 GitLab 上 git_data 仓库的远程仓库。

  在node2上创建一个dev分支,并将dev分支推送到gitlab上

  

  完成后,我们在 GitLab 上可以看到我们刚推上来的 dev 分支

  8.设置保护分支

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

  

  点击Repository 选项, 进入 repository 设置页面:

  

  选择master为保护分支即可。

  

  再次尝试在node2上推送master分支到gitlab:

  

  可以看到推送失败。因为我们node2 绑定的是 dev 用户,dev 用户属于 developer 角色,master 分支不允许 developer角色向其推送内容。

九.gitlab备份恢复升级

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

 1.备份配置

  备 份 文 件 将 保 存 在 配 置 文 件 中 定 义 的 backup_path 中 , 文 件 名 为TIMESTAMP_gitlab_backup.tar,TIMESTAMP 为备份时的时间戳。 TIMESTAMP 的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。
  默认的备份文件目录为:/var/opt/gitlab/backups,如果自定义备份目录需要赋予目录 git 权限,具体操作如下:
  配置文件中加入
  gitlab_rails['backup_path'] = '/data/backup/gitlab'
  gitlab_rails['backup_keep_time'] = 604800 #备份保留的时间(以秒为单位,这个是七天默认值),
  在命令行执行如下命令
  [root@node1 git_test] # mkdir /data/backup/gitlab -p
  [root@node1 git_test] # chown -R git.git /data/backup/gitlab
  [root@node1 git_test] # gitlab-ctl reconfigure

 2.手动备份:

  在命令行执行:gitlab-rake gitlab:backup:create 生成一次备份

 3.定时备份:

  通过在定时任务里添加:
  0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
  我们来实现定时备份,由于代码是一个企业非常重要的资产,所以我们要重视 GitLab的备份工作。至少做到每天备份一次,平时要注意检查备份的完整性

 4.恢复实践:

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

  gitlab-ctl stop unicorn

  gitlab-ctl stop sidekiq

  gitlab-ctl status

  接下来执行 gitlab 恢复操作: [root@node1 git_test]# gitlab-rake gitlab:backup:restore BACKUP=1533288168_2018_08_03_10.2.2  

  整个恢复执行过程中,我们可以看到基本是在删除表,创建表

 5.升级

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

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

     执行升级操作 rpm -Uvh gitlab-ce-10.0.4-ce.0.el7.x86_64.rpm

  重新配置 gitlab    重启 gitlab 服务

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


 

posted @ 2019-03-20 18:02  淋汐去水  阅读(583)  评论(0编辑  收藏  举报