Gitlab部署与使用
# Gitlab介绍
# Gitlab简介
- Gitlab是一个基于Git实现的Web代码仓库托管软件,我们可以使用Gitlab来搭建一个类似于Github的私有代码仓库。
- 一般使用Gitlab搭建私有代码仓库主要是用在公司的内部代码管理,它还可以实现完整的CI/CD流程。
- Gitlab的原理其实就是git的工作原理,GitHub也是基于git实现的。
# Gitlab的服务构成
Nginx
- 静态Web服务器gitlab-shell
- 用于处理Git命令和修改authorized keys列表gitlab-workhorse
- 轻量级的反向代理服务器- 它会处理一些大的HTTP请求,比如文件的上传下载,而其他的请求会反向代理给Gitlab Rails应用。
logrotate
- 日志文件管理工具,实现日志切割postgresql
- 数据库redis
- 缓存数据库sidekiq
- 用于在后台执行队列的任务unicorn
- Gitlab Rails应用是托管在这个服务器上面的
# Gitlab部署
# 1. 安准依赖
yum install -y openssh-server policycoreutils-python3 perl
# 2. 启动Postfix邮箱服务
- GitLab发送邮件时需要用到该邮箱服务器,如果不需要邮箱改密之类的功能可以忽视。
yum install -y postfix
systemctl enable postfix && systemctl start postfix
2
# 3. 安装Gitlab
- 方式一
# 添加Gitlab社区版源
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# 安装Gitlab社区版
yum install -y gitlab-ce
2
3
4
- 方式二
# 下载Gitlab社区版RPM包
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
# 安装Gitlab社区版RPM包
rpm -i gitlab-ce-*.rpm --nodeps
2
3
4
# 4. 配置Gitlab站点Url
- 会使用Gitlab自带的Nginx服务,开启指定端口以供访问Web页面。
- 不指定端口则默认使用80端口,需要注意不要端口冲突。
vim /etc/gitlab/gitlab.rb
# 修改下面参数为指定域名或IP或IP:端口即可
external_url 'http://192.168.10.11:9500'
2
3
4
# 5. 修改puma默认端口
- 由于默认是8080,可能会和Tomcat的默认端口冲突,所以建议修改。
vim /etc/gitlab/gitlab.rb
# 修改下面参数
puma['port'] = 8000
2
3
4
# 6. 重新配置并启动Gitlab
# 重载配置
gitlab-ctl reconfigure
# 检查状态
gitlab-ctl status
2
3
4
# 7. 访问站点
- 站点路径:
http://192.168.10.11:9500
- 查看root用户默认密码:
cat /etc/gitlab/initial_root_password
# Gitlab管理命令
gitlab-ctl start
- 启动命令gitlab-ctl stop
- 关闭命令gitlab-ctl restart
- 重启命令gitlab-ctl reconfigure
- 重载配置命令gitlab-ctl status
- 查看组件状态命令gitlab-ctl tail [组件名]
- 查看组件日志命令- 例如:gitlab-ctl tail nginx
# Gitlab配置
# 邮箱服务器配置
vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "你的邮箱" gitlab_rails['smtp_password'] = "你的邮箱密码" gitlab_rails['smtp_domain'] = "exmail.qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = '你的邮箱'
1
2
3
4
5
6
7
8
9
10
# 配置代码位置
vim /etc/gitlab/gitlab.rb
# 找到git_data_dirs并配置地址 git_data_dirs({ "default" => { "path" => "/data/apps/gitlab/data" } })
1
2
3
4
5
6
7
# 配置Gitlab备份
vim /etc/gitlab/gitlab.rb
# 设置备份文件的保存位置 gitlab_rails['backup_path'] = "/data/apps/gitlab/backup" # 设置备份文件的过期时间,单位为秒,默认7天 gitlab_rails['backup_keep_time'] = 604800
1
2
3
4
5gitlab-rake gitlab:backup:create
- 验证是否配置成功- 执行备份命令后,可以去对应的文件路径查看是否已经创建了备份文件。
- 红色字体描述为敏感文件需要手动备份。
# 设置Web页面中文显示
- 单击右上角用户头像 -> Preferences -> Language -> 修改为中文后保存刷新页面即可
# 关闭注册功能
- 使用root用户登录Gitlab后,会有管理员设置。
- 设置 -> 通用 -> 注册限制-> 取消勾选"已启用注册功能" -> 保存更改。
# Gitlab使用
# 创建用户
我们想要让其他人使用Gitlab,首先需要给用户创建一个普通账号。
登入root用户 -> 进入管理中心页面 -> 概览 -> 用户 -> 新用户。
为了防止权限配置不当造成代码泄露等问题,一般会由管理员创建群组和项目,所以不需要给用户创建群组和项目的权限,并且只给普通用户权限。
- 此处的Projects limit只会限制个人项目创建。而不会限制群组下的项目创建权限,如果需要限制群组的项目创建权限,则需要在群组设置中修改配置。
- 但一般不需要限制群组下的项目创建权限,因为即便群组下开发者权限的用户创建了一个项目,该项目也只能由群组的维护者或所有者来进行成员管理或其他的管理操作。
创建好之后点编辑,进行初始密码的设定。
自此用户就可以用设定的密码登录了,用户第一次登录会提示修改密码。
# 创建组
想要拉取或推送项目,就需要在Gitlab上创建一个项目。而Group则是用来给项目分类的,Group和Projects的关系,就好比一个业务下的一个个小的项目。
登录有创建组权限的用户 -> 群组 -> 新建群组。
创建群组后,群组下还可以新建子群组和项目。
# 群组添加成员
需要注意的是群组下添加成员,成员的权限会涉及群组下的所有项目。
- 登录群组拥有者账号 -> 首页 -> 群组 -> 进入指定的群组。
- 群组信息 -> 成员 -> 邀请成员。
我们选择对应的成员、成员角色权限后进行邀请即可
Guest
- 【访客】可以创建issue、发表评论,不能读写版本库Reporter
- 【报告者】 QA质量保证工程师、PM项目经理等使用,可以克隆代码,不能提交Developer
- 【开发者】 RD研发工程师使用,可以克隆代码、开发、提交、pushMaster
- 【主人】核心RD负责人使用,负责对Master分支进行维护,可以创建项目、添加tag、保护分支、添加项目成员、编辑项目Owner
- 【拥有者】 开发部门领导使用,设置项目可见度、删除项目、迁移项目、管理组成员
- 邀请完后,对应成员就能看到对应项目了。
# 创建项目
- 需要使用有项目创建权限的账号进行创建,然后在主页或者群组页面点击新建项目。
# 项目添加成员
项目下添加成员,成员的权限只会涉及该项目,即便是授权给群组成员外的成员,该成员也无法看到该群组下的其他没有权限的项目。另外项目中的成员角色设置,优先于群组中的成员角色设置。
- 项目页面 -> 项目信息 -> 成员 -> 邀请成员。
- 我们选择对应的成员、成员角色权限后进行邀请即可。
- 添加后对应成员就能看到对应的项目了。
# Gitlab推送&拉取项目
# 1. 创建SSH密钥对
# CMD执行
ssh-keygen -o -t rsa -b 4096 -C "任意邮箱地址" -f C:\Users\%USERNAME%\.ssh\gitlab_id_rsa
2
# 2. Gitlab配置SSH公钥
- 打开刚刚生成的公钥,复制其中的内容,公钥路径
C:\Users\%USERNAME%\.ssh\gitlab_id_rsa_pub
- 打开Gitlab页面 -> 右上角头像 -> 编辑个人资料 -> SSH密钥 -> 输入复制的公钥到密钥框。
- 然后配一下到期时间之类的,单击添加密钥即可。
# 3. 创建SSH配置文件
在连接对应主机时,会使用对应的密钥。
./ssh下创建名为
config
的文件。配置格式内容如下:
Host [主机别名] 参数名 值 ... ...
1
2
3# 参数:
Host
- 指定主机别名,只要是合法的变量名称且不重复即可,可任意指定,ssh命令通过该名称来连接到指定服务器Hostname
- 服务器地址,可以是域名,也可以是ip地址Port
- 端口号,默认为22,只有修改了SSH连接的默认端口才需要配置此参数User
- SSH的登陆用户名,指定为Gitlab用户名Preferredauthentications
- 指定客户端身份验证方法的顺序,此选项的默认值是:"gssapi-with-mic, hostbased, publickey, keyboard-interactive, password"IdentityFile
- 指定连接使用的私钥文件
例如:
Host github Preferredauthentications publickey IdentityFile ~/.ssh/id_rsa Host gitlab Hostname 192.168.10.11 User lisi Preferredauthentications publickey IdentityFile ~/.ssh/gitlab_id_rsa
1
2
3
4
5
6
7
8
9
# 4. 测试密钥连接
ssh -T git@gitlab
# 5. 克隆仓库
# 创建仓库目录
mkdir C:\Users\%USERNAME%\Desktop\git_test_dir
# 切换到仓库目录
cd C:\Users\%USERNAME%\Desktop\git_test_dir
# 配置提交时的信息
git config --global user.name "任意名称"
git config --global user.email "任意邮箱地址"
# 克隆代码仓库
git clone git@gitlab:short-message/receiver.git
# 切换到本地仓库工作区
cd receiver
2
3
4
5
6
7
8
9
10
11
12
13
# 6. 创建分支并推送到Gitlab
# 创建分支
git switch -c master
# 创建一个文件
echo “First File” > README.md
# 文件添加到暂存区
git add README.md
# 提交一次版本
git commit -m "add README"
# 推送到Gitlab
git push -u origin master
2
3
4
5
6
7
8
9
10
# 7. 拉取仓库最新代码
- 使用
git pull
命令拉取当前分支最新代码即可。