我使用的是docker部署jenkins,使用172.16.1.245做为部署服务器。html
1.问题docker
在SSH Publishers里执行的环境变量,不是ssh server主机设置的环境变量,这样会致使某些经过SSH Publishers执行的程序由于环境变量不一样而执行错误。shell
2.实际案例bash
例如咱们在172.16.1.245机器设置环境变量LD_LIBRARY_PATH服务器
2.1设置LD_LIBRARY_PATHssh
2.1.1先设置/etc/profilespa
vi /etc/profile
使设置生效code
source /etc/profile
2.1.2再设置root/.bash_profileserver
vi ~/.bash_profile
~表明当前用户目录,例如root用户~等同于root,因此上面命令等同于htm
vi root/.bash_profile
使设置生效
source ~/.bash_profile
2.1.3检查设置是否生效
echo $LD_LIBRARY_PATH
通过检查LD_LIBRARY_PATH环境变量与设置的一致
2.2经过jenkins的SSH Publishers查看环境变量LD_LIBRARY_PATH
2.2.1新建job,选择“建立一个自由风格的软件项目”
2.2.2在“构建”里选择“Send files or execute commands over SSH”
2.2.3在SSH Publishers填入一下内容
就是打印环境变量LD_LIBRARY_PATH
2.2.4当即构建,查看控制台输出
应该输出“./:./”,但是什么都没有输出,说明环境变量有问题。
2.3缘由
查了不少博客,大概意思就是,经过ssh执行远程主机命令,使用的是本地服务器的环境变量;使用ssh登陆远程主机使用的是远程服务器的环境变量。
即,使用SSH Publishers执行exec使用的是ssh执行远程主机命令,使用的是jenkins部署服务器的环境变量(我使用的是docker部署的,即为容器的环境变量)。
http://www.javashuo.com/article/p-hfeqmsve-cg.html
2.4解决问题
我须要使用远程服务器(172.16.1.245),而不是docker的环境变量。
使用 source使环境变量生效
source /etc/profile source ~/.bash_profile echo $LD_LIBRARY_PATH
能够看到,环境变量LD_LIBRARY_PATH是远程服务器(172.16.1.245)环境变量,设置成功。
3.总结
我出现的问题是使用jenkins部署程序出现异常,使用xshell远程链接后运行程序,程序运行正常。检查过jenkins的SSH Publishers里执行命名的用户,服务器是否为172.16.1.245,都没有问题,最后检查到jenkins输出的环境变量PATH与172.16.1.245的PATH不同,最后找到问题的缘由。
若是环境变量涉及多个文件,须要让设置的全部文件生效。例如:PATH