众所周知,提供Git项目仓库托管服务的是业界有名的GitHub,可是你要将代码上传到GitHub里,并且要将项目设置为私有那就得收费。而GitLab就是为了提供免费的项目仓库托管服务而诞生(社区版免费,企业版须要订阅)。html
GitLab是利用Ruby on Rails
语言编写的 一个开源的版本管理系统
,后来一部分用Go语言重写,它能实现一个自托管的Git项目仓库
,可经过Web界面
进行访问公开
的或者私人
项目。与 Github 相似,GitLab 可以浏览源代码,管理缺陷和注释。node
能够管理团队对仓库的访问,它很是易于浏览提交过的版本并提供一个文件历史库。团队成员能够利用内置的简单聊 天程序(Wall)进行交流。 它还提供一个代码片断收集功能能够轻松实现代码复用,便于往后有须要的时候进行查 找。python
官网:https://about.gitlab.com/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/linux
GitLab提供了两种方式安装:nginx
环境规划git
主机名 | IP地址 | 说明 |
---|---|---|
git01-21 | 10.4.7.21 | Gitlab |
git02-22 | 10.4.7.22 | Gitlab同步仓库 |
操做系统:centos7.4
内存:实验环境至少 2G,生产建议 4G 以上
磁盘:至少 50G,根据生产实际仓库大小进行配置
安全:关闭防火墙、selinuxgithub
1.安装GitLab依赖包web
[root@git01-21 ~]# yum install -y curl policycoreutils openssh-server \ openssh-clients policycoreutils-python
特别是:若是不安装依赖包的话,在使用rpm安装github会报错redis
2.获取Gitlab安装包并安装sql
//1.经过wget下载gitlab rpm安装包 [root@git01-21 ~]# mkdir /opt/src && cd /opt/src [root@Git src]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm //2.下载完成后,使用rpm安装 [root@Git src]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
3.配置GitLab
Gitlab的默认配置文件路径为:/etc/gitlab/gitlab.rb
[root@git01-21 ~]# vim /etc/gitlab/gitlab.rb # 对外公开访问地址(IP/域名) external_url 'http://10.4.7.21' # 数据目录 git_data_dirs({ "default" => { "path" => "/data/gitlab/data" } })
建立数据目录
[root@git01-21 ~]# mkdir -p /data/gitlab/data
4.从新配置gitlab
// 修改完主配置文件后,使用 gitlab-ctl reconfigure 从新配置 gitlab [root@git01-21 ~]# gitlab-ctl reconfigure
需等待数分钟才能完成
GitLab 主要目录:
/data/gitlab/data/repositories # 仓库存储目录 /opt/gitlab # GitLab应用代码和相应的依赖程序 /var/opt/gitlab # gitlab-ctl reconfigure 命令编译后的应用数据和配置文件,不须要人为修改配置 /etc/gitlab # 配置文件目录 /var/log/gitlab # 此目录下存放了GitLab各个组件产生的日志 /var/opt/gitlab/backups/ # 备份文件生成的目录
每次修改了GitLab的主配置文件,都须要执行gitlab-ctl reconfigure
5.启动GitLab
// 从新配置执行成功后,就能够启动 Gitlab, [root@git01-21 ~]# gitlab-ctl start ok: run: gitaly: (pid 2919) 189s ok: run: gitlab-monitor: (pid 2935) 189s ok: run: gitlab-workhorse: (pid 2905) 190s ok: run: logrotate: (pid 2611) 221s ok: run: nginx: (pid 2591) 227s ok: run: node-exporter: (pid 2756) 213s ok: run: postgres-exporter: (pid 2966) 188s ok: run: postgresql: (pid 2355) 268s ok: run: prometheus: (pid 2952) 188s ok: run: redis: (pid 2295) 274s ok: run: redis-exporter: (pid 2788) 209s ok: run: sidekiq: (pid 2558) 235s ok: run: unicorn: (pid 2520) 237s // 查看各组件状态 [root@git01-21 ~]# gitlab-ctl status
GitLab 由主要由如下服务构成,他们共同承担了 Gitlab 的运做须要:
6.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 查看日志 sudo gitlab-ctl tail 检查 redis 的日志 sudo gitlab-ctl tail redis
1.浏览器输入:http://10.4.7.21,访问GitLab的web界面
2.首次登录须要咱们设置root用户密码(长度要求8位以上)
3.从新设置用户的密码后,便可使用root用户及刚刚设置的密码登陆GitLab
4.登陆后的页面以下,至此完成了GitLab的安装
咱们Gitlab系统是企业内部私有代码仓库,全部用户
都是由管理员建立
,并不须要注册功能
,所以咱们须要关闭此功能。
1.使用root
登陆GitLab
,点击页面最上方的Admin area
2.进入管理员区域页面
,点击页面左侧菜单栏最下方的Settings
3.进入Settings
页面后,下拉页面找到Sign-up Restrictions
选项
4.取消Sign-up enabled
选项前面的勾选后,下拉到页面的最下方,点击Save
按钮完成配置。退回到系统的登陆页面,发现已经没有用户注册功能。
GitLab 是经过组(group)的概念来统一管理仓库(project)和用户(user),经过建立组,在组下再建立仓库,再将用户加入到组,从而实现用户与仓库的权限管理。
1.在管理员页面点击页面顶部的Admin area
按钮,进入管理员区域
2.在页面右侧点击绿色的New group
按钮,进入建立组页面
3.在建立组页面中,组路径和组名称为必填项,并且此两处内容最好一致
组可见级别:
一、visibility Level:选择谁能够访问该组:咱们默认选择 private 便可,
二、Private:只有受权的用户才能够看到
三、Internal:只要是登陆 gitlab 的用户就能够看到
四、Public:只要能够访问 gitlab web 页面的人就能够看到
4.点击页面最下的create group
按钮,完成组的建立,进入组管理页面
在此页面咱们可为组添加用户。
1.在管理员页面点击页面顶部的Admin area
按钮,进入管理员区域
2.在页面右侧点击绿色的New user
按钮,进入建立用户页面
3.在建立用户页面,输入用户名昵称、用户名、电子邮件、选择用户级别
个性化设置(这里就保留为空了):
4.点击页面最下部的create user
按钮,完成用户建立,进入用户管理页面,点击页面右上页的 Edit 按钮,为用户设置初始密码
5.在Password选项中,填写设置用户的密码,点击页面最下的Save changes
按钮,完成密码设置
在此页面也可同时修改用户注册信息。
用户建立完成后,咱们就须要对用户进行受权,从而使用户能够管理仓库,有两种方式,
一般咱们采用的方式方法二
将用户加入相应的组
,并赋予不一样的角色。 GitLab 中用户的角色是系统定义好的,不能更改。这一点可能不符合咱们正常的思惟习惯。下面咱们将刚建立的Jason
用户添加到咱们的development
组,将赋予developer权限。
1.在管理员页面点击页面顶部的Admin area
按钮,进入管理员区域
2.点击用户组下面的development
组,进入组管理界面
3.选择咱们刚建立的Jason
用户,选择developer角色
,而后添加到组
注:关于每一种角色对应的权限,可参见官方文档相关内容:
https://docs.gitlab.com/ee/user/permissions.html
在GitLab中,你能够建立仓库用来存储你的程序代码、做为一个问题跟踪器、用 于代码协做、用于持续集成中的构建、测试和部署等。
1.在管理员区域点击New project
按钮,或者点击导航栏中的项
2.进入到新建 project 页面
3.默认建立的是空仓库,须要执行一些命令初始化仓库
4.咱们将sky-demo仓库
加入到development组
后,组内的成员便可以看到该仓库,咱们使用Jason
用户登陆,便可看到该仓库。
前面已经在GitLab建立了仓库,而且受权用户可使用仓库,全部的操做都是在 WEB 页面进行,下在介绍如何使用客户端来链接的GitLab仓库。
个人development
组的sky-demo
仓库是私有的,只有受权的用户才能够访问到该仓库,那么只要将客户端的用户与咱们 GitLab的用户绑定,客户端便可访问到 GitLab上的仓库,建议使用SSH方式实现客户端与 Gitlab 用户的绑定。
now,如今要实现git02-22
这个客户端可以从development
组的sky-demo
仓库拉取或者提交代码,具体配置以下:
1.在git02-22
客户端生成 ssh 密钥对(windows客户端下只能使用rsa加密方式)
// 客户端生成基于rsa加密方式的密钥 [root@git02-22 ~]# ssh-keygen -t rsa // 客户端已经生成了公钥和私钥 [root@git02-22 ~]# ll ~/.ssh/ total 8 -rw------- 1 root root 1766 Mar 7 22:59 id_rsa -rw-r--r-- 1 root root 395 Mar 7 22:59 id_rsa.pub
2.将git02-22
客户端与GitLab的Jason
用户绑定,复制git02-22
客户端的公钥,在GitLab主页面点击用户设置
3.进入到用户设置页面,点击左侧菜单栏的SSH Keys
4.进入到SSH Keys
管理页面
此处只能添加公钥
,若是添加私钥系统将报错,此外一个公钥
在整个GitLab系统中只能添加一次,可是一个GitLab用户能够添加多个公钥
。
在实际使用过程当中,咱们一般会保持master
分支稳定,用于生产环境的版本发布,只有受权的用户才能够向master
合并代码。要实现此功能,咱们须要将master
设置为保护分支,并受权什么用户能够向master
用户推送代码。
咱们的Jason
用户下面有个sky-demo
仓库,可是它是普通用户,而我又把git02-22
的key添加到Jason
用户,就会致使一个问题,GitLab上默认不容许普通用户提交代码到仓库的Master分支,因此咱们须要经过分支保护功能
给Jason
用户受权,给予能提交代码到仓库的Master分支
1.在设置分支保护以前,咱们必需要手动初始化一下sky-demo
仓库,添加一个文件。
若是仓库为空,则没法设置分支受保护
2.新增文件名README.md
,最后提交文件
3.在GitLab上设置分支保护,使用 root 用户点击demo仓库页面左下角的Settings
4.进入设置页面,选择设置菜单栏下面的Repository
选项
5.进入repository
设置页面
6.展开Protected Branches
咱们刚才在Json用户
添加了git02-22
的公钥,那么git02-22
就能访问Json用户
用户所属组下的全部仓库,咱们也建立了一个名为:sky-demo的仓库,让咱们拉取该仓库并建立文件在推送到仓库吧
1.建立/data/git_repo目录,在该目录下拉取仓库,建立文件并提交到master分支
[root@git02-22 ~]# mkdir -p /data/git_repo && cd /data/git_repo [root@git02-22 git_repo]# git clone git@10.4.7.21:development/sky-demo.git [root@git02-22 git_repo]# cd sky-demo [root@git02-22 sky-demo]# git config --global user.email "jasondev@163.com" [root@git02-22 sky-demo]# git config --global user.name "xmh" [root@git02-22 sky-demo]# echo "123" >index.html [root@git02-22 sky-demo]# git add . [root@git02-22 sky-demo]# git commit -m "first" // 将代码提交到master分支 [root@git02-22 sky-demo]# git push -u origin master Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@10.4.7.21:development/sky-demo.git 743b351..c5c4f70 master -> master Branch master set up to track remote branch master from origin.
2.登陆到GitHub界面的sky-demo
仓库,能够看到刚才提交的代码