最近发现有个项目修改后在jenkins发布不生效,查找原因,根据输出的日志发现javac 命令不存在,但是登录上服务器发现手动输入执行javac 相关命令是没问题的,于是在jenkins中添加which java命令输出安装路径,发现跟/etc/profile中配置的环境变量不一致。

whoami
pwd
java -version
javac -version
which java

这就很奇怪了,/etc/profile中的配置不是全局的吗?那再修改用户文件夹下的.bash_profile试试,结果发现也不行。

因为jenkins是docker版本的,而该项目因为特殊性是jenkins中通过Execute shell script on remote host using ssh远程登录到宿主机再执行的javac和java任务,所以考虑是ssh登录后查到的环境变量与实际登录服务器查到的环境变量不一致导致的。

网上搜到的解决方案:https://www.cnblogs.com/linyufeng/p/12663162.html 和 https://blog.csdn.net/u013008898/article/details/126892575

究其原因是ssh登录后访问的环境变量是用户文件夹下的bashrc文件配置的,我直接把/etc/profile中自定义的参数部分copy过来了,修改相关参数后不要忘记执行 source bashrc 哦。

问题解决。


 

 

这里又想到一个解决办法:

上面当ssh无法执行javac相关命令时,却可以执行java相关命令,因为现在centos一些版本默认配置了java jdk,但没有配置javac,所以才导致了java可用而javac不可用。

既然如此,那可以在jenkins中先用javac 将所有文件编译生成对应.class文件,然后通过ssh执行java命令启动文件即可,这样就不需要用到宿主机ssh登录后的javac命令了。