`
liyonghui160com
  • 浏览: 758626 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jenkins + gerrt代码Review

阅读更多

 

第一次写这么长的文章,有不对的地方欢迎提出。

 

1.    环境准备
(1) 服务器
      192.168.195.64   jenkins + nginx
      192.168.195.69   gerrit + nginx
(2)前提
   安装 java,maven,git,细节略过
(3) 下载软件
 由于测试机网络不给力,代理太慢。

jenkins 使用rpm包来安装。
http://pkg.jenkins-ci.org/redhat/  这上面下载最新的版本


 gerrit 下载地址: https://code.google.com/p/gerrit/
2.    安装gerrit


gerrit安装,参考http://blog.csdn.net/benkaoya/article/details/8680886
gerrit安装,参考http://gerrit.googlecode.com/svn/documentation/2.2.1/install.html


(1) 新建用户
add user gerrit
su - gerrit

(2)选项选择

Authentication method          [OPENID/?]: ?
 选择  development_become_any_account

 

 

(3)数据库类型是可选的,h2,postgre也是可以的,当然使用h2最简单。
     选择mysql为例,

    3.1先安装好mysql

 

yum -y install mysql-server
 
     3.2执行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安装异常。

     安装gerrit通过执行命令

    java -jar /home/xx/gerrit-2.2.1.war init -d /home/xx/gerrt_sites  
 

     /home/xx/gerrt_sites/etc/gerrit.config文件里面保存的是在gerrit安装过中输入的信息,更改配置也可以直接编辑此文件。
   其它都默认,反向代理+http方式有空再弄。

 

3.    配置gerrit

    (1) gerrit的启动和关闭

 

    ./home/xx/gerrt_sites/bin/gerrit start

    ./home/xx/gerrt_sites/bin/gerrit stop

    ./home/xx/gerrt_sites/bin/gerrit restart
 


(2)  添加管理员
打开 http://node91:8080/,右上角有个Become链接进入,第一个注册将成为管理员。


将用户名,email,ssh-key都填好,点continue完成注册。


(3) 添加jenkins用户,也可以直接root
新建用户与(2)相同,同时要设置一堆权限,这里引用gerrit官方文档的。
还可以稍后在gerrit网站中对用户进行权限分配

 

Create the profile through in Gerrit web interface for your Jenkins user, and set up a SSH key for that user.
        Gerrit web interface > Admin > Groups > Non-Interactive Users > Add your jenkins user.
        Admin > Projects > ... > Access > Edit
        Reference: refs/*
        Read: ALLOW for Non-Interactive Users
        Reference: refs/heads/*
        Label Code-Review: -1, +1 for Non-Interactive Users
        Label Verified: -1, +1 for Non-Interactive Users


说明下:这里有Group,All-project,Group有以下这些,可以新建。不同group对工程,引用,元数据的操作权限都不一样。

权限也可以gerrit搭建后在处理。

 

  All-project是个默认的工程,里面设置了一堆权限,其它新建的工程从这个里继承权限,或自己创建覆盖。
(4) 添加 Lable Verified
 由于gerrit 2.7版本以后,去掉了Label  Verified,需要自己添加,是就给jenkins用的,提交的代码首先要经过jenkins,ok之后才会到人工review阶段

 

# cd /tmp
# gitinitcfg; cd cfg
# gitconfig user.name 'root'
# gitconfiguser.email 'root@jd.com'
# git remote add origin ssh://root@192.168.195.69:29418/All-Projects
# git pull origin refs/meta/config
# vim project.config        
# 在文件末尾添加下面 5 行
[label "Verified"]
    function = MaxWithBlock
    value = -1 Fails
    value =  0 No score
    value = +1 Verified
# git commit -a -m 'Updated permissions'
# git push origin HEAD:refs/meta/config

 

注意不配置这个标签,后期分配权限时候没有Label  Verified这个选项

 



 

 

 

 

4、Jenkins搭建

可以直接在jenkins官方网站上:http://jenkins-ci.org/下载jenkins的文件jenkins.war文件 有两种启动方法。

首先保证系统中已经安装了jdk,最好是jdk1.6以上。

 

第一种启动方法,切换到jenkins.war存放的目录,输入如下命令:$ java -jar jenkins.war

然后在浏览器中(推荐用火狐)输入http://localhost:8080,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins

 

第二种方法是用tomcat打开

 

解压tomcat到某个目录,如/usr/local,进入tomcat下的/bin目录,启动tomcat/usr/local/apache-tomcat-6.0.18/bin$ ./startup.sh start

 

将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址:http://localhost:8080/jenkins

 

在打开jenkins后,没有创建用户前,先不要勾选系统设置中启用安全选项,如果勾选了,就会出现无法进入jenkins的现象。

 

如果已经勾选可以通过如下方法来解决:

在jenkins默认的主目录.jenkins中修改config.xml文件,将文件下的几行

 

<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>false</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>

 

 

全部删除,然后重新启动tomcat,重新进入jenkins就不用输入密码了。

 

jenkins 默认的根目录在当前文件夹下,比如本机使用的用户名是kes,打开jenkins后,默认的根目录就是/home/kes/.jenkins目 录。.jenkins目录是隐藏的,为了方便需要将jenkins的目录更换以下。先备份当前jenkins的根目录,以便更换主目录失败以后可以恢复到 以前的目录。

 

进入tomcat下的conf目录,创建一个jenkins.xml文件,将如下几行加入,其中jenkins.war文件就是我们放到webapps目录下的jenkins文件,要给出这个文件存放的绝对路径,value后面就是变更后jenkins的根目录的位置。

 

<Context docBase="/path/to/jenkins.war">
<Environment name="JENKINS_HOME" type="java.lang.String" value="/path/to/jenkins" override="true"/>
</Context>

 

 

 修改conf下的xml文件的时候,需要将tomcat关掉,修改好后,多次重启tomcat,再进入jenkins之后,在系统设置中就可以看到jenkins根目录改变了,而且在环境变量里面增加了JENKINS_HOME这个变量。

 

直接配置到环境变量里,不用配置到tomcat下。

 

export JENKINS_HOME=/home/tomcat/jenkins

 

在tomcat下webapps的jenkins目录

/usr/local/apache-tomcat-6.0.18/webapps/jenkins/WEB-INF

修改以上目录中的web.xml文件,修改<env-entry-value></env-entry-value>这一行,在<env-entry-value>之后添加现在的jenkins的根目录。

 

<env-entry>
<env-entry-name>HUDSON_HOME</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/usr/local/jenkins</env-entry-value>
</env-entry>

 

重启tomcat,打开jenkins,jenkins根目录修改完毕。

 

http://node91:8081/jenkins/

 

第一个注册用户也是管理员。如果不让注册,可以关闭之。系统管理—configure Global Security

 



 5、配置jenkins
(1) 系统配置
系统管理—系统配置
       将JDK,GIT,MAVEN,GIT plugin都配置上。
(2) 需要安装 gerrit-trigger, git plugin,git client plugin插件

    系统管理—插件管理—可选插件,搜索下



 


环境不能自动安装插件,需要手动下载安装,下载插件的地址是:https://wiki.jenkins-ci.org/display/JENKINS/Home

 搜索要装的插件来安装吧,下载插件和依赖插件,放到/tomcat目录/webapps/jenkins/WEB-INF/plugins目录下,重新启动网站,在系统管理-插件管理-已安装里面看到插件说明成功安装了。没有看到可能缺少依赖插件。

(3) 配置gerrit-trigger


系统管理–Gerrit Trigger,新建server,填写如下:

 



 


这个是jenkins连接gerrit服务器的配置,点击 "Test Connection" 测试是否可行。

当然还可以配置其他用户,只是源代码ssh的路径会不一样了

注意建好后要启动插件,否则将监控不到gerrit的代码提交。

Status显示为蓝色球,显示Version信息



 6.    测试jenkins+gerrit
接下来就可以测试两者结合了。


 (1)  在Gerrit界面上新建工程。
这个比较简单:

 



 (2)  客户端检出,配置,回传,添加hooks

 

//初始化
git clone ssh://zengzhengyang@192.168.195.69:29418/mvntest
scp -p -P 29418 zengzhengyang@192.168.195.69:hooks/commit-msg .git/hooks/
git commit --amend -m initialized
git push origin HEAD:refs/for/master (限制用户直接提交 refs/heads/*)

 

    这里要得到gerrit的hooks,用于每个提交产生change-ID,用来审核的。配置好的gerrit是不允许客户端直接提交代码于 head/*, 而是提交到一个“分支”上 refs/for/*, review通过之后,才能merger至主线。这也是gerrit 的主要工作逻辑。


    查看gerrit界面,看到未处理的提交,outgoing reviews,处理完后会到Recently closed。这里先放着,等待着jenkins自动触发label verified。



 

(3)  jenkins新建job(注意要先建好job,否则不能触发构建)
 新建job,选择时maven 2,3。然后就是配置了。注意Jenkins和maven的版本的兼容,不兼容会出现找不到maven类的错误,目前支持maven3的版本为3.2


   (3.1) 源码管理配置



 


Branches to build  要填写  gerrit_branch,gerrit trigger只会关注分支的变化,至于什么时候merger,是gerric review 自己的事。一般用户手动review后 submit后进行merge。

 

注意:如果使用和gerrit结合的话,这里有个问题,push的代码没有在$gerrit_branch下,就算触发了编译,编译的是提交到master的代码,不是change下最新push的代码。我用$gerrit_branch编译的不是最新的代码,这个见官方插件文档。

 

文档地址:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger

 

 

Usage with the Git Plugin
To get the Git Plugin to download your change; set Refspec to $GERRIT_REFSPEC and the Choosing strategy to Gerrit Trigger. You may also need to set 'Branches to build' to $GERRIT_BRANCH. If this does not work for you set Refspec to refs/changes/*:refs/changes/* and 'Branches to build' to $GERRIT_REFSPEC.
Note: Be aware that $GERRIT_BRANCH and $GERRIT_REFSPEC are not set in the Ref Updated case. If you want to trigger a build, you can set Refspec and 'Branches to build' to $GERRIT_REFNAME.

 

只好按照文档设置成如下:

 



 

这样设置就好了,每次触发编译都是新的chang下的代码了。

 

抱歉给大家带来不便。

 

 

(3.2)  构建Gerrit trigger



 


gerrit trigger 点击 add按钮添加 patchset created、draft published,就会触发jenkins去下载,编译。

 

   (3.3)  maven build配置

 


 

注意pom的文件路径,有上层目录的话好加上父路径:binLogreader/pom.xml

保存,应用。

 

如果配置正确,触发器就开始工作,它会发现刚刚的patchset created,触发git clone , men clean package操作。 

这里要注意的是要先配好jenkins否则gerrit不会获取到构建信息,以后代码合并有出现很多问题。

 

//修改代码后的提交

git status
git add 修改的文件
git commit --amend -m 描述
git push origin HEAD:refs/for/master (限制用户直接提交 refs/heads/*)

 
 


 


这里注意要配置gerrit的Label Verified的权限 ,project-list-选择一个工程-access配置权限,(配置见 最后一图标红出Reference:refs/for/refs/*的配置)



 

 

 

 


如果编译通过,我们回去gerrit界面去看。My–Changes,outgoing reviews里的一个未审核提交,点进去。发现jenkins已经verified了。



 


还差 Code-Review,这个就需要人工看了。

gerrit直接修改还是比较方便。一般需要两个人check,各自加1分,才算通过,admin也可以直接,加2分。分数的配置见上面最后一图的 Label Code-Review。

 

找到my-change中的-Outgoing reviews,点击Code-Review到Code-Review的界面,如下图:

 



 


这个jenkinsbuild+user code review都通过之后,根据系统配置,只有admin审核Code_Review过以后,才能submit代码。如下图:

 


 

 

 这里邀请了其他用户来review,显示了多个用户。



 

 以上是master分支的操作,branch分支的操作和以上相同。首先创建分支,
选中一个工程,创建分支


 

其余配置jenkins和gerrit相同。
branch的分支合并完成后,需要手工的merge到master分支。

 

//分支获取代码
git clone ssh://root@192.168.149.91:29418/liyonghuitest
//查看版本
git branch –r
获取分支
git checkout origin/20150328
//添加jenkins hooks
scp -p -P 29418 root@192.168.149.91:hooks/commit-msg .git/hooks/
//do Some Work
git status
git add 修改文件
//本次提交的描述
git commit -a -m 描述
//限制用户直接提交到分支
git push origin HEAD:refs/for/20150328
 
//git merge branch to master
//获取主分支master
git clone ssh://root@192.168.149.91:29418/liyonghuitest
//查看版本
git branch –r
 
    origin/20150325
    origin/20150328
    origin/HEAD -> origin/master
    origin/master
 
//合并
git merge origin/20150328
 
 
    Updating 278b253..043431f
    Fast-forward
    binLogreader/binLogreader/README.md | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)
    [root@localhostliyonghuitest]# git merge origin/20150328
    Already up-to-date.
 
//提交
git push
 
 
//如果有冲突。查看冲突 手动解决
git diff  
git status
找到文件后 cat一下 就可以找到conflict具体的地方 vim
解决冲突后提交 push、merge

 


 权限管理:

admin可以创建项目,分配给普通用户权限。普通用户没有提交代码的权限,有审核代码的权限。审核后需要admin审核submit

组管理



 

 

以上全部配置完成,还有不完善的地方。

 

其他的一些参考资料:


下载gerrit地址
http://gerrit-releases.storage.googleapis.com/index.html
gerrit安装地址
http://gerrit.googlecode.com/svn/documentation/2.2.1/install.html
gerrit with jenkins : installation and configuration
http://dachary.org/?p=1716
Code Review with Gerrit, a mostly visual guide
http://blog.csdn.net/ljchlx/article/details/22278273
git对branch操作
http://blog.csdn.net/wirelessqa/article/details/20153689
gerrit安装
http://blog.csdn.net/benkaoya/article/details/8680886

 

 相关系统配置截图



 

 

job配置截图



 

 

 

 

终于完了,第一次写这么长的文章,还有不详细的地方,有不对的地方欢迎提出。

 

  • 大小: 51.1 KB
  • 大小: 28.4 KB
  • 大小: 36.8 KB
  • 大小: 34.8 KB
  • 大小: 21.2 KB
  • 大小: 29.2 KB
  • 大小: 33.2 KB
  • 大小: 20.3 KB
  • 大小: 23.1 KB
  • 大小: 32.5 KB
  • 大小: 45.2 KB
  • 大小: 53.2 KB
  • 大小: 52.4 KB
  • 大小: 8.8 KB
  • 大小: 103.2 KB
  • 大小: 26.6 KB
  • 大小: 33.6 KB
  • 大小: 41.2 KB
  • 大小: 47.6 KB
  • 大小: 28.1 KB
  • 大小: 61.8 KB
  • 大小: 48.3 KB
  • 大小: 50.5 KB
  • 大小: 56.3 KB
  • 大小: 45.3 KB
  • 大小: 15.5 KB
  • 大小: 5.8 KB
  • 大小: 23.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics