需求
开发机和Tomcat Server在同一个Domain,由于业务权限问题,本机无法测试一些场景,只能发布到Server才能测试,所以,开发阶段总是需要频繁发布。
其实发布流程比较简单流程化,所以才能写成脚本去处理。
1.mvn package
2.将war包copy到服务器tomcat目录下
3.stop tomcat services
4.start tomcat services
代码
要点
- 启动tomcat的时候,会启动springboot,这个过程大约10多秒,如果只是使用
start-service tomcat
的话,不知道springboot的启动情况。
所以想到将项目启动日志实时输出到控制台。可以该如何监视日志文件变化呢?
get-content log.txt -wait
这个-wait
参数就可以实现(很方便有没有!)
上面的命令一执行,把现有的日志也输出来了,根本停不下来。
我们的问题该是如何监视日志文件新加内容呢?
get-content log.txt -wait -tail 0
这个-tail
参数就可以实现(很方便有没有!)
这下没问题了。
至此我们的文件监视已经实现了。
再梳理一下具体需求,我们希望的是监视到某个想要的log后,就停止监视。不然后面的代码无法执行了。
get-content log.txt -wait -tail 0 | foreach {
$_;
if($_ -match "XXX")
{
break;
}
}
运行,很好,在匹配带预期的字符后会停止监视,但是停止了整个PowerShell script的执行。
why?
简单来说就是,break
和 continue
在for循环中和其他语言无异,但如果没在for循环中,那就stop的是整个pipeline.
那我们给它一个dummy loop
,给你包个循环好吧
do{
get-content log.txt -wait -tail 0 | foreach {
$_;
if($_ -match "XXX")
{
break;
}
}
}while($false)
至此,我们的需求完成了。
回头看看代码流程:
start-service tomcat
do{
get-content log.txt -wait -tail 0 | foreach {
$_;
if($_ -match "XXX")
{
break;
}
}
}while($false)
这里我们应该让启动tomcat的操作和监视文件的操作同时进行,不然启动服务之后,可能springboot都有启动了一半了,监视的日志就从半路开始了。
同时进行,那就让启动服务的操作后台运行即可。
start-job { start-service tomcat }
如果想获取job的返回结果,可以使用receive-job
,此处我们就不写了。
- 启动完成之后,自动帮我开浏览器
#if you want to kill all opened chrome
kill -Name chrome
pathtochromechome.exe "URL"
参考
https://stackoverflow.com/questions/18632/how-to-monitor-a-text-file-in-realtime
https://stackoverflow.com/questions/51981048/how-to-stop-get-content-wait-after-i-find-a-particular-line-in-the-text-file-us
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content?view=powershell-7.1
https://dankinsella.blog/live-monitor-log-files-with-powershell/
文章题目:PowerShell自动化发布SpringBoot项目到Tomcat-创新互联
URL网址:http://lswzjz.com/article/dhgehh.html