Gerrit服务器的搭建(Git+Gerrit+PostgreSQL+LDAP)

来源:互联网 发布:软件开发挣钱吗 编辑:程序博客网 时间:2024/06/05 17:34

Gerrit简介

Gerrit是搭建在Git之上的基于Web的代码审查工具。大家都知道Git是一个分布式的代码版本管理工具,常用于多人协作开发的工作环境中,程序员将自己修改的代码提交到本地版本库,然后再push到远程的中央版本库中,见图1。这个过程中,代码的提交是没有经过审核的,对于分布在多个地点的团队来说,不能互相审查、评论其他人的代码,非常不利于代码质量的控制。而Gerrit就是用来进行代码审查的工具,程序员push到中央版本库的代码,首先要经过团队中Reviewers的审查,被接受后才会真正提交到版本库中,见图2。
这里写图片描述
这里写图片描述


Gerrit服务器的搭建(Git+Gerrit+PostgreSQL+LDAP)

1 总览

操作系统Ubuntu,需要安装

  • Git,代码版本管理
  • Java,最低1.7版本,Gerrit安装包是个war包
  • 数据库,Gerrit支持H2(内置) / MySQL / PostgreSQL,本安装选择PostgreSQL,完全开源且适合大规模数据的部署
  • 身份认证,审核的前提是做身份认证来登陆Web,Gerrit支持OpenID / HTTP / LDAP,本安装选择已经搭建好的LDAP,但会讲解HTTP方式的认证,需要Apache做反向代理

2 Git安装

sudo apt-get install git

3 JDK8安装

Ubuntu14.10及以上版本的Ubuntu官方软件中心里有OpenJDK java 8,可以直接用apt-get安装,低版本得从PPA(Personal Package Archives 个人软件包集)中安装。

sudo add-apt-repository ppa:openjdk-r/ppasudo apt-get update sudo apt-get install openjdk-8-jdk

配置Java环境变量

  • PATH,指定命令搜索路径,在shell下执行命令时,会到PATH变量指定的路径中查找相应命令程序,如java/javac
  • CLASSPATH,指定类搜索路径,JVM通过它寻找类
  • JAVA_HOME,其他软件通过它找到jdk的安装目录
vi /etc/profileexport JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21  export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH  export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHsource /etc/profilejava -version

如果安装了多个jdk,就选择一个默认的

sudo update-alternatives --config javasudo update-alternatives --config java

4 PostgreSQL安装

sudo apt-get install postgresql

初次安装后,会默认生成名为postgres的Linux系统用户、数据库和数据库用户(作为数据库管理员),首先修改postgres数据库用户的密码,然后增加Gerrit需要的数据库

sudo -u postgres psqlpostgres=# \password postgres(input password twice)postgres=# \q
sudo -u postgres createuser -RDIElPS gerrit2sudo -u postgres psqlpostgres=# \password gerrit2(input password twice)sudo -u postgres createdb -E UTF-8 -O gerrit2 reviewdb

5 Gerrit安装

从官网下载Gerrit的安装包,为了方便改名为gerrit.war,建议创建一个Linux用户来安装,本人安装在gerrit2用户的review_site目录下

sudo adduser gerrit2sudo su gerrit2java -jar gerrit.war init -d /home/gerrit2/review_site

然后就会进行很多配置,大部分默认即可,要注意的是数据库和身份认证,这些配置也可以在安装完成后在~/review_site/etc/gerrit.config文件中修改。

以下是别人的配置,他是用MySQL+Nginx做HTTP认证,这里贴出来只是让大家看下大概的安装步骤,仅供参考:

