我们项目在开发过程中使用了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的客户端钩子脚本触发Jenkins构建

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

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

这些参数的意义如下:

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

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

Post-commit脚本

我们使用的脚本如下:

HOOKS/POST_COMMIT_HOOK.BAT

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

 
1
2
~dp0
*

 

HOOKS/POST_COMMIT_HOOK.PY

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

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
sys
os
copyfile
 
json
urllib2
 
:
)
 
)
 
:
)
    
:
)
 
]
]
]
]
]
]
 
#copyfile(path, current_path + '/path.tmp')
#copyfile(message_file, current_path + '/message_file.tmp')
#copyfile(error, current_path + '/error.tmp')
 
# if error is not empty, the commit should not success
:
:
)
:
# no such file, which should not happen
)
    
# if files include source files or project files, trigger ci build
]
 
:
:
:
True
 
False
 
False
 
:
:
:
True
;
 
:
)
    
 
'http://USER:USER_API_TOKEN@JENKINS_URL/job/JOB_NAME/buildWithParameters?token=TOKEN_NAME&cause=svn-post-commit'
 
)
)
 
)

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

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

JENKINS JOB URL

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

 
1
'http://USER:USER_API_TOKEN@JENKINS_URL/job/JOB_NAME/buildWithParameters?token=TOKEN_NAME&cause=svn-post-commit'

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

USER/USER_API_TOKEN

Jenkins用户名和对应的API TOKEN。

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

JENKINS_URL

Jenkins的访问路径。

JOB_NAME

项目名称。

TOKEN_NAME

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

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

设置钩子脚本

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

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

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

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

进行以下设置:

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

验证构建

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

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

参考

相关文章:

  • 2021-07-16
  • 2021-08-05
  • 2021-07-06
  • 2022-12-23
  • 2021-09-20
  • 2022-03-11
  • 2021-12-29
猜你喜欢
  • 2021-12-23
  • 2021-06-11
  • 2021-08-03
  • 2022-01-06
  • 2021-12-08
相关资源
相似解决方案