gerrit上的commit msg中关联jira单号(含gerrit的安装)
这个问题折腾了很久,前期后后大概一个月吧,终于搞定了,查了很多资料,有的不完整,有的完全就不能用,有的没说完整,所以一定要记录下来,我的心血啊。
由于公司在用的gerrit的是正式环境中的,大家都在使用,并且这又是个没接触过的新的配置,所以,担心在正式服务器上调试影响大家工作,所以只能在其他机器上搭建一套完整的系统来调试,主要是搭建gerrit平台,网上很多都是apache和mysql之类的,搭建下来配置来配置去都有问题,这里给大家推荐一个“gerrit + apache + nginx”,参考:https://blog.csdn.net/peterxiaoq/article/details/73330314
系统是centos的系统。
准备工作:
(1)首先安装jdk,这个就不多说了
(2)安装apache:yum install httpd
(3)安装nginx: 参考https://blog.csdn.net/zql3315/article/details/54924689 (备注:执行1,2就行了)
说明:你可能会想,为啥安装了nginx了还要安装apache,博客了很清楚的说明了原因,此外这里主要用在执行创建gerrit用户的时候。
接下来就开始安装gerrit了,参考博客就行,我把其中重要的部分捡了出来,
1.创建gerrit专有用户
adduser gerrit
su gerrit
2.建好用户以后,我们可以把之前下载好的gerrit安装包(gerrit-2.13.4.war)拷贝到 /home/gerrit/目录下,一会方便gerrit用户来安装
在gerrit用户的目录(/home/gerrit/)下面,执行命令:
java -jar gerrit-2.13.4.war init -d ~/gerrit_site
我们安装的时候,可以只在 Authentication method 时输入 http ,以及安装插件时输入“y”,(默认插件是不安装的),其他全部回车用默认值,如下这里:
(1)Authentication method [OPENID/?]: http
(2)Installing plugins.
Install plugin download-commands version v2.11 [y/N]?
Install plugin reviewnotes version v2.11 [y/N]?
Install plugin singleusergroup version v2.11 [y/N]?
Install plugin replication version v2.11 [y/N]?
Install plugin commit-message-length-validator version v2.11 [y/N]?
因为其他配置我们待会可以通过 etc/gerrit.config 文件进行修改。
还需要修改listenUrl =http://*:8080/,在http前面加"proxy- "
到此我的gerrit.config文件内容如下(重点部分如红色标记):
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.8.204:8080/
[database]
type = h2
database = /home/gerrit/gerrit_site/db/ReviewDB
[index]
type = LUCENE
[auth]
type = HTTP
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[container]
user = gerrit
javaHome = /usr/java/jdk1.8.0_101/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8080/
[cache]
directory = cache
3.nigix配置:
你的nginx应该是用root账户安装的,否则可能出现权限问题。我们需要从之前的gerrit用户退出来,然后执行下面两条命令:
cd /etc/nginx/conf.d ; touch gerrit.conf
然后 vim gerrit.conf,输入如下内容:
server {
listen *:81;
server_name 192.168.8.204; (根据自己的实际情况,输入的是gerrit主机ip)
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file /home/gerrit/gerrit.password;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
然后重启nginx:
service nginx restart
4.登陆认证文件
上面的gerrit.conf文件中,我们看到了:auth_basic_user_file /home/gerrit/gerrit.password,这里我们需要用apach的 htpasswd 工具来新建这个文件,这也是为什么我们虽然不用到apache的反向代理,仍然需要apache的原因。
htpasswd -c /home/gerrit/gerrit.password admin
然后输入密码就可以了,这个密码会被加密(一般情况下,我更偏向于用户名和密码设置成一样的,方便记忆,比如我的用户名密码都是admin)
-c表示create,如果我们想新建别的用户,或者修改某个用户的密码,只需要把 -c 改成 -m 就好了,如果还是用 -c 并且路径不变的话,就会覆盖掉原来的文件。
注意 :
如果你是在root用户下输入上面的命令 创建了 gerrit.password 文件到 /home/gerrit/ 目录中,你会发现在登录的时候永远登录不成功,永远会得到服务器500的错误页面。原因是 /homt/gerrit/ 文件夹的权限问题。
我们知道, /home/gerrit/ 是我们之前新建的gerrit用户的,那么这个文件夹的权限是700,也就是只允许gerrit用户访问,其他组的用户是访问不了的,虽然这个文件的权限拥有root用户的所有权限,但是因为它放在700权限的文件夹下面,所以同样其他用户是访问不到的
这个问题之前纠缠了我好久,通过nginx的日志可以清楚的看到访问拒绝的错误。
所以,我们需要通过下面的命令,来改变gerrit目录的权限
chmod 755 /home/gerrit
这样,当前目录权限就变成了 drwxr-xr-x ,也就是其他组的用户也拥有了读取和执行的权利。
5.重启gerrit服务
如上,我的gerrit的安装路径是/home/gerrit/gerrit_site,进入到这里目录,然后进入到里面的bin目录,我们看到一个gerrit.sh的文件,执行命令:
sh gerrit.sh restart
6.登陆网页
在浏览器上输入http://192.168.8.204:81即可,然后输入刚才步骤4里的用户名密码即可。然后回引导你做基本的设置,填写fullname 和'SSH Public Keys',这两个都很简答,就不细说了,ssh public keys是为了能下载代码。创建一个新的工程test,你就可以在本地下载代码了(ssh public keys和电脑是强相关的,如果你要在主机A上下载,就要把主机A的public key放上去,如果要在主机B上下,就要把主机B的public key放上去,如果主机重装系统了,你必须重新生成public key放上去,复杂不能下载;我的生成命令:ssh-keygen -t rsa -C anl@hpplay.cn;cat ~/.ssh/id_rsa.pub (public key还有其他生成方式,根据自己的情况可以参考其他人的))
7.commit-msg关联jira单号
查了很多,关于这方面的资料很少,并且有的说要装插件,可是我还是不行,其实简单的改下gerrit.config的配置就可以了,如上,我的gerrit路径是/home/gerrit/gerrit_site,修改这个目录下的etc/gerrit.config,添加如下内容:
[commentlink "jira"]
match = ([A-Z]+-[0-9]+)
link = http://你的jira_url/browse/$1
其中link中需要填写你的jira的url,比如我的是“link = http://jira.hpplay.cn:6060/browse/$1 ”
你可能会问,“$1”是什么,要怎么传入,他怎么识别提交的commit message的哪些是单号,至少要有个什么标志之类的,怎么触发这个配置生效呢,开始的时候,我也一直在思考这些问题,也一直想不明白,然后就先放一下(后面想通了,这个$1对应的就是math匹配到的字段,格式是“大写字母-数字”),重启了gerrit服务(sh /home/gerrit/gerrit_site/bin/gerrit.sh restart ), 并提交了一次代码,刷新界面或者重新登陆,commit message中包含了我的jira单号,结果达到效果了,如下:

看,变成蓝色的超链接了,点击就可以打开jira上这个单号的详细内容,如下:

到此,gerrit上的commit message中关联jira单号算是打通。这样做的好处,是方便代码review的时候能方便看到具体解决了什么问题。
如果你在参考本博客配置的过程中有什么问题,欢迎留言。
其他备注:
(1)yum install -y gitweb 安装gitweb 个人觉得没什么用
(2)ssh -p 29418 gerrit@192.168.8.204 gerrit plugin ls 查看已经安装的插件
(3)fatal: remote installation is disabled 要开启,配置如下:
[plugins]
allowRemoteAdmin = true
(4)ssh -p 29418 admin@192.168.8.204 gerrit plugin ls报错Permission denied (publickey):
参考:https://blog.csdn.net/pengjin1985/article/details/7789909
(5)插件安装:
参考:http://192.168.8.204:8080/Documentation/cmd-plugin-install.html
ssh -p 29418 admin@192.158.8.204 gerrit plugin install -n download-commands -<download-commands.jar
ssh -p 29418 admin@192.158.8.204 gerrit plugin install -n download-commands.jar -<./tools/download-commands.jar
command 注意点备份:
su gerrit
java -jar gerrit-2.12.4.war init -d ~/gerrit_site
验证类型一定要选http
最后的gerrit插件直接会出默认是不安装的,所以如果要安装要选y才会安装
ssh -p 29418 admin@192.168.8.204 gerrit plugin ls
vim gerrit_site/etc/gerrit.config
listenUrl = proxy-http://*:8080/
[plugins]
allowRemoteAdmin = true
sh gerrit_site/bin/gerrit.sh start
exit
如果是好久没用机器了,记得先启动nginx,然后再启动gerrit: service nginx restart;sh gerrit_site/bin/gerrit.sh start
http://192.168.8.204:81
admin admin
cat ~/.ssh/id_rsa.pub
systemctl status nginx
systemctl start nginx #启动
systemctl stop nginx #停止
systemctl restart nginx #重启
systemctl status nginx #查看运行状态
ssh -p 29418 admin@192.168.8.204 gerrit plugin install -n download-commands.jar /home/gerrit/tools/download-commands.jar
mysql -u root -p123456
gerrit新用户权限开通命令:
htpasswd -b /home/gerrit/gerrit.password username password
gerrit搭建参考:
https://blog.csdn.net/zql3315/article/details/54924689
https://blog.csdn.net/peterxiaoq/article/details/73330314
gerrit上的commit msg中关联jira单号(含gerrit的安装)的更多相关文章
- [原创]gerrit上分支操作记录(创建分支、删除分支)
Git分支对于一个项目的代码管理而言,是十分重要的! 许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉. 在此,我将自己的一些操作经历做一梳理,希望能帮助到 ...
- Gerrit上分支操作记录(创建分支、删除分支)
Git分支对于一个项目的代码管理而言,是十分重要的!许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉.在此,我将自己的一些操作经历做一梳理,希望能帮助到有用 ...
- C# Message类的属性Msg所关联的消息ID
C# Message类的属性Msg所关联的消息ID https://msdn.microsoft.com/en-us/library/windows/desktop/ms645606(v=vs.8 ...
- 学习Git的一点心得以及如何把本地修改、删除的代码上传到github中
一:学习Github的资料如下:https://git.oschina.net/progit/ 这是一个学习Git的中文网站,如果诸位能够静下心来阅读,不要求阅读太多,只需要阅读前三章,就可以掌握Gi ...
- flask中的表单文件上传
在表单中上传文件时,一定要加入 enctype="multipart/form-data" 属性 为什么要加入这个属性呢: enctype就是encodetype就是编码类型的意思 ...
- thinkphp框架中“关联操作”的完整定义详解
在复杂的关联操作中,如果要给关联定义增加可选的属性,我们可以采用完整定义的方式. 完整定义的格式是: protected $_link = array( '关联表名1' => arr ...
- 真正意义上的spring环境中的单元测试方案spring-test与mokito完美结合
真正意义上的spring环境中的单元测试方案spring-test与mokito完美结合 博客分类: java 测试 单元测试SpringCC++C# 一.要解决的问题: spring环境中 ...
- 将本地的一个新项目上传到GitHub上新建的仓库中去
转载: 如何将本地的一个新项目上传到GitHub上新建的仓库中去 踩过的坑: 1.在git push时报错 error: RPC failed; curl 56 SSL read: error:000 ...
- git合并分支上的commit为一条commit到master
标签: git 缘由? 有一次被人问到怎么把一个分支的所有commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,很少考虑到这种问题,于是特意搜索了相关资料. 场景 其 ...
随机推荐
- db first和code first
1. db first 是现有数据库,再写代码.根据数据库的表生成类. django里面:python manage.py inspectdb 2. code first 是先写代码,后创建数据库. ...
- DataGridView实时提交
自定义了一个工具,根据DataGridView中的值进行其他操作.在DataGridView中修改了值,直接做其他操作时, 结果DataGridview中的值显示为a,则操作的属性却是没修改后的值b. ...
- PHP基础语法 【】【】 PHP函数
<?php //注释语法 /* 多行注释 */ //输出语法 echo "hello"; echo "world","dhakj"; ...
- Ubuntu系统中各种文件颜色的含义
蓝 色:文件夹 ,ls -l或ll时可以看到权限部分的第1个字母是d红色:压缩文件 绿色:可执行文件,包括jar白色:文本文件红色闪烁:错误的符号链接淡蓝色:符号链接黄色:设备文件灰色:其它文件 ...
- nginx内置变量 大全
nginx内置变量 内置变量存放在 ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_u ...
- [yum] yum使用光盘安装或更新软件
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_ ...
- [archlinux][crypto] 从T450迁移archlinux操作系统至T460s笔记本
从T450笔记本迁移archlinux操作系统之T460s笔记本,同时: 1. 使用cryptsetup做底层块加密. 2. 全新使用btrfs文件系统. 一,硬盘分区. 1T的SSD,使用U ...
- 转:jdk动态代理实现
原文链接: jdk动态代理 注:文章中用常用的流程实现 动态代理,流程逻辑比较清晰.文章后面对 “为什么要使用接口” 原理分析还未细看. jdk的动态代理为什么用接口,内部是什么原理呢?看了几篇文章貌 ...
- PLSQL分级取数据
分级取数据 select employee_id,last_name,job_id,manager_id from employees start with employee_id=101 --emp ...
- easyui中多级表头,主表头不能添加field字段,否则不居中
<th field="" width="120" align="center" align="center" co ...