要点:
流水线环节执行start脚本是在linux的根目录执行,如果根目录没有aplication.properties,就会根本加载不到aplication.properties文件,所以无论你如何修改外部的aplication.properties来配置项目的部署情况,也是加载jar包内的aplication.properties。
解决办法:
在你启动的shell脚本中,先执行命令进入aplication.properties所在的目录,在执行 java -jar 命令 就ok。
比如 下面这个start.sh脚本示例
#!/bin/sh
cd /www/wwwroot/myproject
java -jar /www/wwwroot/myproject/myweb.jar & #注意:必须有&让其后台执行,否则没有pid生成
还有个stop.sh脚本
#!/bin/sh
kill `lsof -t -i:你的程序端口号`
说说我的经历。
我想把我的spring boot框架的java项目部署到云效。项目里面的application.properties配置的7777端口,根据优先级,jar包外的application.properties会覆盖里面的application.properties的配置项。
日常环境中我的外面的.properties我配置项目挂在7777端口
预发环境中我的外面的.properties我配置项目挂在7778端口
坑来了。
这是我的日常环境启动脚本 路径是:/www/wwwroot/dachuang/start.sh
这是我日常环境的部署配置。
这里已经出现了坑的隐患。我设置的日常环境的.properties也是7777端口,所以当我访问项目正常时,我以为是正常的加载了.properties配置文件。
这是我的预发环境启动脚本 路径是:/www/wwwroot/dachuangpre/start.sh
这是我预发环境的部署配置。
当流水线走到预发环节,也执行成功了,环节的执行成功并不会判断你的服务是不是成功启动,环节只管是不是成功启动了脚本。实际上预发环境的脚本是执行了的,但问题是,实际上启动start.sh脚本的时候并没有加载到.properties配置文件,所以默认是加载jar包里的.properties配置文件7777端口,之前的日常环境已部署在了7777端口,所以端口冲突。此时,尽管预发环节显示部署成功,但是实际预发环境的项目是没有跑起来的。
所以就有个错觉,明明配置都一样,只不过用application.properties配置个不同的端口怎么会日常环境项目能通过7777端口访问,而预发环境确不能通过7778端口访问。
于是我猜是不是预发环境执行不到start脚本,所以导致挂在7778的项目不能访问(真是愚蠢至极啊,明明人家预发日志里面都写了脚本执行成功了)
后来经过种种苦寻解决方法(云效的资料真的太少了!!!)
终于寻得解决之道,就是在脚本执行java -jar 前加 cd application.properties对应的目录,完美解决!
真不容易啊!