📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
📢本文作者:由webmote 原创
📢作者格言:无尽的折腾后,终于又回到了起点,工控,我来了 !
前言
没有人喜欢windows平台下的自动化构建,一如多年前没人喜欢linux的桌面一样。不过由于windows平台具有巨大的客户群体和开发公司的死忠粉,因此Jenkins工具还是具有相当大的用户群体的,因此作为开发者的一员,有时候,不得不去了解下运维工作的内容,甚至自己也需要兼职干些什么。最近在考虑windows下ci集成,又拉起了jenkins的手,毕竟虽然界面难看,可是手真的很暖。
问题
Jenkins是一个可扩展的持续集成软件平台,也是CI的工具箱中的重要一员,持续集成,就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础。
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也意味着每天可能会发生多次集成。这应该是开发经理能想到的事情,不过在我向我的领导说起这事时,他竟然说根本没有的事,哎,奈何如此?
如果每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,那么从而能尽快地发现集成错误。团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件,这个说法竟然不能说服领导,有时候在低认知的团队做事情真的比较难。
刚说了一堆Jenkins的介绍,而我遇到的问题是:
Jenkins对批处理或powershell进行了输出跟踪,并且可以跟踪子进程,它在批处理结束后,会对整个进程树进行扫描,关闭所有拉起的其他进程。
这真是个好特性!当然是对资源利用来说的。
对于我这种想保持拉起的子进程,一直运行而不被关闭的做法而言,简直是灾难,经过了好多个小时的尝试,最终我发现了这个问题。
Jenkins杀死了 批处理拉起的进程!
解决
为了避免拉起来的进行被杀死,Jenkins提供了一些hack技术。
主要是设置2个环境变量,因此不管你是什么脚本,理论上都可以进行设置,以保持子进程继续运行。
下面是在Powershell脚本下写的代码:
# my_powershell_script.ps1 content
$ENV:BUILD_ID="dontKillMe"
$ENV:JENKINS_NODE_COOKIE="dontKillMe"
总结
又浪费了几天的时间,领导特别不喜欢,哎~~~~
自动化就是这么难落地!