[toc]
设置gitlab分支保护
第一步、新建组、项目、用户
gitlab中以root用户新建一个组,名称任意;一个项目,名称任意;新建测试用户,名称任意
这里新建组 test ,新建项目 test,新建用户 xiaoming 并设置密码
第二步、配置公钥及权限
选择另外一台机器,做为测试机,使用如下命令生成密钥对,这里把测试用户 xiaoming 的公钥添加gitlab账户中
#生成密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q
#注册密钥
cat .ssh/id_rsa.pub >> ~/.ssh/authorized_keys
添加测试机 root 用户的公钥到 xiaoming 用户中
gitlab root用户端把测试用户 xiaoming 添加到测试项目中并设置权限为 Developer
第三步、测试机克隆gitlab端创建的项目并创建文件提交至master分支
测试机克隆项目
⚠️这里自定义了一个域名
⚠️如果gitlab是docker启动的,并且把宿主机的任意ssh端口映射到docker容器中,则在克隆的时候需要注意修改克隆远程仓库的地址形式
错误地址:git remote add origin git@10.0.0.13:222/root/jenkins-test1.git
正确地址: git remote add origin ssh://git@10.0.0.13:222/root/jenkins-test.git
git clone ssh://git@gitlab.my.com:222/test/test.git
测试机创建文件并推送代码
#配置用户、邮箱信息
$ git config --local user.name 'xiaoming'
$ git config --local user.email 'xiaoming@163.com'
$ touch branch-test
$ git add .
$ git commit -m 'touch branch-test'
[master (root-commit) 2583ff0] touch branch-test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 branch-test
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git@gitlab.my.com:222/test/test.git
* [new branch] master -> master
上述操作可以看到,普通用户 xiaoming 是可以直接推送代码到 master 分支的,接下来做分支保护,只允许项目的master的能推送到master分支
第四步、gitlab配置分支保护
进入项目, Settings
--> Repository
Protected Branches
--> Expand
Branch:你要保护的分支(master或者dev)
Allowed to merge:谁有权限去跟这个分支合并
Allowed to push:允许往分支上去推送
设置完成后点击 Protect
测试机再次推送,可以看到会提示不被允许
$ git add .
$ git commit -m 'master分支保护测试'
[master ab7374e] master分支保护测试
1 file changed, 1 insertion(+)
$ git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 310 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.
To ssh://git@gitlab.my.com:222/test/test.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@gitlab.my.com:222/test/test.git'
非master用户提交合并请求
xiaoming 用户无法推送代码到 master 分支,因为有 master 分支保护
点击 Merge requests
发起合并代码请求
点击 New merge request in test
选择源分支和合并分支
填写标题、描述、提交信息
提交完成
登陆到root用户查看合并请求
选择 Merge
合并完后就可以看到合并后的代码了