jenkins之SSH Publishers环境变量

我使用的是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

相关文章
相关标签/搜索