您的位置:首页 > 运维架构 > Apache

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

2014-03-27 11:35 495 查看



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//自己改成自己的邮箱
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...OK
Checksumbcprov-jdk16-144.jarOK
GeneratingSSHhostkey...rsa...dsa...done
***HTTPDaemon
***

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

ProxyusesSSL(https://)[y/N]?n
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所默认数据库类型,可以选用mysql
database=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/defalt

NameVirtualHost192.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了:
$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-enabled
ln-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';


设置权限

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.xml
gitcommit-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”

转自:/article/10893418.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: