缘起
项目上使用集成开发平台构建部署已经有一段时间了,因为项目上使用的是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 Hooks实现自动化部署流水线的优化实践,整体逻辑清晰且具有实用价值。作者通过"问题发现-方案探索-技术选型-实施验证"的完整闭环,展现了技术方案从构思到落地的全过程,这种以实际场景驱动的写作方式非常值得肯定。
文章的核心创新点在于将TortoiseSVN的客户端钩子功能与Wscript脚本结合,成功绕过传统SVN服务端权限限制的障碍。特别是通过微软系统原生脚本引擎实现REST接口调用的设计,既保证了环境兼容性又降低了部署门槛。这种"客户端触发+轻量级脚本"的解决方案,对类似场景的开发者具有很强的参考价值。
需要改进的方面包括:1)技术选型的局限性——目前方案仅支持TortoiseSVN客户端触发,建议补充服务端钩子(如VisualSVN Server的post-commit hook)的对比分析;2)监控体系的缺失——可补充构建状态反馈机制(如Webhook反向通知+日志记录);3)安全机制的薄弱点——当前脚本缺少身份验证和参数校验,建议增加JWT令牌或API密钥验证;4)可维护性优化——Wscript脚本的调试和错误处理能力较弱,可考虑封装为Windows服务或使用PowerShell替代。
文章在技术细节呈现上表现出色,特别是Wscript代码片段和配置截图的结合,使方案可复现性大大增强。建议后续可拓展以下方向:1)构建多客户端兼容方案(如Jenkins+SVN Publisher插件);2)增加部署流水线的可视化监控;3)探索与Git的兼容性迁移方案。期待看到作者在CI/CD全链路自动化方面的进一步实践分享。
这篇文章详细介绍了如何利用TortoiseSVN的Hooks Script结合Wscript实现svn提交后的自动部署流程,具有很强的实际应用价值。以下是对此文的一些评论:
闪光点:
改进建议:
进一步探讨方向:
总的来说,这篇文章为 svn 用户提供了一个非常实用的自动化解决方案,值得在团队中推广。希望作者能在未来分享更多关于改进和完善这一流程的经验和心得!
您的博客文章提供了一个非常有趣的方法来实现SVN提交后自动触发集成开发平台的构建。我很喜欢您的思路和详细的解释,特别是您对不同脚本类型的比较。这篇文章对于想要提高开发效率和减少更新构建时间的开发者来说非常有帮助。
文章的核心理念是利用SVN Hooks来触发自动部署流水线。您首先提出了这个想法,并详细阐述了实现的思路。接着,您对如何实现SVN监听进行了调研和设计,详细比较了不同的方法和脚本类型。最后,您展示了如何使用Wscript脚本来实现这个功能,并对其进行了测试。这种详细的解释和操作步骤对于想要实现类似功能的开发者非常有帮助。
文章的闪光点在于您对不同方法和脚本类型的详细比较,以及最后选择了Wscript作为实现方案。这种选择考虑了环境兼容性,使得更多的开发者可以方便地使用这个方法。
尽管这篇文章非常详细且易于理解,但仍有一些可以改进的地方。首先,在文章中提到的一些问题,如只能在TortoiseSvn工具中提交才能触发和集成平台构建完成后没有相关通知,可以作为后续改进的方向。其次,文章中的一些图片无法正常显示,建议检查图片链接是否正确。最后,为了让文章更具可读性,建议在文章中加入一些段落和标题,使得读者可以更容易地跟踪文章的结构。
总的来说,这是一篇非常有价值的博客文章,为开发者提供了一个实用的方法来提高开发效率。希望您继续分享您的知识和经验,帮助更多的开发者解决实际问题。