gitolite的部署

gitolite服务部署:


1,在git服务器端安装git并创建git用户。

yum install -y git

useradd git

 


2,生成gitolite的管理账户,这个账户也可以在git服务器端生成,也可以在自己的客户端生成。(为了防止人员离职,导致管理员丢失,建议在git服务器端生成。我这里是在git服务器端生成管理员用户的)


su - git

ssh-keygen

cp /home/git/.ssh/id_rsa.pub /tmp/admin.pub

多次回车,生成秘钥对,找到~/.ssh/id.rsa.pub 上传到git服务器的/tmp上,并命名为admin.pub

 

 


3,切换到git用户,并确保~/.ssh/authorized_keys文件为空或者不存在

rm -f ~/.ssh/authorized_keys

 

 

4,安装gitolite


git clone git://github.com/sitaramc/gitolite #下载gitolite软件

mkdir -p $HOME/bin #创建存放gitolite相关命令的目录

gitolite/install -to $HOME/bin #安装gitolite,如果执行这个报错,请先执行 yum install -y perl-Time-HiRes。

echo "PATH=$PATH:$HOME/bin" >> .bashrc #将gitolite命令加入环境变量中,建议退出终端,重新进入。


gitolite setup -pk /tmp/admin.pub #将客户端的用户配置为git的管理员,其实就是将admin.pub的公钥添加到authorized_keys里面去了。

 


5,查看~/.ssh/authorized_keys 里面是否已经有添加进去的公钥

cat ~/.ssh/authorized_keys

另外,安装完成后,我们可以在$HOME下看到一个repositories目录,里面有两个仓库,分别为gitolite-admin和testing,其中gitolite-admin为管理仓库。

 

6,克隆gitolite-admin仓库

cd /tmp

git clone git@127.0.0.1:gitolite-admin


进入gitolite-admin仓库,会看到两个目录,分别为keydir和conf,其中keydir目录用来管理用户,在其中可以看到默认有一个文件叫做admin.pub,正是我们之前生成的管理用户的公钥文件.

查看conf里面的配置文件:

[git@iz2ze0n2ws2p2jpw1i9fd4z conf]$ cat gitolite.conf 
repo gitolite-admin
    RW+     =   admin 

repo testing
    RW+     =   @all

 

可以简单的发现 repo 定义仓库名

RW+ 表示权限 可读可写可强制更新

admin 表示admin用户,即admin用户可以对gitolite-admin这个仓库有可读可写可强制更新权限。

 

7,添加用户

添加用户其实蛮简单,只要在管理员克隆下来的gitolite-admin中,将用户添加到conf/gitolite.conf中,并将要添加用户的pub文件放入keydir中即可,然后push到git服务器中即可。

我这里添加一个xiaobai用户,并设置为管理员。

首先在原来的admin用户下克隆代码(上面已经克隆了):

cd /tmp/gitolite-admin

vim /conf/gitolite.conf

 

上传xiaobai用户的公钥到keydir中

 

 执行git相关命令,将变化的内容推送到git服务器上。

git add .

git commit -m 'add xiaobai user to admin'

git push 

  

 切换到小白账户,测试创建用户是否成功,克隆代码 

git clone git@git服务器地址:gitolite-admin 

 

如下

 

 

 

8,添加仓库,主要是更改gitolite.conf文件,定义1个repo即可。

 

 

 

 

9,权限说明

常用的配置:

1,定义组

@admin=xiaobai  xiaoa  #定义一个admin组,组员有xiaobai,xiaoa



2,定义一个仓库

repo spider



3,@all 所有用户

repo spider

RW = @all  #表示所有用户对spider仓库有读写权限

 

具体的可以参考如下:

1 @admin = breezey chenliang
2 repo gitolite-admin
3 RW+ = breezey
4 repo ossxp/.+
5 C = @admin
6 RW = @all
7 repo testing
8 RW+ = @admin
9 RW master = junio
10 RW+ pu = junio
11 RW cogito$ = pasky
12 RW bw/ = linus
13 - = somebody
14 RW tmp/ = @all
15 RW refs/tags/v[0-9] = junio
我们先对该示例文件作一个简单的说明,以方便大家对授权文件有一个基本的了解:
第1行定义了一个admin的组,该组里包含两个用户,分别是breezey chenliang
第2-3行定义了一个版本库gitolite-admin,并且指定breezey用户对gitolite-admin仓库拥有读(R),写(W)和强制更新(+)的权限
第4行通过正则表达式定义了一组版本库,即ossxp目录下的所有版本库
第5行定义admin组的用户可以在ossxp目录下创建版本库
第6行定义所有用户对ossxp目录下的版本库拥有读写的权限,但不能强制更新
第7行定义了一个版本库testing
第8行定义了admin组用户对testing库的所有分支和tag拥有读、写、重置、添加、删除的权限
第9行定义junio用户对master分支有读写的权限,还包括以master开头的所有分支。
第10行定义junio用户对pu分支拥有读写,重置,添加,删除的权限,还包括以pu开头的所有分支
第11行定义pasky用户对cogito分支拥有读写的权限,仅此分支,精确匹配
第12行定义linus用户对bw/拥有读写的权限
第13行定义somebody用户对testing仓库有写的权限
第14行定义所有用户对tmp/拥有读写的权限
第15行定义junio可以读写任意tag,包括以v加上数字开头的tag


组的定义:
@admin = breezey chenliang
@user = @admin @staff user1
版本库的定义:
repo ossxp/.+ #匹配ossxp目录下的所有版本库
repo myrepo.$ #匹配以myrepo.结尾的版本库
repo sandbox/test1 #创建sandbox下的test1库
授权关键字:
C:
C代表创建。仅在符版本库授权时可以使用。用于指定谁可以创建与通配符匹配的版本库。
R,RW,RW+:
R为只读,RW为读写,RW+为读写及强制push
RWD,RW+D:
只有当授权指令中定义了正则引用(正则表达式定义的branch、tag等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(branch or tag)
RWCD,RW+CD:
只有当授权指令中定义了正则引用(正则表达式定义的branch、tag等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(branch or tag),D的含义是允许删除和正则引用匹配的引用(branch or tag )
-:
减号(-)是一条禁用指令,只对写操作起作用,不会对用户的读操作施加影响。

 

参考:https://www.linuxidc.com/Linux/2014-02/96991.htm

posted @ 2018-06-14 13:34  某电商首席日志工程师  阅读(358)  评论(0编辑  收藏  举报