使用TortoiseSVN的客户端钩子脚本触发Jenkins构建

我们项目在开发过程中使用了Jenkins构建Windows版本,为了通过自动触发使构建的版本保持最新,可以采用的方法如下:

  • Jenkins Poll SCM:设置Jenkins定时检查变更,在SVN版本号有变更的情况下执行构建;
  • Jenkins Remote Trigger + SVN Post Commit Hook:配置SVN仓库的Post Commit Hook,在提交完成后触发Jenkins远程构建;

显然,第二种方法更可取一些。但是在公司内配置SVN Server Hooks需要申请权限和访问规则。

幸好,我们使用的TortoiseSVN支持客户端钩子脚本(Hook Scripts)。

客户端钩子脚本的类型和参数

TortoiseSVN的客户端钩子脚本支持以下几种类型:

tortoisesvn-hook-script-types

我们需要的是Post-commit类型的脚本。在脚本执行的时候,TortoiseSVN会传递的参数信息如下:

tortoisesvn-post-commit-hook-params

这些参数的意义如下:

tortoisesvn-post-commit-hook-param-meanings

其中,PATH指向的文件包含了本次提交影响到的所有文件的路径,ERROR指向的文件包含了本次提交的错误信息。这两个参数是我们需要关心的。

Post-commit脚本

我们使用的脚本如下:

HOOKS/POST_COMMIT_HOOK.BAT

Python脚本的封装,内容如下:

HOOKS/POST_COMMIT_HOOK.PY

实际的钩子脚本,内容如下:

钩子脚本的主要工作如下:

1. 判断本次提交是否出错,如果有错误,说明提交未成功,退出脚本;
2. 遍历本次提交影响到的所有文件,如果包括源代码文件(‘.h’, ‘.cpp’, ‘.cc’, ‘.c’),或者项目配置文件(‘.vcxproj’, ‘.vcxproj.filters’),则说明需要触发构建,否则退出脚本;
3. 调用jenkins_job_url触发构建。

JENKINS JOB URL

钩子脚本中jenkins_job_url的定义如下:

其中的变量含义分别如下:

USER/USER_API_TOKEN

Jenkins用户名和对应的API TOKEN。

jenkins-user-api-token

JENKINS_URL

Jenkins的访问路径。

JOB_NAME

项目名称。

TOKEN_NAME

在项目的远程构建中设置的身份验证,需要启用触发远程构建的选项。

jenkins-job-token-name

设置钩子脚本

打开TortoiseSVN设置界面,选择钩子脚本:

tortoisesvn-hook-script

点击增加,打开设置钩子脚本界面:

tortoisesvn-hook-script-setup

进行以下设置:

  • 设置钩子类型为提交之后;
  • 设置工作副本路径为trunk目录;
  • 设置执行的命令行为post_commit_hook.bat;
  • 选中运行时隐藏脚本和总是执行这些脚本选项,不要选中等待脚本运行结束选项。

验证构建

在提交版本后,检查Jenkins中是否触发了构建。如果成功触发了构建,控制台输出应该如下:

jenkins-console-log

参考

猜你喜欢

转载自www.cnblogs.com/h2zZhou/p/10382350.html