jenkins之SSH Publishers环境变量
我使用的是docker部署jenkins,使用172.16.1.245作为部署服务器。
1.问题
在SSH Publishers里执行的环境变量,不是ssh server主机设置的环境变量,这样会导致某些通过SSH Publishers执行的程序因为环境变量不同而执行错误。
2.实际案例
例如我们在172.16.1.245机器设置环境变量LD_LIBRARY_PATH
2.1设置LD_LIBRARY_PATH
2.1.1先设置/etc/profile
vi /etc/profile
使设置生效
source /etc/profile
2.1.2再设置root/.bash_profile
vi ~/.bash_profile
~代表当前用户目录,例如root用户~等同于root,所以上面命令等同于
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部署的,即为容器的环境变量)。
https://www.cnblogs.com/zhenyuyaodidiao/p/9287497.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
posted on 2019-11-01 10:37 SmilingEye 阅读(3535) 评论(0) 编辑 收藏 举报