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