Linux环境搭建gerrit服务器

一、环境准备

1.Java环境

gerrit依赖,用于安装gerrit环境。

下载:jdk-7u79-linux-x64.tar.gz http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

安装:sudo tar zxvf ./jdk-7u79-linux-x64.tar.gz -C /opt

配置:vim ~/.bashrc(针对当前用户) or vim /etc/profile(针对所有用户,推荐)

export JAVA_HOME=/opt/jdk1.7.0_79

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

验证:java -version

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

2.git环境

gerrit依赖,用来操作git repository。

安装:sudo apt-get install git

验证:git --version

git version 1.9.1

 

初次配置Git时,将用户改为自己。

     ① git config --global user.name "your name"

     ② git config --global user.email "your email"

 

3.gerrit环境

//下载:Gerrit 2.12.4 https://www.gerritcodereview.com/download/gerrit-2.12.4.war

本人安装使用了gerrit-2.12.war

4.apache2环境

安装:sudo apt-get install apache2 

验证:sudo /etc/init.d/apache2 start

5.gerrit管理帐号(可选,使用独立账号配置gerrit)

gerrit依赖,用来管理gerrit。

sudo adduser gerrit

sudo passwd gerrit

并将gerrit加入sudo权限

sudo visudo

gerrit  ALL=(ALL:ALL) ALL

二、安装与配置gerrit

1.配置gerrit

默认安装:java -jar gerrit-2.12.war init -d ~/review_site

安装过程中,Authenticationmethod [OPENID/?]:输入http,另外Behind reverse proxy [y/N]?选y 反向代理,其他的默认即可

更新配置文件:sudo vim ~/review_site/etc/gerrit.config

[gerrit]

    basePath = code_repo      //在/home/gerrit/review_site/code_repo存放各项目git库

    canonicalWebUrl =http://192.168.200.130:8080/

[database]

    type = h2

    database =/home/gerrit/review_site/db/ReviewDB

[auth]

    type = HTTP

[receive]

    enableSignedPush = false

[sendemail]     //用于发送邮件进行确认

        smtpServer =smtp.qiye.163.com

        smtpServerPort = 465

        smtpEncryption = SSL

        smtpUser = [email protected]

        smtpPass = XXXXXXXXXX

        from = [email protected]

[container]

    user = gerrit

    javaHome = /home/gerrit/jdk/jre

[sshd]

    listenAddress = *:29418

[httpd]

    listenUrl = proxy-http://*:8080/

[cache]

    directory = cache

 

2.设置反向代理

(2.1)在mods-enabled中创建软链接:

 cd /etc/apache2/mods-enabled

          ln -s ../mods-available/proxy.load

          ln -s ../mods-available/proxy.conf

          ln -s ../mods-available/proxy_http.load

 

(2.2)在/etc/apache2/sites-enabled/000-default.conf中添加代理配置(黄色背景部分)

ss@ss-HP-Z228-Microtower-Workstation:/etc/apache2/sites-enabled$ cat000-default.conf

<VirtualHost *:80>

    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html

 

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

 

ServerName 192.168.200.130

ProxyRequests Off

ProxyVia Off

ProxyPreserveHost On

 

<Proxy *>

    Order deny,allow

    Allow from all

</Proxy>

 

<Location /login/>

AuthType Basic

AuthName "Gerrit Code Review"

Require valid-user

AuthBasicProvider file

AuthUserFile /home/gerrit/review_site/etc/passwd

</Location>

 

ProxyPass / http://127.0.0.1:8080/

ProxyPassReverse / http://127.0.0.1:8080/

</VirtualHost>

 

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

3.配置gerrit账户密码

touch /home/gerrit/review_site/etc/passwd

htpasswd -b /home/gerrit/review_site/etc/passwd admin 123456(管理员)

htpasswd -b /home/gerrit/review_site/etc/passwd xpp 123456(普通用户)

4.启动gerrit&启动apache2

sudo ~/review_site/bin/gerrit.sh start

sudo /etc/init.d/apache2 start

5.访问gerrit

管理界面 http://192.168.199.112:8080/

