当前位置:首页 » Apache技术知识

Gerrit+apache+H2数据库简单安装配置及建库流程

2014-12-16 11:45 本站整理 浏览(343)

UbantuGerrit安装

安装相关软件(ubantu)

Gerrit是一个基于Web的代码评审和项目管理的工具,面向基于Git版本控制系统的项目。因此需要Apache、Mysql、GIT等相关软件的支持系统配置:新装的UBANTULINUX系统请先更新自己的系统软件包$sudoapt-getdist-upgrade

$sudoadduserproject

以新用户身份操作$sudosu-project

$sudoapt-getinstallgit-coreapache2.2-binapache2.2-commonapache2-utilsapache2-mpm-worker

安装Gerrit

1.创建一个以项目名称命名的新用户,以project为例(如以创建可省)

$sudoadduserproject
以新用户身份操作

$sudosu-project
2.创建安装目录,以项目名命令。(建议直接拷贝使用其它项目的gerrit安装目录)$mkdir-preview_site_project

3.下载gerrit

http://code.google.com/p/gerrit/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+ReleaseDate+Size+DownloadCount
4.安装并配置初始化gerrit

java-jargerrit-2.6.1.warinit-dreview_site_project/

Create'/home/gerrit2/review-site'[Y/n]?***GitRepositories

***

LocationofGitrepositories[git]:

***SQLDatabase

***

Databaseservertype[H2/?]://改成MYSQL或者使用H2

***UserAuthentication

***

Authenticationmethod[OPENID/?]:HTTP//注意这个不要按回车跳过去了,否则不是HTTP认证,是需要用google的OPENID

GetusernamefromcustomHTTPheader[y/N]?:

SSOlogoutURL:

***EmailDelivery

***

SMTPserverhostname[localhost]:smtp.company.com//自己改成自己的邮箱smtp

SMTPserverport[(default)]:

SMTPencryption[NONE/?]:

SMTPusername[?]:yourname@company.com//自己改成自己的邮箱

[code]yourname@xxxxx.com'spassword:

confirmpassword:

***ContainerProcess

***

Runas[project]:

Javaruntime[/usr/lib/jvm/java-6-sun-1.6.0.24/jre]:

Copygerrit.warto/home/gerrit2/review-site/bin/gerrit.war[Y/n]?

Copyinggerrit.warto/home/gerrit2/review-site/bin/gerrit.war

***SSHDaemon

***

Listenonaddress[*]:

Listenonport[29418]://如果同一个用户下建多个gerrit,请不用都公用29418这个端口号如3941849418

GerritCodeReviewisnotshippedwithBouncyCastleCryptov144

Ifavailable,Gerritcantakeadvantageoffeatures

inthelibrary,butwillalsofunctionwithoutit.

Downloadandinstallitnow[Y/n]?

Downloadinghttp://www.bouncycastle.org/download/bcprov-jdk16-144.jar...OKChecksumbcprov-jdk16-144.jarOK

GeneratingSSHhostkey...rsa...dsa...done

***HTTPDaemon

***

Behindreverseproxy[y/N]?y//使用反向代理的话必须选择y来配置,默认是N

