CentOS 7/8安装并配置GitLab 13记录
概述
GitLab,基于Ruby开发的开源Git项目管理应用,其提供的功能和Github类似。GitLab提供一个CE社区版本,用户可以将其部署在自己的内网服务器上,可用于团队内部的项目代码托管仓库。
本文记录搭建内网GitLab Server的过程和遇到的问题。
注:CentOS 7/8安装Git:yum install git
安装
首先下载rpm源安装包,一定要先确定清楚自己的CentOS是什么版本,查看版本号:
cat /etc/redhat-release
输出:CentOS Linux release 8.3.2011
如果是CentOS 7,则对应el7:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.0.0-ce.0.el7.x86_64.rpm
本文基于CentOS 8系统,打开上述URL切换到el8路径下,随机选一个版本下载,本文没有选择最新版本:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/gitlab-ce-13.0.0-ce.0.el8.x86_64.rpm
CentOS 8系统,直接安装:rpm -i
CentOS 7系统,需要指定已经下载到本地的rpm包:rpm -i gitlab-ce-13.0.0-ce.0.el7.x86_64.rpm
编辑配置文件:vim /etc/gitlab/gitlab.rb
查看模式,输入/external_url
回车查找,按n继续向下找(N则向上查找),找到external_url 'http://gitlab.com'
并修改为:external_url 'http://192.168.20.111:8090'
注意每次修改该配置文件后,都需要执行:
gitlab-ctl reconfigure
gitlab-ctl restart
浏览器地址栏输入上面配置的external_url,如果打不开,则关闭防火墙:systemctl stop firewalld
默认的用户名是root,根据系统指引修改密码。
至此,安装成功。
操作
实战
新建组别Group
root用户,可以添加Group:
设置Group的可见性等级:
三个等级介绍:
- Private,私有
- Internal,内部
- Public,公有
新建工程project
在新建Project之前,最好先创建Group,否则默认会创建中root用户下面:
最后得到的是:
git clone
的地址还是:http://192.111.11.111:8090/root/test.git
新增用户
退出root用户,然后注册用户,如johnny,设置密码johnny233,邮箱可随便填写,可以成功登录系统。
邀请用户
Ctrl + Shift + N快捷键打开Chrome的隐身模式,新开页面,以root用户登录,进入刚才添加的group,然后可以邀请用户,并设置用户的角色和权限。
以组别Group维度来邀请用户:
以工程项目维度来邀请用户:
有四种role permission:
- Guest,
- Reporter
- Developer
- Maintainer,
Git clone/push
打开命令行生成SSH key,
添加ED25519 SSHkey:
ssh-keygen -t ed25519 -C “”
添加SSH key:
ssh-keygen -t rsa -b 2048 -C "user@email"
将生成的pub文件的内容配置到SSH key里面,即可push代码,
然后 git clone 项目时,使用 http 协议,输入注册的用户名/密码,
初始化本地项目推到远程服务器
进入到本地项目文件夹,右键选择Git Bash Here
,初始化git init
为一个Git仓库,先添加.gitignore
文件,然后添加所有文件git add .
,查看状态git status .
,提交git commit -m "init"
,
在远程服务器端新建一个工程,点击Git clone得到其地址。
设置远程仓库地址:
git remote add origin http://192.111.11.111:8090/root/local-test.git
查看状态:
git remote -v
获取远程库与本地同步合并:
git pull --rebase origin master
输入U/P
git push -u origin master
.gitignore
不生效
细心的开发者,在上面的git status .
步骤执行时,可能会看到明明已经在项目的根目录下新增配置文件.gitignore
,且有target/
配置项,但是却输出:
new file target\classes\add.sql
说明.gitignore
未生效,可是这个target
配置项显然是没有问题的。
原因:
.gitignore
只能忽略原来没有被跟踪的文件,因此跟踪过的文件是无法被忽略的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
输出:
error: the following file has staged content different from both the
file and the HEAD:
.gitignore
(use -f to force removal)
再次执行:
git rm -r -f --cached .
然后重新添加文件git add .
,并执行git status .
,输出正常,即target目录下面的class文件并不会被加入暂存区。
注意在.gitignore
配置文件中,target/
与*/target/
是有区别的。
问题
johnny用户git push
报错:
remote: GitLab: You are not allowed to push code to protected branches on this project.
To http://192.111.11.111:8090/root/test.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'http://192.111.11.111:8090/root/test.git'
因为johnny这个用户的change permission是developer,对于master分支是默认没有push权限,升级到maintainer,即可push到远程的master分支。