第一次访问,需要输入第3步设置的admin及密码,该账户将作为gerrit管理员账户。进入后可设置FullName: GerritAdmin。

 

三、如何使用gerrit

前提:需要git使用端 / gerrit服务端配合使用。

1.添加项目(gerrit 服务端)

1.1使用gerrit添加新项目:(                                   

ssh -p 29418 gerrit1@192.168.199.112gerrit create-project--empty-commit --namedemo-project #建议采用管理界面添加

ssh -p 29418 gerrit1@192.168.199.112gerrit create-project--empty-commitdemo-project

或者使用gerrit管理界面

1.2使用gerrit添加已有项目:(适用于已有项目下移植到gerrit中)

ssh -p 29418 gerrit1@192.168.199.112 gerrit create-project --nameexist-project #建议采用管理界面添加

ssh -p 29418 gerrit1@192.168.199.112 gerrit create-project  exist-project 

或者使用gerrit管理界面

然后将已有项目与gerrit上建立的exist-project关联,即将已有代码库代码push到gerrit中进行管理。

cd~/gitcode/exist-project

git pushssh://[email protected]:29418/exist-project *:*

2.生成sshkey(git使用端)

在开发账户中生成sshkey,用作与gerrit服务器连接。

ssh-keygen -t rsa #生成sshkey

ls ~/.ssh/ #可查看sshkey

cat ~/.ssh/id_rsa.pub #查看sshkey

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCj1XDqjNXbn39oeacJOxe8FklBJRpGS1CcHRThWBytZ4A5KXAaxYzcD94GUd9UxxZzKCr6y90mwuJ+jkKxCTlqUiwj73QIiPWQ3Re08M049W4XxdfGnu/jyTI9DptWBsF0dwFJlQquUtitS+b1Tkz7Jr7+WipbZ22aiHwRvY4VcvCCdIHy/BnCCbVcfgk9u8f+X+ROm+DkOGfUcBNXWEJydqF0wy/D13Q5gp9OAXMIOD05T3GToJRwYtx2cVFmK4jE9HtcudOrrZNFVHqeblbA7EMKpIuDpLho7esmpwJ/woB1wnKTwHoUzbMt0a6hHPMNWyP2WIJebEA1KzThLixt gerrit@RylanYan-ThinkPad

3.添加sshkey到gerrit服务器(gerrit 服务端)

此步骤与git流程类似,即将id_rsa.pub内容上传到git repository,gerrit中帮我们管理git repository.

4.拉取代码&配置git hooks(git client端)

验证sshkey是否配置成功:[email protected] -p 29418

The authenticity of host '[192.168.199.112]:29418 ([127.0.0.1]:29418)' can't be established.
  RSA key fingerprint is db:07:3d:c2:94:25:b5:8d:ac:bc:b5:9e:2f:95:5f:4a.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added '[192.168.199.112]:29418' (RSA) to the list of known hosts.
 
  ****    Welcome to Gerrit Code Review    ****
 
  Hi user, you have successfully connected over SSH.
 
  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:
 
  git clone ssh://[email protected]:29418/REPOSITORY_NAME.git

1.拉取代码: 

git clonessh://[email protected]:29418/demo-project

2.更新githooks:gitdir=$(git rev-parse --git-dir);

scp -p -P 29418 gerrit1@192.168.199.112:hooks/commit-msg${gitdir}/hooks/

该过程用来在commit-msg中加入change-id,gerrit流程必备。

3.修改代码并提交,推送时与原有git流程不一致,采用

git push origin HEAD:refs/for/master 。

git push origin HEAD:refs/for/master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 381 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done    
remote: 
remote: New Changes:
remote:   http://localhost:8081/4 Append date to testfile
remote: 
To ssh://gerrit1@localhost:29418/demo-project
 * [new branch]      HEAD -> refs/for/master

四、使用gerrit website完成codereview

当完成push后,可在gerrit管理界面看到当前提交code review的change。

查看需要code review的提交:

查看某次提交的详细信息(审核者+2可通过本次提交,提交者可通过Abandon本次提交):

如果审核者+2通过后,可提交该次commit.

五、gerrit注意事项

* 需要为每个使用者分配gerrit账号,不要都使用admin账号,因为admin账号可直接pushmaster

* pull代码后需要配置githooks文件,以便在commit时自动生成change-id,否则无法push

* push代码时需要使用git push originHEAD:refs/for/master(branch),gerrit默认关闭非admin账号的push direct权限

* push代码时需要commit email与gerrit account email一致,否则无法push成功,可选择关闭email notify,并开启forge user权限,或者通过修改gerrit数据库account email信息

* gerrit数据库与gitlab同步,需要安装replication插件,并开启该功能 参考:http://www.cnblogs.com/tesky0125/p/5973642.html

使用注意:

4.初次配置Git时,将用户改为自己。

     ① git config --global user.name "your name"

     ② git config --global user.email "your email"

1.git clone ssh://[email protected]:29418/demo-project  //拉取代码

/***下载commit-msg到project的.git/hooks文件夹里,主要是在提交时自动创建Change-Id。***/

2.scp -p -P 29418 [email protected]:hooks/commit-msg.git/hooks/

 curl -o .git/hooks/commit-msghttp://192.168.200.130:8080/tools/hooks/commit-msg

chmod u+x .git/hooks/commit-msg

(更新代码到Cache:git fetch

 把Cache代码Merge到本地工程: git rebase )

3.新增文件:git add . (若没有新文件,本条可省略)

4.提交到本地:git commit –m “”

5.提交到远程:git push origin HEAD:refs/for/master

六、安装repo

1.安装git

sudo apt-get install git-core

 

2.安装curl

sudo apt-get install curl

 

3.安装repo, 通过curl下载repo

mkdir ~/bin

curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo >~/bin/repo

 

4.修改执行权限

chmod a+x ~/bin/repo

 

5.修改~/bin/repo文件将第五行

问题:

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo >~/bin/repo

  % Total    % Received % Xferd  Average Speed  Time    Time     Time  Current

                                Dload  Upload   Total  Spent    Left  Speed

  0     0    0     0    0    0      0      0 --:--:-- --:--:----:--:--     0

curl: (56) Recv failure: 连接被对端重置

 

解决方法:修改~/bin/repo文件将第五行

REPO_URL='https://gerrit.googlesource.com/git-repo'

改为

REPO_URL='http://gerrit.googlesource.com/git-repo'

或改为:

https://gerrit-google.tuna.tsinghua.edu.cn/git-repo

 

6.然后向PATH中添加bin路径:

export PATH=$PATH:~/bin

 

使用$PATH 查看该值,看是否添加成功

【下面就是获取源码了:

$ repo init -ugit://git.omapzoom.org/platform/omapmanifest.git -b 27.x -mRLS27.12.1-P2_Gingerbread.xml

$ repo sync

七、repo管理项目代码

1、manifest.xml格式

在项目XXX.git中添加default.xml文件,文件格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="test" fetch="ssh://192.168.220.130:29418" review="review.source.android.com" />
    <default revision="master" remote="test" />
    <project name="demo-project" path="demo-project"/>
    <project name="new_project" path="new_project"/>
</manifest>
 
可以新建一个项目manifest(用于管理其他多个项目),然后本地创建一个default.xml。格式如上,提交,上传。
 

然后执行

repo init -u ssh://[email protected]:29418/manifest.git

repo sync

2、upload

1、register email

htpasswd -b /home/gerrit/review_site/etc/passwd gerrit1123456

添加用户后要登陆gerrit设置register email进行确认,然后才可以repo upload

2、default.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="test" fetch="ssh://192.168.200.130:29418" review="review.source.android.com" />
    <default revision="refs/heads/demo" remote="test" />
    <project name="demo-project" path="demo-project"/>
    <project name="new_project" path="new_project"/>
</manifest>

项目远程仓库创建demo分支

3、

Upload之前需要在本地创建分支

repo start branchname –all (所有项目)

4、

git add

git commit

本地修改项目,然后就可以repo upload

流程

1.      repo init –u xxx初始化

2.      repo sync同步要改动的项目

3.      在该项目下面repo start xxx新建一个本地分支

4.      做好改动以后git commit本地提交改动

5.      repo upload xxx将改动上传,等别人通过gerrit review

6.      review如果有需要改动的地方,那本地改好后,git commit --amend来保存新的修改

7.      repo upload将新的改动上传

8.      重复5-7步,直到review通过,然后merge改动,完毕

八、tag

1.Gerrit上检查是否已有相应的Access权限

Projects ->List -> All-Projects -> Acess,点击Edit

2.从Gerrit获取默认的master分支到本地,并在本地创建annotatedtag

git clone ssh://[email protected]:29418/bbauto/bba
cd bba
gittag -a -m "Adding v1.0 tag" v1.0
或git tag -s -m "Adding v1.0 tag" v1.0

git tag -a v1.0


3.提交本地的tag到Gerrit

git push origin v1.0 refs/tags/v1.0:refs/tags/v1.0
或git push origin v1.0 HEAD:refs/tags/v1.0
git push originv1.0
或git push origin tag v1.0
或git push origin --tags#提交本地的所有tags

4.获取指定tag到本地

git clone ssh://[email protected]:29418/bbauto/bba

git checkout v1.0

九、权限管理

在gerrit中权限控制是基于群组的. 每个用户有一个或者多个群组, 访问权限被赋予这些群组.访问权限不能赋予个人用户.

1、System Groups

Gerrit系统自带下面的群组

  • Anonymous Users
  • Change Owner
  • Project Owners
  • Registered Users

AnonymousUsers

所有用户都是匿名用户成员, 所有用户都能继承Anonymous Users所有访问权限.
当前只有Read access权限值得赋予给Anonymous Users群组, 因为其他权限都需要认证.

2、Predefined Groups

system groups在Gerrit系统内部就定义好了, 而普通群组信息被保存在ACCOUNT_GROUPS表中,Predefined groups群组信息也保存在ACCOUNT_GROUPS表中

Gerrit自带两个predefinedgroups:

  • Administrators
  • Non-Interactive Users

Administrators

AdministratorsGerritroot角色, 在Gerrit初始化时Administrate Server权限被赋予给这个PredefinedGroups群组.
Administrators组的成员可以管理所有项目, 但是不意味着任何其他权限. Administrators组不会自动获得代码审查批准和提交权限.

Non-Interactive Users

Interactive Users比如在web页面上审查代码, 在提交/获取代码的用户
Non-Interactive Users是可以通过Gerrit接口进行操作的组, 在Gerrit初始化时PriorityBATCHStream Events权限被赋予给这个Predefined Groups组.
Non-Interactive UsersInteractiveUsers使用不同的线程池, 防止交互式用户抢占线程. 当系统资源紧张时确保了交互式的用户可以继续工作.

3、Project Access Control Lists

All Projects

All Projects项目中的访问权限会自动被其他项目继承, 只有Administrate Server capability能够编辑All-Projects权限.

Admin登陆后,通过Projects -> List -> All-Projects -> Acess,点击Edit可对权限进行管理,Add Permission添加权限,Add Group添加该权限对应的组别。

specialand magic references

refs/heads/*refs/tags/*Git常用的引用命名空间, 一个用来存储分支一个用来标签
refs/*命名空间下的引用都是有效的,Gerrit在refs/*有一些特殊用处的命名空间和引用

AccessCategories

Abandon

代码审查时允许用户丢弃这个审查。如果对changepush权限,同时具有push,abandon,restore权限

Create Reference

用户可以创建新的references, branchesor tags, 创建时引用必须不存在,不能删除已经创建的引用
如果仅仅推送标签,给refs/tags/*赋予Create Reference权限
这个权限通常用在创建某个命名空间下的分支, 如:某个部门自由创建分支权限refs/heads/hello/*
给某用户自由创建分支权限, 给refs/heads/sandbox/${username}/*赋予Create Reference权限
如果你这样赋予Create Reference权限,记得同时赋予push force权限, 这样拥有清理

猜你喜欢

转载自blog.csdn.net/appke846/article/details/79238942