svn hook远程构建jenkins实现配表规则检查

前言:目前svn hook+远程构建jenkins+导表规则检查的详细设计还没有看到有具体的博文,所以这里提供一下我在这方面的具体设计过程,供大家参考,如果有更好的设计流程或者建议,请留言给我,感谢感谢!

1、搭建本地仓库

本地创建local_repository文件夹,然后在文件夹下右击选择TortoiseSVN>Create repository here创建本地仓库

 

创建完,进入local_repository文件夹下面,可以看到已经生成了许多文件,启动db就是仓库的存储数据库,可以不用理会,hooks下面是svn hooks的各种钩子文件。

 

这里介绍一下conf、hooks里面每个文件的功能:

文件名

描述

conf/password

用户文件,配置用户和密码

conf/authz

用户权限文件,用于配置用户权限

conf/svnserver.conf

配置启动参数

hooks的文件:

文件名

描述

post-commit.tmpl

提交完成后执行,需要传递2个参数:1.版本库路径,2.提交事务的名称

post-lock.tmpl

文件加锁后执行,通常用来发送锁定事件通知,需要传递两个参数给hooks脚本:1.版本库路径,2.锁定路径的认证用户名

post-revprop-change.tmpl

在修改revision属性之后执行

post-unlock.tmpl

文件解锁后执行

pre-commit.tmpl

提交之前执行,在start-commit之后,通常用来对提交内容的检查,需要传递两个参数给hooks脚本:1.版本库路径,2.提交事务的名称

pre-lock.tmpl

文件加锁前执行

pre-revprop-change.tmpl

在修改revision属性之前执行

pre-unlock.tmpl

文件解锁前执行

start-commit.tmpl

始提交时执行,在pre-commit之前,通常用来确定用户是否有提交权限

添加svn用户

这里建议先安装一个visualsvn server管理软件,具体怎么安装这里不再介绍。

启动svn server,软件界面如下所示

 

在Repositories下面如果是仓库,在图标的左上角会有个红色星号

 

下面有个Users文件夹,右击创建用户

 

创建完后,在仓库里面右击>properties(属性),会弹出属性界面

 

在属性界面中,第一个tag是人员管理设置,可以配置人员的读写权限,增删人员等操作。

 

2、配表规则

 

3、架构设计

项目设计的架构如下,客户端提交文件到仓库后,同时触发远程Jenkins的构建,构建的任务进行checkout提交并且进行规则检查,如发现有异常的提交,则推送内容到本地端

 

代码设计

(1)svn相关指令的使用

svn指令中需要用到的指令有:

客户端指令:svn info --show-item revision(获取版本号)、svn log -r 版本号 -v(获取提交的文件内容)

其中需要注意的一点是svnlook并不适用与客户端,svnlook这个指令应该是服务端仓库那边使用的,在客户端这边应该是用不了,特别是在有远程仓库的情况下是不适用的,因为SVNlook changed指令后面接的参数是仓库路径参数path,远程仓库情况时是没办法获取的。比较好的方法是使用svn指令,该指令是svn客户端下使用,在需要查看提交log中提交了哪些文件时,使用svn log还不行,svn log此时显示的仅仅能获取的是svn提交版本号、作者、时间这三个数据,也就是showlog窗口下显示的上半部分的内容,而想要显示具体的文件名字,则需要在后面添加版本号和-v,最后的格式如:svn log -r 某版本号 -v

有这样的一个疑问:为什么svn log没有显示刚提交的日志?

解答:如果在提交之后马上不带参数地执行 svn log,用户就会发现输出的日志消息中没有包含最近的几次提交,这种情况是由 svn commit和svn log的共同作用的结果. 首先,用户向仓库提交修改时, svn只更新了被提交的文件和目录的版本号,但是父目录依然是较旧的版本号,svn log默认从目录的当前版本号开始获取历史消息,所以用户就看不到刚提交的日志.解决办法是用svn update更新工作副本, 或通过选项-r显式地向svn log传递一个版本号

下图是获取提交的版本号

下图是获取某版本提交的文件名

 

 

(2)代码逻辑

获取提交文件名的逻辑

 

得到svn的文件格式如下:

前面开头的参数说明:

