Jenkins Slave node環境變量設置有不少trap,在最近的工做當中,我把slave部署在red hat linux 上,進行c++項目的編譯部署和發佈,可是在執行工程的時候,總會報出某些命令 command cannot found,這種問題很是奇怪,你已經在linux的環境變量中設置了PATH等變量,並且在服務器上手動執行命令的時候沒有任何問題。個人master主機部署在windows機器上,經過 Launch slave agents on unix machines via shh的方式運行slave.node
全部的一切看似正常,可是當你查看slave node 的系統信息的時候,你會發現以下狀況:linux
PATH根本不是你設置的PATH,我倒如今都沒弄明白這個path slave是從哪裏讀取出來的,你能夠看到這個path裏面沒有你所要執行的命令。首先咱們要確認的一點是,你在linux上環境變量是設置在哪一個文件裏面的,你們都知道在linux上能夠有三種方式設置環境變量:c++
1. .bashrcshell
2. etc/profilewindows
3. .bashprofilebash
坑爹的事情發生了,jenkins 是從sh去執行shell的,而不是從bash執行,因此你在bash.*中設置的環境變量jenkins是讀取不到的,一樣你在你本身的shell腳本里面設置環境變量,jenkins一樣讀取不到,所以你只有兩種方法去改變你jenkins slave的PATH路徑:服務器
1.編輯你的etc/profile文件,把你的path放在這個文件中,可是你的shell腳本不能是#!/bin/bashunix
2.在你的slave node 配置頁面,增長你的node properties的environment variable,添加PATH。blog
注意,最坑人的是,當你作了這兩種變動,你在你的slave node 配置頁面中看到環境變量仍是跟原來同樣,不會有任何變化,我就是被這個給坑了,反覆嘗試。部署
總之你作了這兩個更改以後,一切都OK了,我的以爲這個是jenkins的bug。