Jenkins在windows平台下,让Powershell和批处理可以拉起进程并保持

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins在windows平台下,让Powershell和批处理可以拉起进程并保持相关的知识,希望对你有一定的参考价值。

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!

  • 📢本文作者:由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"

总结

又浪费了几天的时间,领导特别不喜欢,哎~~~~
自动化就是这么难落地!

以上是关于Jenkins在windows平台下,让Powershell和批处理可以拉起进程并保持的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins在windows平台下,让Powershell批处理可以拉起进程并保持

Jenkins在windows平台下,让Powershell和批处理可以拉起进程并保持

windows平台jenkins调用shell脚本报错

windows环境下jenkins+gradle+Android 自动打包部署

一步步部署基于Windows系统的Jenkins持续集成环境

一步步部署基于Windows系统的Jenkins持续集成环境