经过一晚的折腾,终于在linux mint12下将apache2,git,gerrit配置成功。
参考资料:
http://m.oschina.net/blog/33017
http://www.lifeyun.com/code-review-tools-installation-gerrit.html
http://unethicalblogger.com/2009/12/07/code-review-with-gerrit-a-mostly-visual-guide.html
http://gerrit.googlecode.com/svn/documentation/2.1.7/config-reverseproxy.html
http://www.lifeyun.com/code-review-tools-installation-gerrit.html
http://www.infoq.com/cn/articles/Gerrit-jenkins-hudson
1.模块作用介绍。
git是分布式版本控制工具。
gerrit是代码审核工具,当然也包括了一套权限系统(google发明的?),git向远程仓库的refs/for/*分支提交代码时会先经过gerrit,审核通过后才会提交到ref/head/*分支。
mysql为gerrit提供数据库支持。
apache2在这里的主要是为了配合gerrit的账户认证,提供反向代理功能。
2.准备工作。
安装git,安装apache2,安装mysql,下载gerrit包。(没有jdk的话也需要先安装和配置,网上资料很多)
apt-get install git
apt-get install apache2
mysql本人是通过linux的updatamanger工具安装。版本是5.1.10。
需要注意的是mysql默认安装以后所有字符集都是拉丁1,请不要更改此默认设置,本人的教训。。。改成utf8以后安装gerrit时跑数据库脚本出错,会导致使用过程中会出现一些莫名的错误。
在googecode网站上下载gerrit2.x.x.war文件备用。貌似还可以通过wget命令下载,未尝试。
安装过程没什么特殊设置。
说明:apache2安装好以后默认的工作目录在/var/www/下。配置目录在/etc/apache2下。
启动apache2:/etc/init.d/apache2 start
停止apache2:/etc/init.d/apache2 stop
启动mysql:/etc/init.d/mysql start
停在mysql:/etc/init.d/mysql stop
mysql安装好以后是默认开机启动的。
3.配置过程。
1首先配置数据库。数据库类型是可选的,h2,postgre也是可以的
执行mysql -uroot -p启动mysql控制台,执行如下脚本
CREATE USER 'git'@'localhost' IDENTIFIED BY 'git';
CREATE DATABASE reviewdb;
ALTER DATABASE reviewdb charset=latin1;
GRANT ALL ON reviewdb.* TO 'git'@'localhost';
FLUSH PRIVILEGES;
这里的数据库用户git和数据库名称reviewdb可以随便取,后面会用到他们。关键是要设置charset=latin1,不要改成utf8了,本人一开始就是自做聪明该改成utf8,导致gerrit安装异常。
2 安装gerrit。通过执行命令
java -jar /home/xx/gerrit-2.2.1.war init -d /home/xx/gerrt_sites
进行安装。安装过程中会提示输入各种信息,包括数据库信息等,这些可以参考上面的链接。大部分都可以使用默认配置,关键是在选择认证的时候
*** User Authentication
***
Authentication method [OPENID/?]: http
请选择http方式,不要使用openid方式,选择http方式后可以配置apache进行认证,选择openid方式后认证需要外网链
接,而且貌似有bug,在[url]
http://stackoverflow.com/questions/3705656/openid-with-gerrit-not-
working[/url]网站上有介绍。
安装完成以后通过执行/home/xx/gerrt_sites/bin/gerrit.sh start 启动gerrit。
接下来通过浏览器访问http://127.0.0.1:8080/会进入错误提示页面,提示http请求未带授权头。你也许会奇怪这里的http服务器是哪里来的。这个其实就是打包在gerrit.war文件里的jetty服务器。
接下来配置好apache2就行了。测试apahce2安装成功可以通过浏览器访问http://127.0.0.1/显示it works 就是按好了。apahce2的默认端口是80.
首先要激活代理模块
ln -s /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enable/proxy.conf
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enable/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enable/proxy_http.load
然后在/etc/apache2/httpd.conf中加入下面的内容(什么?httpd.conf是空的?不要觉得奇怪,原始的httpd.conf本来就是个空文件)
<VirtualHost *>
ServerName localhost
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location /login/>
AuthType Basic
AuthName "Gerrit Code Review"
AuthBasicProvider file
AuthUserFile /home/xx/gerrt_sites/etc/passwords
Require valid-user
</Location>
ProxyPass / http://127.0.0.1:8080/
</VirtualHost>
这里需要注意的是2个地方,一是AuthUserFile /home/xx/gerrt_sites/etc/passwords,这个路是指向的是个密码文件。此文件通过命令生成
htpasswd /home/xx/gerrt_sites/etc/passwords "gerrit_fisrt_username"
这里的gerrit_fisrt_username就是以后用来登录gerrit的用户名。以后要为gerirt增加用户,也需要通过htpasswd命令在此passwords文件中添加用户
二是ProxyPass / http://127.0.0.1:8080/,这里的配置必须和/home/xx/gerrt_sites/etc/gerrit.config文件里面的
[httpd]
listenUrl = proxy-http://127.0.0.1:8080/
匹配。/home/xx/gerrt_sites/etc/gerrit.config文件里面保存的是在gerrit安装过中输入的信息,更改配置也可以直接编辑此文件。
本人的gerrit.config如下
[gerrit]
basePath = git
canonicalWebUrl = http://127.0.0.1:8080/
[database]
type = MYSQL
hostname = localhost
database = reviewdb
username = git
[auth]
type = HTTP
[sendemail]
smtpServer = localhost
[container]
user = gerrit2
javaHome = /usr/lib/jvm/java-6-openjdk/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://127.0.0.1:8080/
[cache]
directory = cache
这些都配置好以后重启apache2,通过浏览器访问http://127.0.0.1/,会提示输入用户名密码,输入
gerrit_fisrt_username和密码登录,就会自动跳转到http://127.0.0.1:8080/,在此页面的右上方点击
settings,然后在左侧栏点击profile,可以看到当前登录的用户名为gerrit_fisrt_username,然后点击Contact
Information,在fullname中随便输入名字保存即可。第一个登入的账户默认是管理员账户
正常情况下,在页面admin--》project下应该能在列表项中看到一个All-Projects项。
点击All-Projects可以设置各种权限。如果你看不到All-Projects就说明你的gerrit安装又异常,多半是我上面提到的数据库字符集导致的。
4.gerrit公钥配置
在shell中执行命令
ssh -p 29418 gerrit_fisrt_username@127.0.0.1
提示Permission denied (publickey).
缺少公钥配置。
参考http://www.lifeyun.com/code-review-tools-installation-gerrit.html
执行:
ssh-keygen -t rsa
生成公钥,
查看:
cat ~/.ssh/id_rsa.pub
将个公钥添加到gerrit中。
进入http://127.0.0.1:8080/,点击右上角setting,点左侧栏SSH Public Keys
再点击又边的add key,将公钥复制到里面,点击add提交。
这里需要注意的是需要复制的字符串是包括cat ~/.ssh/id_rsa.pub命令打印出来的所有内容,即开头的ssh-sha和结尾的xx@xxx也要一起复制
再次执行
ssh -p 29418 gerrit_fisrt_username@127.0.0.1
恭喜你,看到welcome就表示你已经配置完成
如果链接异常的话,可以删除~/.ssh/knows_host重试
执行
ssh -p 29418 gerrit_fisrt_username@127.0.0.1 gerrit create-project -n test_project
添加一个项目。
在webUI就可以看到此项目了
5.简便ssh
在~/.ssh/目录下新建文件config
加入内容如下
Host gerrit_short
User gerrit_fisrt_username
Port 29418
Hostname 127.0.0.1
IdentityFile ~/.ssh/id_rsa
以后执行
ssh -p 29418 gerrit_fisrt_username@127.0.0.1
这个命令就可以简单的写成
ssh gerrit_short
再比如
ssh -p 29418 gerrit_fisrt_username@127.0.0.1 gerrit create-project -n test_project
就可以简写为
ssh gerrit_short gerrit create-project -n test_project
这里的第2个参数gerrit是关键字
6.检出项目
通过上面的命令创建项目以后,除了在http://127.0.0.1:8080/可以看见以外,通过ssh也可以查看。
ssh gerrit_short gerrit ls-projects
将会输出2个项目名称
all_project
test_project
一个是内置的,一个是刚才建立的。(使用管理员账户才能看到内置的all_project项目)
下面客户机就可以检出项目了:
git clone ssh://gerrit2@127.0.0.1:29418/test_project.git
当前目录下就会多出一个test目录,此目录即是你重服务器上检出的项目。
同时shell中会见看到如下提示
Cloning into test_project...
warning: remote HEAD refers to nonexistent ref, unable to checkout.
这是因为test项目本身就是个空项目,所以还不存在头指针。
git的版本控制方式就像c语言里面的链表模型。每一次提交会产生一个新的节点,而这个新的节点同时还有个指向原来节点的链接。每一个头指针代表一个分支。头指针指向的是链表的最后一个节点。具体的模型可在progit.pdf中找到。
扯远了,扯回来。
8.第一次提交。
在刚此检出的test目录下新建一个文件readme.txt
执行:
git add readme.txt
或者执行
git stage readme.txt
这两个命令此处的效果相銅,之所以说“此处”,是因为add命令是个多个功能命令,还有其他含义,而这里的git stage 相当于svn add
接下来将文件提交到本地仓库,先配置git的默认编辑器
vi ~/.gitconfig
加入如下内容;
[user]
name = some_one_
email = xxx@xxx.com
[core]
editor = vim
并保存,以后每次提交的信息中对会带上以上提交人的描述信息,并且设置了编辑器为vim,方便编写log
执行:
git commit readme.txt
在vim中加入log并保存推出,即完成一次提交,注意此次是提交到本地仓库,和服务器没有关系。
9.push到远程仓库
参考http://www.infoq.com/cn/articles/Gerrit-jenkins-hudson
执行
git push origin master
origin和master可不是什么关键字,他们只是默认的名称而已。是克隆的仓库的默认别名,通过git clone
ssh://gerrit_fisrt_username@127.0.0.1:29418/test_project.git克隆以后,就会产生这个默
认名称,简单点说就是origin=ssh://gerrit_fisrt_username@127.0.0.1:29418
/test_project.git
而master是本地仓库的当前分支名称。通过git checkout branchname可以切换当前工作分支,这个后面再说。
git push origin master此命令即是将到当前分支同步到远程仓库中去。不过此命令在gerrit中是会失败的。后面再说。
结果却显示错误:
...
To ssh://gerrit_fisrt_username@127.0.0.1:29418/test_project.git
! [remote rejected] master -> master (prohibited by Gerrit)
error: failed to push some refs to 'ssh://gerrit_fisrt_username@127.0.0.1:29418/test_project.git'
原因是gerrit不允许直接将本地修改同步到远程仓库。客户机必须先push到远程仓库的refs/for/*分支上,等待审核。这也是为什么我们需要使用gerrit的原因。gerrit本身就是个代码审核工具。
接下来更该push的地址:
git config remote.origin.push refs/heads/*:refs/for/*
此命令实际是更改的是本地仓库test_project/.git/config文件。
再次puh
git push origin
这次不要加master,
结果又出错
remote: ERROR: You have not registered any email addresses.
解决办法:
$ git config --global user.name "yourname"
$ git config --global user.email yourmail@xx.com
#进入gerirt的安装目录
cd /home/xx/gerrt_sites
#执行
$ java -jar bin/gerrit.sh stop
$ java -jar bin/gerrit.war gsql
#在新的shell中执行(其实就是修改mysql数据库表的内容,添加邮件地址)
gerrit> select * from account_external_ids;
gerrit> update account_external_ids set email_address = 'yourmail@xx.com' where account_id = your_acc_id
#这里的your_acc_id就是select查询出来的gerrit_fisrt_username账户对应的account_id列中的值
$ java -jar bin/gerrit.sh start
再次执行
git push origin
恭喜你,push成功。
10。审核,验证、提交。
push成功以后,进入http://127.0.0.1/开打web界面
点击左上的all,再点open,
会看到所有带审核的commit
即你在本地push之前执行了多少此commit,这里就会列出多少个commitid
首先需要为用户配置权限信息,在admin--》projects--》All-Projects--》access中点击
edit,然后设置权限,具体设置方法就不描述了,说来话长了。出要是要为refs/heads/*添加
Label Code-Review
Label Verified
Submit
+1和+2权限,并为每个权限添加用户组。
权限配置好以后,
点击某个commitid,在点击review,然后点击pulish或者submit
顺序是先审核,再验证,再提交。相信大家多琢磨琢磨就知道怎么操作了
提交以后,
刚才的git push origin才算真正的提交到了远程仓库中。
11.下载。
其他客户机就可以通过git colne(重复上面的过程)或者git
fetch来下载远程仓库,下载下来的内容就包含了刚才push上去内容。当然,前提是要为其他开发者创建账户并添加权限,这些就不说啦,可以参考git
权威指南这本书,有介绍gerrit的内容
这样即完成了一次代码的共享过程。
分享到:
相关推荐
2. 下载并安装Gerrit,配置`gerrit.config`。 3. 配置数据库连接。 4. 设置Git仓库和复制配置。 5. 安装Git客户端,配置SSH密钥。 6. 启动Gerrit服务。 7. 在本地Git仓库中配置Gerrit作为远程仓库,推送代码进行审核...
Git 代码服务器搭建 ...2. 配置 Gerrit:使用 `vim /etc/gerrit/gerrit.config` 配置 Gerrit,以便实现代码评审。 至此,一个完整的代码服务器已经搭建完成!读者可以根据需要添加组成员、配置权限和实现代码评审。
GIT+Gerrit+Jenkins基础操作
- **坑2**: 必须先安装Git插件才能在源码管理中选择Git。 - **坑3**: 解决链接异常问题,检查GitHub地址和账户密码的准确性。 - **坑4**: 在FilePath中手动补全settings.xml路径。 - **坑5**: 在Tomcat的`tomcat-...
Git乌龟(Git Tortoise)是Git的一个图形化界面工具,尤其适合那些对命令行不熟悉的用户,通过直观的界面使得Git的操作更为简单易懂。 在Git+Git乌龟的使用中,以下几个关键知识点是非常重要的: 1. **安装与配置*...
gerrit依赖,用于安装gerrit环境。 下载:jdk-8u181-linux-x64.tar.gz http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装:sudo tar zxvf ./jdk-8u181-linux-x64.tar.gz -...
git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路
android-tools-fsutils_4.2.2+git20130218-3ubuntu23_i386.deb
Maven 的安装也非常简单,从 Apache 官方网站下载 Maven 的安装包,然后解压缩到合适的目录下,最后配置 M2_HOME 环境变量。 Tomcat 安装 Tomcat 的安装也非常简单,只需要下载并解压缩 Tomcat 的安装包,然后配置...
自己从零开始搭建git + gitweb + gerrit服务器 软硬件环境 物理机:Windows10 64位 VMware版本:VMware Workstation 12 Ubuntu版本:ubuntu-14.04-server-amd64.iso
"Postman+Newman+Jenkins+Git API测试自动化集成测试" Postman是一款功能强大的API测试工具,能够帮助开发者快速测试和验证API。然而,在实际应用中,手动点击Runner进行测试的方式不够灵活和高效,因此引入了...
vscode+git基本操作vscode+git基本操作vscode+git基本操作vscode+git基本操作
Jenkins+Git+Maven+Shell+Tomcat 持续集成环境 本文主要讲述如何使用 Jenkins、Git、Maven、Shell 和 Tomcat 搭建一个持续集成环境,以提高软件开发效率和质量。首先,Jenkins 是一个开源软件项目,旨在提供一个...
背景:jenkins作为中央调度器,集成java、maven、git、email、html-report环境,搭建 一个自动化测试框架,可性能也可...2、准备测试代码上传到github,jenkins配置maven、git插件; 3、直接上图配置,一个步骤一步来:
虚拟机Ubuntu+python+redis+MySQL+SSH+Git+Django+Postman,提供下载,助力毕业设计。 该虚拟机中,安装的软件如下: Ubuntu 18.04.6 LTS 64位 Python 3.6 Pycharm-comunity Redis 4.3.6 pip pyinstaller3.5.3...
React+TS+Redux Tool Kit+Ant Design+ESLint+Git Lint + Stylelint 项目构建企业级模板,具体参考https://gitee.com/zhang_huai_wei/zhw-blog-pc || React+TS+Redux Tool Kit+Ant Design+ESLint+Git Lint + ...
4. **基本操作**:`git add`将文件添加到暂存区,`git commit`保存更改,`git push`将本地提交推送到远程仓库。 5. **分支管理**:`git branch`列出分支,`git checkout -b new_branch`创建并切换分支,`git merge ...
2. `git clone <repo>`:此指令用于克隆一个指定的Git仓库到本地。远程仓库可以是本地文件系统路径,也可以是通过HTTP或SSH访问的远程路径。 3. `git config user.name <name>`:这个命令用于配置当前仓库的用户...
使用Gitblit-1.9.3做git服务器,Git-2.44.0-64-bit_3做git客户端,GitExtensions-3.5.4.12724做git客户端UI界面,完成Git服务器的搭建与应用。对于中小项目来说这足够了,有了自己的Git服务器会方便很多,虽然网上有...
需要重启Apache2和Gerrit来应用配置更改。 常见错误处理 常见错误处理是Gerrit搭建的必要步骤。需要处理常见错误,如重启Apache2时遇到apache2: could not reliably determine the server's fully qualified ...