svn php自动化部署,自动化部署-svn hook触发构建

目的

之前是通过轮询的形式,2分钟更新一次svn,即时性不高,现在想要实现提交代码时直接触发构建

方案

使用svn的服务器hook,当有代码提交时请求jenkins api实现构建

具体实现

1、jenkins的准备

jenkins的用户管理中添加Token,token需要保存下来,后面无法查看

设置需要触发的构建任务,构建触发器勾选触发远程构建,设置一个自定义的令牌Token

2、svn hook

这里还是使用python去请求jenkins,创建python文件PostTouchJenkinsBuild.py

#!/usr/bin/python#-*- coding: UTF-8 -*-

importargparseimportosimportrequests#定义参数

parser =argparse.ArgumentParser()#仓库路径

parser.add_argument('-s', '--repos', type=str, default=None)#版本号

parser.add_argument('-v', '--rev', type=str, default=None)#分支

parser.add_argument('-b', '--branch', type=str, default=None)#Jenkins Job Token

parser.add_argument('-t', '--job_token', type=str, default=None)#Jenkins Job名

parser.add_argument('-n', '--job_name', type=str, default=None)

args=parser.parse_args()#读取修改目录

svndirschanged =os.popen('"C:\\Program Files (x86)\\VisualSVN Server\\bin\\svnlook.exe" dirs-changed -r {} {}'.format(args.rev, args.repos)).readlines()#判断修改是否包含分支

for changed insvndirschanged:if changed.find("{}/".format(args.branch)) >=0:#请求jenkins进行构建 jenkinsurl为部署的jenkins地址

response = requests.get('http://root:113ce72325xxxxxxxx@jenkinsurl/job/{}/buildWithParameters?token={}'.format(args.job_name, args.job_token))

root为jenkins用户Id,113ce72325xxxxxxxx为上面添加的api token,其他跟项目有关的参数,调用时再传进来

在提交代码后触发,所以使用post-commit,在svn仓库相应项目的hooks文件夹中添加批处理文件post-commit.bat(windows服务器),任务名有中文时需要注意编码

SET REPOS=%1

SET REV=%2

"D:\Python\Python38-32\python.exe" "D:\Python\Project\SvnHookPython\PostTouchJenkinsBuild.py" -s %REPOS% -v %REV% -b trunk -t 11193a3f81441xxxxxxxxxxxxxxx -n LastOne-测试区

svn钩子触发时会传入两个参数,提交时的仓库路径和版本号,我们获取后传给python获取修改目录来判断修改分支,只有相应分支发生修改才进行构建

-s 仓库路径

-v 版本号

-t 任务设置的自定义令牌Token

-b 分支名

-n jenkins任务名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值