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

相關文章
相關標籤/搜索