# java -jar gerrit-2.8.war init -d /etc/gerrit/*** Gerrit Code Review 2.8***Create '/etc/gerrit'           [Y/n]? y*** Git Repositories***Location of Git repositories   [git]:*** SQL Database***Database server type           [h2]: mysqlGerrit Code Review is not shipped with MySQL Connector/J 5.1.21**  This library is required for your configuration. **Download and install it now [Y/n]? yDownloading http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar ... OKChecksum mysql-connector-java-5.1.21.jar OKServer hostname                [localhost]:Server port                    [(mysql default)]:Database name                  [reviewdb]: gerritdbDatabase username              [root]: gerritusergerrituser's password          :              confirm password :*** User Authentication***Authentication method          [OPENID/?]: httpGet username from custom HTTP header [y/N]? nSSO logout URL                 :*** Email Delivery***SMTP server hostname           [localhost]: smtp.googlemail.comSMTP server port               [(default)]: 587SMTP encryption                [NONE/?]: tlsSMTP username                  [root]: gerrit@thstack.comreview@thstack.com's password  :              confirm password :*** Container Process***Run as                         [root]:Java runtime                   [/usr/lib/jvm/java-6-openjdk-amd64/jre]:Copy gerrit-2.8.war to /etc/gerrit/bin/gerrit.war [Y/n]? yCopying gerrit-2.8.war to /etc/gerrit/bin/gerrit.war*** SSH Daemon***Listen on address              [*]:Listen on port                 [29418]:Gerrit Code Review is not shipped with Bouncy Castle Crypto v144  If available, Gerrit can take advantage of features  in the library, but will also function without it.Download and install it now [Y/n]? yDownloading http://www.bouncycastle.org/download/bcprov-jdk16-144.jar ... OKChecksum bcprov-jdk16-144.jar OKGenerating SSH host key ... rsa... dsa... done*** HTTP Daemon***Behind reverse proxy           [y/N]? yProxy uses SSL (https://)      [y/N]? nSubdirectory on proxy server   [/]:Listen on address              [*]:Listen on port                 [8081]: 8082Canonical URL                  [http://www.thstack.com/]: http://review.thstack.com/*** Plugins***Install plugin reviewnotes version v2.8 [y/N]? yInstall plugin download-commands version v2.8 [y/N]? yInstall plugin replication version v2.8 [y/N]? yInstall plugin commit-message-length-validator version v2.8 [y/N]? yInitialized /etc/gerritExecuting /etc/gerrit/bin/gerrit.sh startStarting Gerrit Code Review: OKWaiting for server on review.thstack.com:80 ... OKOpening http://review.thstack.com/#/admin/projects/ ...FAILEDOpen Gerrit with a JavaScript capable browser:http://review.thstack.com/#/admin/projects/

我试过用Apache做反向代理,需要配置不过配置~/review_site/etc/gerrit.config还有/etc/apache2/httpd.conf,还是有点问题,总是报Authorization header的错误,最后选择了LDAP认证,LDAP服务器是公司已经搭好的,直接用了。

最后,我的~/review_site/etc/gerrit.config如下:

[gerrit]        basePath = git        canonicalWebUrl = https://localhost:8080[database]        type = postgresql        hostname = localhost        database = reviewdb        username = gerrit2[auth]        type = LDAP[ldap]        server = ldaps://xx:xx        accountBase = xx        accountPattern = (&(objectClass=person)(uid=${username}))        accountFullName = cn        accountEmailAddress = mail        accountSshUserName = uid        referral = follow        groupBase = xx        groupScope = one[sendemail]        smtpServer = localhost        from = ${user} [review] <xx@xx.com>[container]        user = gerrit        javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre[sshd]        listenAddress = *:29418[download]        scheme = ssh        scheme = http[httpd]        listenUrl = proxy-http://localhost:8080[cache]        directory = cache[http]        proxy = http://xx:xx[gitweb]        cgi = /usr/lib/cgi-bin/gitweb.cgi[cache "web_sessions"]       maxAge = 1 month

这里集成了GitWeb,它是一个支持Git的CGI程序,能够从浏览器追踪Git项目

sudo apt-get install gitweb

配置好gerrit.config文件后,启动Gerrit,需要用绝对路径

/home/gerrit2/review_site/bin/gerrit.sh start

在浏览器输入 http://localhost:8080 弹出Gerrit的页面,终于成功了!
这里写图片描述

1 0