ProxyusesSSL(https://)[y/N]?n[/code]
Subdirectoryonproxyserver[/]:/project///可以选择直接跳过,那样你的gerrit最后的URL是http://192.168.11.73:80
Listenonaddress[*]:
Listenonport[8081]://切记,此端口号一定不要和apache2占用相同的端口号,多个gerrit可以808280838084			//否则就会StartingGerritCodeReview:Failed
CanonicalURL[http://*/]:http://192.168.11.73/project///上一步Subdirectoryonproxyserver跳过不填则是http://192.168.11.73:80(80为你将要在apache给gerrit设置的端口)
Initialized/home/gerrit2/review-siteExecuting
/home/gerrit2/review-site/bin/gerrit.shstart
StartingGerritCodeReview:OK
=========================================QA=======================================================================================

Q:ConfigurationErrorChecktheHTTPserver'sauthenticationsettings.TheHTTPserverdidnotprovidetheusernameintheAuthorizationheaderwhenitforwardedtherequesttoGerritCodeReview.IftheHTTPserverisApacheHTTPd,checktheproxyconfigurationincludesanauthorizationdirectivewiththeproperlocation,ensuringitendswith'/':
Inerror_log:ERRORcom.google.gerrit.httpd.auth.container.HttpLoginServlet:UnabletoauthenticateuserbyAuthorizationrequestheader.Checkcontainerorserverconfiguration.

A:Youcannotruntheseonthesameport.YourApacheNameVirtualHostshouldbeonadifferentportthantheinternalJettywebseverthatGerritisusing.
即gerrit和apache2占用相同的端口号

例如:

catreview_site_project/etc/gerrit.config:

[httpd]listenUrl=http://x.x.x.x:8081/cat/etc/apache2/apache2.conf:

NameVirtualHostx.x.x.x:8081

<VirtualHostx.x.x.x:8081>

apache2和gerrit都使用了8081,肯定有一个启动不来的,一般是gerrit

5.按下面内容修改review_site_project/etc/gerrit.conf及GERRIT的配置文件

[gerrit]basePath=git//指定被gerrit管理的所有git库存放位置,即review_site_project/git/

canonicalWebUrl=http://192.168.11.73/project///指定web访问gerrit的网址//填自己的ip和端口号,勿完全抄[database]

type=H2//指定gerrit所默认数据库类型,可以选用mysqldatabase=db/ReviewDB

[auth]type=HTTP//指定浏览器登录gerrit时的认证方式

[sendemail]

smtpServer=smtp.company.com//指定smtp服务器地址

smtpUser=yourname@company.com

[container]

user=project//指定gerrit所在机器的用户身份与上文创建的用户对应一致

javaHome=/usr/lib/jvm/java-6-sun-1.6.0.24/jre//系统本身自带

[sshd]

listenAddress=*:29418//指定sshd服务监听的端口号

[httpd]

listenUrl=proxy-http://127.0.0.1:8081/project///指定http代理地址

[cache]

directory=cache//缓存位置

配置Apache

$sudoapt-getinstallapache2.2-binapache2.2-commonapache2-utilsapache2-mpm-worker
1.创建编辑apache配置文件,添加如下内容(下面以Ubuntu系统为例请注意不同操作系统apache配置文件的区别)也可配置apache2.confhttpd.conf,我们这里配置的是/etc/apache2/sites-available/gerrit

$sudovi/etc/apache2/sites-available/defaltNameVirtualHost192.168.11.73:80//填自己的ip和端口号,勿完全抄

<VirtualHost192.168.11.73:80>//填自己的ip和端口号,勿完全抄

ServerName192.168.11.73

ProxyRequestsOff

ProxyViaOff

ProxyPreserveHostOn

<Proxy*>

Orderdeny,allow

Allowfromall

</Proxy>

<Location"/project/login/">

AuthTypeBasic

AuthName"GerritCodeReview"

Requirevalid-user

AuthUserFile/etc/apache2/passwords//指定http登录认证的的paassword文件所在位置,放哪都行,根据后来

//sudohtpasswd-cb/etc/apache2/passwordsscmscm

</Location>AllowEncodedSlashesOn

RedirectMatch^/project$/project/ProxyPass/project/http://127.0.0.1:8081/project/ProxyPassReverse/project/http://127.0.0.1:8081/project/</VirtualHost>

保存退出

$cd/etc/apache2/sites-enabled/

$sudoln../sites-available/gerrit.

2.创建passwd文件,添加gerrit登录用户,-c参数为创建,仅限第一次添加用户时使用

$sudohtpasswd-cb/etc/apache2/passwordsscmscm

第二次添加其他用户时,不要加-c了:[code]$sudohtpasswd-b/etc/apache2/passwordstesttest
3继续配置apache2$sudovi/etc/apache2/http.conf//在文件中加入以下内容
ServerNamelocalhost

$cd/etc/apache2/mods-enabled$sudoln-s/etc/apache2/mods-available/proxy.confproxy.conf

$sudoln-s/etc/apache2/mods-available/proxy.loadproxy.load$sudoln-s/etc/apache2/mods-available/proxy_http.loadproxy_http.load

配置apache2的监听端口:
/etc/apache2$sudoviports.conf

NameVirtualHost*:80

Listen80

Listen8080//不要给gerrit!

Listen8000//不要给gerrit!

添加apache2的tcp端口号,切记不要把gerrit的,即
Listenonport[8081]:不要输入上面配置给apache2的端口号,切记!!!可以用sudonetstat-lnp|grep80查看相关80的所有端口使用情况
否则gerrit起不来的

搭建多个gerrit时Listenonport[8081]:可以用808280838084等

Apache2配置安装FQA:

Q:启动apache报错
Syntaxerroronline300of/etc/apache2/apache2.conf:Invalidcommand'ProxyPass',perhapsmisspelledordefinedbyamodulenotincludedintheserverconfiguration...fail!

A:配置了反向代理,但是没有打开module,执行下面操作

cd/etc/apache2/mods-enabledln-s/etc/apache2/mods-available/proxy.confproxy.conf

ln-s/etc/apache2/mods-available/proxy.loadproxy.load

ln-s/etc/apache2/mods-available/proxy_http.loadproxy_http.load

Q:启动Apache报错

NoapacheMPMpackageinstalled

A:安装apache2-mpm-worker软件包

$sudoapt-getinstallapache2-mpm-worker

Q:启动Apache报错

apache2:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using127.0.1.1forServerName

A:修改/etc/apache2/http.conf文件,在文件中加入以下内容

ServerNamelocalhost
Q:(13)Permissiondenied:make_sock:couldnotbindtoaddress0.0.0.0:80

A:需要用ROOT用户执行直接sudo/etc/init.d/apache2restart就OK了

启动服务

1.启动apache
sudo/etc/init.d/apache2restart

2.启动gerrit服务

$review_site_project/bin/gerrit.shstart

登录gerrit

在浏览器地址栏中输入192.168.11.73/project/

注:Subdirectoryonproxyserver[/]:选择直接跳过则192.168.11.73:80在显示的登录框中输入用户名/密码,

即之前配置passwords

$sudohtpasswd-cb/etc/apache2/passwordsscmscm
scm

scm

Note:请注意第一个登入的用户,Gerrit会自动将其定义为管理员

Gerrit配置及建库流程

建库及Gerrit配置操作命令

1.创建只用于权限管理的库,可以使用如下命令(请注意端口号以实际为准)
ssh-p29418scm@192.168.11.73gerritcreate-project-pAll-Projects-nproject--empty-commit--permissions-only

2.创建代码库,以manifest为例命令如下:

ssh-p29418scm@192.168.11.73gerritcreate-project-pproject-nproject/manifest--empty-commit

批量建库,可以通过整理库列表,使用如下脚本来完成

foriin`catproject-list`;dossh-p29418scm@192.168.11.73gerritcreate-project-pproject-nproject/$i--empty-commit;done

修改gerritGroup组命令:ssh-p29418192.168.11.73gerritrename-groupAnonymous\'\'UsersVerifier

详细gerrit命令见:ssh-p29418192.168.11.73gerrit--help

直接使用GIT命令推送代码命令:gitpushoriginHEAD:refs/for/master

3.gerrit管理员之命令行服务端直接操作数据库(h2)的配置,删除无用的Group、提交等等优点:不需要认证,尤其是在管理员账号尚未建立之前就可以查看和更改数据库

缺点:先登录到服务器,而且操作数据库时还需要先停止服务

3.1进入gerrit超级管理员模式

gerrit2@ubuntu:~/review_site$./bin/gerrit.shstop

StoppingGerritCodeReview:OK

gerrit2@ubuntu:~/review_site$lsbin

gerrit.shgerrit.war

gerrit2@ubuntu:~/review_site$java-jarbin/gerrit.wargsql

[2013-05-0101:05:57,003]INFOcom.google.gerrit.server.git.LocalDiskRepositoryManager:Defaultingcore.streamFileThresholdto220m

WelcometoGerritCodeReview2.6-rc1

(H21.3.168(2012-07-13))

Type'\h'forhelp.Type'\r'toclearthebuffer.

gerrit>\h

General

\qquit

QueryBuffer

\gexecutethequerybuffer

\pdisplaythecurrentbuffer\rclearthequerybuffer

Informational

\dlistalltables

\dNAMEdescribetable

gerrit>\d

Listofrelations

TABLE_SCHEM|TABLE_NAME|TABLE_TYPE

------------+--------------------------------------+-----------

PUBLIC|ACCOUNTS|TABLE

PUBLIC|ACCOUNT_DIFF_PREFERENCES|TABLE

PUBLIC|ACCOUNT_EXTERNAL_IDS|TABLE

PUBLIC|ACCOUNT_GROUPS|TABLE

PUBLIC|ACCOUNT_GROUP_INCLUDES_BY_UUID|TABLE

PUBLIC|ACCOUNT_GROUP_INCLUDES_BY_UUID_AUDIT|TABLE

PUBLIC|ACCOUNT_GROUP_MEMBERS|TABLE

PUBLIC|ACCOUNT_GROUP_MEMBERS_AUDIT|TABLE

PUBLIC|ACCOUNT_GROUP_NAMES|TABLE

PUBLIC|ACCOUNT_PATCH_REVIEWS|TABLE

PUBLIC|ACCOUNT_PROJECT_WATCHES|TABLE

PUBLIC|ACCOUNT_SSH_KEYS|TABLE

PUBLIC|CHANGES|TABLE

PUBLIC|CHANGE_MESSAGES|TABLE

PUBLIC|PATCH_COMMENTS|TABLE

PUBLIC|PATCH_SETS|TABLE

PUBLIC|PATCH_SET_ANCESTORS|TABLE

PUBLIC|PATCH_SET_APPROVALS|TABLE

PUBLIC|SCHEMA_VERSION|TABLE

PUBLIC|STARRED_CHANGES|TABLE

PUBLIC|SUBMODULE_SUBSCRIPTIONS|TABLE

PUBLIC|SYSTEM_CONFIG|TABLE

PUBLIC|TRACKING_IDS|TABLE

重新配置Group,删除原有不需要的Group(如匿名),使新创建的Group都可以添加删除用户,

gerrit>deletefromACCOUNT_GROUPSwhereNAME='AnonymousUsers';

修改gerritGroup组命令(下面的例子是将原有的Approver改为ApproverTest):

updateACCOUNT_GROUPSsetNAME='ApproverTest'whereGROUP_UUID='8cc77752bca3fb8b9daa9d7be6386c4872ddefda';

设置权限

1.Gerrit管理员权限由于Gerrit管理员要完成代码推送、创建TAG,且可能涉及到多套库的操作,编辑“All-Projects”中的“Access”,2.project项目用户权限project项目用户对代码库的权限设置,请在"project"的“Access”中完成,如图所示:3.操作方法:

选择“All-Projects”中的“Access”,点击“”按钮;

点击“AddReference”,填写正确的“Reference”,如果"refs/heads/*",具体的某个分支“refs/heads/dev”;选择“AddPermissioned...”列表中的权限,如“Read”;

填写“GroupName”,如“project_read”,点击“Add”按钮;设置权限的分值,“ALLOW”“DENY”“+1”“-2”等;

设置完成后,点击“”按钮

Note:代码需要经过Gerritreview之后才可以入库,因此push权限的“Reference”应该填写“refs/for/refs/heads/*”

推送代码

在已经有的代码库中,执行

repoforall-c'gitremoteaddtsssh://scm@192.168.11.73:29418/$REPO_PROJECT'repoforall-c'gitpushtsHEAD:refs/heads/project-dev'

配置manifest

1.下载manifest库
gitclonessh://192.168.11.73:29418/project/manifest.git

默认下载的是master分支,且只有一个空提交2.生成default.xml请注意更改default.xml中如下两行:

<remotefetch=".."name="origin"review="192.168.11.73/project"/><defaultremote="origin"revision="project-dev"/>

Note:review的内容为Gerrit地址,revision的内容务必与实际代码库中的分支保持一致3.推送manifest分支

gitadddefault.xmlgitcommit-m"initmanifest"

gitpushoriginmaster:project-dev

Note:此处“project-dev”分支是manifest分支,与实际代码库中的分支可以相同也可以不同

添加Gerrit用户

执行如下命令

htpasswd-bpasswords<username><password>

添加用户权限

新用户首次登录后,才可以给其添加权限。Gerrit身份权限说明

Project_admin该项目管理员,可以为用户添加Gerrit身份;
Project_read拥有gerrit用户名密码,设置了全名和邮箱的用户;拥有下载代码,提交代码,CodeReview+1的权限;
Project_super_review负责查看该项目代码Review,拥有CodeReview+2的权限;
Project_verify负责该项目编译验证代码,拥有Verified+1的权限
Project_submit当该次提交代码CodeReview+2并且Verified+1后,负责将代码Merge到代码库中
下载代码测试
repoinit-ussh://<gerrituser>@192.168.11.73:29418/project/manifest-bproject-dev

Note:建议使用普通Gerrit帐户下载测试

GerritReview代码

Gerrit上代码提交的三种状态

代码提交至Gerrit之后,有三种状态,分别是:Open、Merged、Abandoned。Open状态的代码需要经过Review,Verify,Submit操作后才会真正入库,即成为Merged状态Merged状态的代码已经入库,不能再Abandoned,只能Revert.Open状态的代码由于各种原因不能入库的可以放弃,即Abandoned状态。Abandoned状态的代码不能再入库,如有需要,可以“Restore”。

Gerrit上代码提交的详细信息

代码提交之后,登录Gerrit,可以看到此次提交已经显示在列表中,如下图绿箭头所指是目前查看的代码状态,即Open状态的列表。

列表显示的信息依次是

IDSubjectOwnerProjectBranchUpdatedCRV
ChangeId提交信息的第一行提交人库名分支名最后变更的时间Review的状态Verify的状态
CR的状态有四种,分别为?(-2),-1,+1,√(+2)其中-1并不影响入库,但-2则需要重新提交新的PatchSet,或者设置-2的成员批准才能入库。

V的状态有两种,分别是?(-1),√(+1)其中-1的状态不能入库,需要重新编译验证(Verify)通过才可以入库。

点击列表中的“ID”或“Subject”,则可以显示该提交更详细的信息。下图的放大效果中显示了该提交当前的状态。

RerviewerJenkins成员给该提交-1,这是Jenkins系统的自动任务,在这里用于检查提交信息(gitlog)的格式;

NeedVerified表示该提交还没有进行编译验证;

NeedCode-Review表示该提交还没有进行代码Review,请注意,这里指Review+2

Note:Review+2表示更高一级的Review权限,即需要有此权限的成员Review代码后判断是否允许代码入库。两个Review+1并不能获得同等的效果下图显示了提交详细信息中的下半部分,主要有每次提交的PatchSet详情,该提交修改的文件列表,以及每次Review的说明信息。

两个PatchSet表示该提交在入库前又做过一次修改:代码入库前允许有多次修改,包括对gitlog的改动;

点击修改文件列表中显示的文件(红色横线标识),显示该文件修改前后的对比,如图中绿色箭头所指(实际效果为在新的页面中展示);

文件修改的对比版本可以自由选择是与Base或是与某一个PatchSet作对比,请注意图中“OldVersionHistory”(浅紫色框)下拉菜单的选择;

Comments信息是Review代码时填写的信息。

代码的Review

点击Review按钮(上图红圈标识),可以对当前提交做Review的操作,如下图:不同权限,可以看到左右不同的页面,选择相应Review的分数即可;

信息框中可以填写此次Review的更详细的信息,并点击“Publish”按钮。

代码的Verify

一般情况下,代码都是通过Jenkins的Verify任务完成编译验证并自动打分。有Verify权限的成员,可以在确认代码编译验证通过之后,手动打分(极不推荐),选择Verfiy的分数,填写信息,并点击“Publish”按钮。如下图:

代码的Submit

代码经过Review+2和Verify+1之后才可以Submit入库;Review和Verify的顺序没有要求。

如图,可以看到两个按钮“PublishComments”和“PublishandSubmit”

点击“PublishComments”只进行Review或Verify的打分;

点击“PublishandSubmit”在Review或Verify的打分同时直接Submit。

如果只选择了给Review或Verify打分,也可以进行Submit,如下图,点击“Submit”按钮

至此,该提交Review完成,正式提交入库,状态变为“Merged”