Gitlab 开始入门
1. 前提
jenkins插件地址: http://updates.jenkins-ci.org/download/plugins/
- 192.168.211.90 gitlab、jenkins、Maven
- 192.168.211.91 git、httpd
- 192.168.211.92 nexus、sonarqube、docker-ce
192.168.211.93 这个是单独的环境,用于测试jenkins和docker的
关闭防火墙
# systemctl disable firewalld.service
关闭NetworkManager
# systemctl stop NetworkManager
关闭selinux
# cat /etc/selinux/config
SELINUX=disabled
安装常用命令
# yum install -y net-tools lrzsz tree screen lsof wget ntpdate
设置时间
# crontab -e 添加
# crontab -l
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com
更改时区
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2. 安装gitlab
1.1 gitlab的安装192.168.211.90
GitHub 和 GitLab 都是基于 web 的 Git 仓库
安装依赖:
# yum install curl policycoreutils openssh-server openssh-clients policycoreutils-python -y
下载rpm包
# cd /usr/local/src/
#wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.1-ce.0.el7.x86_64.rpm
# rpm -ivh gitlab-ce-11.9.1-ce.0.el7.x86_64.rpm
3. 配置gitlab
gitlab的默认配置文件位于:vim /etc/gitlab/gitlab.rb
,修改external_url
为本机的IP地址或者一个可以访问到本机的域名
external_url 'http://192.168.211.90'
修改完主配置文件后,使用gitlab-ctl reconfigure
重新配置加载gitlab
4. 启动gitlab
重新配置执行成功后,就可以重新启动gitlab
# gitlab-ctl restart
ok: run: alertmanager: (pid 5060) 1s
ok: run: gitaly: (pid 5078) 0s
ok: run: gitlab-monitor: (pid 5091) 1s
ok: run: gitlab-workhorse: (pid 5114) 0s
ok: run: logrotate: (pid 5125) 0s
ok: run: nginx: (pid 5132) 1s
ok: run: node-exporter: (pid 5216) 0s
ok: run: postgres-exporter: (pid 5227) 1s
ok: run: postgresql: (pid 5238) 0s
ok: run: prometheus: (pid 5246) 1s
ok: run: redis: (pid 5260) 0s
ok: run: redis-exporter: (pid 5430) 0s
ok: run: sidekiq: (pid 5439) 0s
ok: run: unicorn: (pid 5451) 0s
在浏览器里输入:http://192.168.211.90/
,首次登陆要求重设root密码
更改密码成功后
登陆即可
5. GitLab构成
gitlab由以下服务构成,他们共同承担了gitlab的运作需要
Nginx
:静态的web服务器gitlab-shell
:用于处理git命令和修改authorized keys列表gitlab-workhorse
:轻量级的反向代理服务器logrotate
:日志文件管理工具postgresql
:数据库redis
:缓存数据库sidekiq
:用于在后台执行队列任务(异步执行)unicorn
:An HTTP server for Rack application,gitlabrails
应用是托管在这个服务器上面的
可以使用命令来查看各个服务的状态
# gitlab-ctl status
run: alertmanager: (pid 5060) 53429s; run: log: (pid 4308) 53665s
run: gitaly: (pid 5078) 53428s; run: log: (pid 3570) 53739s
run: gitlab-monitor: (pid 5091) 53428s; run: log: (pid 4171) 53683s
run: gitlab-workhorse: (pid 5114) 53427s; run: log: (pid 3939) 53700s
run: logrotate: (pid 5125) 53427s; run: log: (pid 4017) 53693s
run: nginx: (pid 5132) 53427s; run: log: (pid 3967) 53699s
run: node-exporter: (pid 5216) 53427s; run: log: (pid 4130) 53688s
run: postgres-exporter: (pid 5227) 53427s; run: log: (pid 4356) 53660s
run: postgresql: (pid 5238) 53426s; run: log: (pid 3660) 53735s
run: prometheus: (pid 5246) 53426s; run: log: (pid 4242) 53672s
run: redis: (pid 5260) 53425s; run: log: (pid 3387) 53746s
run: redis-exporter: (pid 5430) 53425s; run: log: (pid 4210) 53678s
run: sidekiq: (pid 5439) 53424s; run: log: (pid 3906) 53705s
run: unicorn: (pid 5451) 53423s; run: log: (pid 3875) 53709s
5.1 gitlab shell
Gitlab Shell有两个作用:为Gitlab处理git命令、修改authorized keys列表。
当通过ssh访问gitlab server
时,gitlab shell会:
- 调用
gitlab rails api
检查权限 - 执行
pre-receive
钩子(在gitlab企业版中叫做git钩子) - 执行你请求的动作 处理gitlab的
post-receive
动作 - 处理自定义的
post-receive
动作
当通过http\https
访问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
动作
5.2 gitlab workhorse
gitlab workhorse
是一个敏捷的反向代理,它会处理一些大的http请求,比如文件的上传、文件的下载、git push/pull
和git包下载。其它的请求会反向代理到gitlab rails
应用,即反向代理给后端的unicorn
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
如果更改了配置文件[gitlab.rb 文件],使配置文件生效,但是会初始化除了gitlab.rb之外的所有文件
# sudo gitlab-ctl reconfigure
查看日志
# sudo gitlab-ctl tail
检查redis的日志
# sudo gitlab-ctl tail redis
7. gitlab主要目录
/var/opt/gitlab/git-data/repositories/
:库默认存储的目录/opt/gitlab/
: 应用代码和相应的依赖程序存放目录/var/opt/gitlab
: gitlab-ctl reconfigure命令编译后的应用数据和配置文件,不需要人为修改配置/etc/gitlab
: 配置文件目录/var/log/gitlab/
: 此目录下存放了各个组件产生的日志/var/opt/gitlab/backups/
: 备份文件生成的目录
gitlab关闭用户注册功能 登录web界面后 点击上方导航栏的Admin Area 点击左边的设置setting
找到Sign-up restrictions
配置区域,点击扩展
去掉Sign-up enabled
前面的√
最后点击save保存按钮
8. gitlab 仓库管理
gitlab是通过组(group)的概念来统一管理仓库(project)和用户(user),通过创建组、 在组下再创建仓库、再将用户加入到组,从而实现用户与仓库的权限管理
- 创建组
create group
- 在管理员页面顶部的
Admin area
按钮,进入管理员区域 - 点击
new group
按钮
填写必要的信息
组名、组路径、组描述
组可见级别
Visibility level
:选择谁可以访问该组、我们默认选择private即可Private
:The group and its projects can only be viewed by members. 只有授权的用户才可以看到Internal
:The group and any internal projects can be viewed by any logged in user. 只要是登录gitlab的用户都可以看到Public
:The group and any public projects can be viewed without any authentication. 只要是可以访问gitlab web页面的人都可以看到
信息填完、点击创建组
进入创建好的组管理界面
可以再找个界面下创建组用户的