M:文件有修改

A:新增文件,(from xxx:版本号)表示该文件从另外一个文件修改而来

D:删除的文件,仓库中已经不存在该文件了

当然还有其他的参数,比如R、?、!、~、I这些,但是几乎不涉及到,所以这里不做多介绍。

 

svn hook配置

svn hook使用的是post commit来控制,在仓库>hooks路径下,创建post-commit.bat批处理文件,并保存为ANSI编码格式。

 

在post-commit里面的代码内容如下:

先设置python执行路径,有些情况下,无法直接使用python py文件的方式来执行python文件,所以我这里配置了python文件,置于其他具体的bat代码语法可以自行网上搜索查看。

 

此处所做的事情是创建jenkins对象并构建一个名为CheckTable的job,执行该bat后,会触发本地机器上jenkins进行构建CheckTable

这里需要下载python-jenkins依赖包,注意别下载了jenkins依赖包,他们两个是同名的不同依赖。

 

在checkdata.py里面,username是jenkins的账户名,password是用户名token。在用户列表里面的api token里面生成token。

 

在jenkins里面,构建时调用jenkins.py文件进行svn checkout/update后并检查规则,最后输出报告等内容。

 

jenkins.py中的核心逻辑代码,其中handerexcel.py是Excel读取逻辑,checkRule.py是表格规则检查,这里就不多黏贴了,因为不同项目的导表规则不一样。

 

4、Jenkins环境搭建

(1)下载Jenkins

Jenkins的下载地址https://jenkins.io/zh/

下载的msi文件可以进行安装

(2)启动Jenkins服务

安装好Jenkins后,进入Jenkins的安装目录,进入cmd模式使用指令:

java -jar Jenkins.war --httpPort=8080

如果启动Jenkins时,有报如下的报错时,说明机器上的jdk版本与Jenkins要求的版本不一致所致,最新版的Jenkins支持的jdk版本在[8,11],超过或者低于这个范围的jdk版本都不能启动成功,需要重装jdk版本

 

重装jdk并配置好jdk的环境变量后,重新启动Jenkins

 

http://localhost:8080进入网页打开界面如下

 

安装插件,选择推荐安装的插件模式,进入会自动安装各种常用的插件,安装插件的过程,会自动安装各种依赖。

 

创建一个job,名字名为checktable

不用触发器,不用代码,在构建里面使用window cmd指令执行响应的代码

 

配置构建后发送邮箱

 

邮箱配置

进入jenkins【系统设置】

 

配置Extended E-mail Notification

 

下面的默认即可,然后配置邮箱通知

 

5、构建过程中常见的问题

(1)、svn hook提交后,报拒绝访问

原因:由于svn server默认的用户是网络服务器账户,该账户没有处理bat文件的权限

 

解决方法:

去到【服务】里面将下面两个服务的账户改为当前计算机账户即可

 

具体的操作如下图所示

 

(2)jenkins配置邮箱时,测试不成功,报如下的错误

 

原因:可能是系统管理员邮箱地址没有设置或者设置与发送邮箱不一致

 

解决方法:尽量配置管理员邮件地址与下面的发送邮箱地址一致。

(3)截取build log使用BUILD_LOG_MULTILINE_REGEX方法只能显示匹配的行,不能显示内容

 

解决方法:使用BUILD_LOG_REGEX类替代

(4)截取的build log内容发送到邮箱里面的格式是乱的

 

解决方法:这是由于截取内容有HTML没有按照原格式输出导致的,只需要在内容中添加<pre></pre>标签即可

 

修改后的格式:

 

(5)邮箱每一次构建都会发送

原因:发送邮箱的内容使用的是python print出来的错误内容,python脚本没有额外的中端操作。

解决方法:在python脚本中根据是否存在print日志来决定是否要主动中断,即使用exit(1)来创建一个中断码给操作系统,jenkins里面通过errorlevel来获取该码来判断是否是成功还是失败。

python脚本添加如下返回判断

 

jenkins里面的batch脚本内容添加如下判断

 

这样一来,只要有python print的日志,那么我就主动让jenkins构建失败来创建失败邮件,而如果print内容为空的话,我就认为build成功的,不发送邮件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值