第一次写这么长的文章,有不对的地方欢迎提出。
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配置截图
终于完了,第一次写这么长的文章,还有不详细的地方,有不对的地方欢迎提出。
相关推荐
Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码自动化构建 Jenkins + Gitee 实现代码...
"K8S+DockerCE+Jenkins+Maven+Gitlab自动化打包部署" 以下是从给定的文件中生成的知识点: 一、概述 * 自动化打包部署是指将程序从开发到部署的整个流程自动化,以提高研发效率和生产效率。 * 本文将介绍使用 K8S...
Docker+Jenkins+GitLab+Maven+SpringBoot&SpringCloud;自动化构建
1. Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建+Jenkins自动化部署配置 2.无须运维部署 ,而是相关的开发人员,测试人员登录jenkins传入需要部署的tag即可,整个部署过程无须运维参与,解放运维劳动力
Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成.zip
gitlab+jenkins+docker自动化部署脚本,采用shell与python开发,其中python部分均为封装成型的逻辑,只接受shell传参就能完成项目构建
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署 本文主要介绍了基于Jenkins、Gitlab和Docker实现SpringBoot项目自动部署的方法。下面将从Jenkins的安装、配置到自动化构建和部署的整个过程进行详细说明。 ...
搭建Jenkins+Maven+SVN+Tomcat的持续集成环境,需要按照以下步骤: 1. 环境准备 - JDK1.8.0_131,版本不低于1.7,使用最新版本以获得最佳性能和最新特性。 - Apache Maven 3.3.9,不推荐使用3.5.0版本,以免出现...
Jenkins+Jmeter+ant 接口自动化框架 Jenkins、Jmeter 和 Ant 是三种不同的工具,它们之间可以结合使用,以实现自动化测试和接口自动化。本文将介绍如何使用 Jenkins、Jmeter 和 Ant 实现接口自动化测试,并将其应用...
本文将详细介绍如何在Windows操作系统上搭建一套完整的集成开发环境,包括Tomcat服务器、Jenkins持续集成工具、Subversion(SVN)版本控制系统以及SonarQube代码质量管理平台。这套环境对于持续集成、代码质量管理...
1. Jenkins和JMeter的定义与作用: Jenkins是一个开源的自动化服务器,它可以用来实现持续集成(CI)和持续部署(CD)。它基于Java编写,能自动化地监控和执行重复性的工作,如编译、测试和打包软件。JMeter是一个...
git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路
Gitllab+Jenkins+Docker+Harbor 自动化部署流程 一、 版本控制系统 Gitllab Gitllab 是一个基于 web 的 Git 仓库管理系统,提供了一个强大且灵活的平台来管理 Git 项目。 Gitllab 允许用户创建、管理和共享 Git ...
### Jenkins + SVN + Maven + Java 自动化部署详解(Windows版) #### 一、Jenkins 安装与配置 **1. Jenkins 安装** - **下载安装**: 首先,从官方网址 (https://jenkins.io/download/) 下载最新的Jenkins安装包...
jenkins+testng+reportng+maven+java环境搭建 本文将指导测试人员搭建jenkins+testng+reportng+maven+java环境,涵盖了Eclipse环境准备、Maven配置、TestNG插件安装、ReportNG报告引入等内容。 一、Eclipse 环境...
Jmeter+Jenkins+maven 接口自动化集成测试框架 Jmeter+Jenkins+maven 接口自动化集成测试框架是一种自动化测试解决方案,旨在简化测试过程,提高测试效率和测试质量。该框架通过集成 Jmeter、Jenkins 和 Maven 三个...
在这个环境中,Maven、Nexus、Jenkins 和 SVN 等工具都是不可或缺的组件。下面我们将详细介绍如何使用这些工具来搭建一个完整的持续集成环境。 Maven 安装 Maven 是一个基于 Java 的项目管理和 build 工具,它提供...
在这个场景下,Jenkins 监听 Gitlab 仓库的代码变更,一旦检测到新的提交,就会触发构建流程。 2. **Maven**:Maven 是一个项目管理和综合工具,主要用于Java项目。它通过管理项目构建、依赖关系以及文档生成,使得...
总结,Jenkins+SonarQube+Sonar-Scanner的集成方案为软件开发提供了高效的自动化部署和代码质量管理工具。通过合理的配置和使用,可以显著提升开发效率,保证代码质量,降低维护成本。实践过程中,需不断调整和优化...