SVN自动触发构建一共有3种方式。
分别为Jenkins定时轮询触发。
SVN客户端创建钩子触发。
SVN服务器端创建钩子触发。
Jenkins定时轮询触发Jenkins定时轮询触发是使用Jenkins 轮询SCM功能定时检查SVN是否有变更触发构建。
Jenkins的轮询SCM的说明上提到该功能需要扫描整个Jenkins工作区并验证,操作性能要求比较高。我们依然验证一下这个功能。
在配置Build Triggers选项中勾选轮询SCM,在Schedule输入 * * * * *表示每分钟轮询一次,即代码提交后1分钟触发构建。
设置完之后我们提交代码就会自动构建了。相比手动构建,自动构建左边菜单栏会显示轮询日志,右边会显示由SCM变更启动,表明是轮询SCM触发的构建。
SVN客户端钩子触发SVN客户端钩子触发是在本地提交的时候执行本地的Post-Commit钩子,通过这个钩子执行脚本使用http请求调用jenkins的远程构建接口。
生成用户授权Token在系统配置-管理用户-用户-配置的API TOKEN点击生成新的Token按钮,创建一个token。我们需要根据这个token来获取权限。
在项目的配置中修改Build Triggers,勾选Trigger builds remotely支持触发远程构建。在Authentication Token输入一个自定义的串,我们可以使用JENKINS_URL/job/JOB_NAME/build?token=TOKEN_NAME来远程构建项目。比如我们当前项目可以使用:8080/job/unittest/build?token=123远程构建
创建一个bat脚本。命名为post-commit-unittest.bat,我们在这个脚本里写入参数,将真正执行通知的脚本分离出来,这就可以重用了。
SET CSCRIPT=%windir%\system32\cscript.exe SET VBSCRIPT=F:\Repositories\JenkinsTest\hooks\post-commit-hook-jenkins.vbs SET JENKINS=http://127.0.0.1:8080/ SET JOBNAME="unittest" SET TOKEN="123" REM AUTHORIZATION: Set to "" for anonymous acceess REM AUTHORIZATION: Set to encoded Base64 string, generated from "user_id:api_token" REM found on Jenkins under "user/configure/API token" REM User needs "Job/Read" permission on Jenkins REM AUTHORIZATION=base64(test:1184023ac835f44484f52316235a033db8) SET AUTHORIZATION="dGVzdDoxMTg0MDIzYWM4MzVmNDQ0ODRmNTIzMTYyMzVhMDMzZGI4" "%CSCRIPT%" "%VBSCRIPT%" %JENKINS% %JOBNAME% %TOKEN% %AUTHORIZATION%SVN调用脚本会传入3个参数
1. 当前项目的SVN仓库地址 2. 当前的版本号 3. 事务名称这里暂时不需要用到。
通过CScript.exe调用执行vbs脚本。
CScript.exe是Windows脚本宿主的一个版本,可以用来从命令行运行脚本。
通知脚本参数说明
1. CSCRIPT:CScript.exe的路径。 2. VBSCRIPT:同时jenkins的脚本路径。 3. JENKINS:jenkins服务地址。 4. JOBNAME:项目名称。 5. TOKEN:项目的Token。 6. AUTHORIZATION:用于授权token。AUTHORIZATION值为base64(user_id:api_token)
设置钩子在SVN客户端的设置中找到钩子脚本,点击添加。
设置路径和脚本路径,注意左下角两项勾起来。
创建通知脚本