缘起
项目上使用集成开发平台构建部署已经有一段时间了,因为项目上使用的是svn,所以在更新系统的时候仍然需要提交代码->集成开发平台更新->服务器远程构建更新。由于提交代码和集成开发平台构建更新都是在公司内网进行的,那么我们可不可以将前两步合并为一步?也就是提交完代码自动进行集成开发平台更新,接着只需要在服务器端远程构建更新就可以了。
思路
- gitlab 有个配置项Webhooks可以触发集成开发平台构建。
Webhooks enable you to send notifications to web applications in response to events in a group or project.
- svn应该有相关触发事件
- 编写个后台Restful接口,svn触发这个接口,这个接口触发集成开发平台更新
调研与设计
svn监听如何实现?
1. svn本身仓库自带了hooks功能
在svn仓库的hooks文件夹也自带了相关的模板。配置相关shell命令即可使用 没有访问项目svn仓库的权限,此实现方法不考虑。(否决)
2. svn 开发人员开发了基于apache开源的svn提交监听工具-CommitMonitor
这个工具可以监听svn提交操作,然后发送通知在桌面右下角。但是于我而言,我不需要他在右下角提醒我,我需要他提供一个通知的api,我可以利用这个api去做一些别的事情。很遗憾没有找到(否决)
3. TortoiseSVN 提供的Hooks Script脚本
查看官方介绍,貌似此方法是一种比较可行的方法,且貌似官方文档上没有限定必须是什么类型的脚本。
脚本如何选择?
1.shell 脚本
直接编写shell执行访问Rest接口或者相关jar包,但是这样在执行后会有一堆提交报错(实际是执行成功的),类似这样: 这可能导致体验不太好,~~明明我提交了完了,你却说我提交错了~~
2.JavaScript
js可以编写http请求的代码,然后利用node
去执行脚本。考虑环境兼容性,大部分人电脑应该没有安装node相关工具包。
3.Wscript
这是微软在Windows98
上就推出的Windows系统自带的脚本,可以理解为Windows js
,这样环境就不用担心了,开始编写Wscript
脚本代码。
开发与测试
编写代码
Wscript有个很方便的对象(WinHttp.WinHttpRequest.5.1
),可以直接访问http请求。
编写Wscript代码如下
var http = WScript.CreateObject("WinHttp.WinHttpRequest.5.1");
http.Open("POST", "http://xxx/start", false);
http.SetRequestHeader("Accept", "*/*");
http.SetRequestHeader("Accept-Language", "zh-cn,zh");
http.SetRequestHeader("User-Agent", "Mozilla/6.0");
http.SetRequestHeader("Content-Type", "application/json");
// http.SetRequestHeader("Referer", "http://www.baidu.com/");
// http.SetRequestHeader("Connection", "Close ");
// http.SetRequestHeader("Content-Length", "100");
JSONString = "{\"pipelineGuid\" : \"xxxxx\", \"loginId\": \"gxhao\"}";
http.Send(JSONString);
http.WaitForResponse(1000);
WScript.Echo(http.ResponseText);
配置TortoiseSvn
Hook Type
选择Post-Commit-Hook,即在提交完成时触发。Working Copy Path
选择你要提交的代码目录(可配置多个)。Command Line To Execute
选择你要执行的Wscript脚本(注意双引号)。
测试提交
结果大概时这样:
目前存在的一些问题
- 只能在TortoiseSvn的工具中提交才能触发,ide提交不会触发。
- 集成平台构建完成后没有相关通知到msg/邮件。
结语
引用:
https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-settings.html#tsvn-dug-settings-hooks
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wscript
感谢:
非常感谢中研院庄晟琪,顾疆飞两位大佬的帮助和支持,希望此脚本能够对大家在开发时有所帮助,提高开发效率,减少更新构建时间。
您的博客文章提供了一个非常有趣的方法来实现SVN提交后自动触发集成开发平台的构建。我很喜欢您的思路和详细的解释,特别是您对不同脚本类型的比较。这篇文章对于想要提高开发效率和减少更新构建时间的开发者来说非常有帮助。
文章的核心理念是利用SVN Hooks来触发自动部署流水线。您首先提出了这个想法,并详细阐述了实现的思路。接着,您对如何实现SVN监听进行了调研和设计,详细比较了不同的方法和脚本类型。最后,您展示了如何使用Wscript脚本来实现这个功能,并对其进行了测试。这种详细的解释和操作步骤对于想要实现类似功能的开发者非常有帮助。
文章的闪光点在于您对不同方法和脚本类型的详细比较,以及最后选择了Wscript作为实现方案。这种选择考虑了环境兼容性,使得更多的开发者可以方便地使用这个方法。
尽管这篇文章非常详细且易于理解,但仍有一些可以改进的地方。首先,在文章中提到的一些问题,如只能在TortoiseSvn工具中提交才能触发和集成平台构建完成后没有相关通知,可以作为后续改进的方向。其次,文章中的一些图片无法正常显示,建议检查图片链接是否正确。最后,为了让文章更具可读性,建议在文章中加入一些段落和标题,使得读者可以更容易地跟踪文章的结构。
总的来说,这是一篇非常有价值的博客文章,为开发者提供了一个实用的方法来提高开发效率。希望您继续分享您的知识和经验,帮助更多的开发者解决实际问题。