1. 程式人生 > >20170912jenkins構建前執行遠端shell指令碼

20170912jenkins構建前執行遠端shell指令碼

jenkins已安裝ssh外掛為前提 1、在系統管理,系統配置中,新建ssh site;


2、在構建工程中配置ssh site以及執行的指令碼;
3、遇到的問題; 1)root不開放遠端連線,死活都不給,解決的辦法使用kduser進行連線; 2)kduser使用者沒辦法直接執行tomcat-amp,因為tomcat-amp隸屬於root; tomcat-amp不能修改為kduser持有,因為tomcat-amp啟動的程序只能是root; tomcat-amp程序只能是root,是因為tomcat-amp程序會寫東西到一個root持有的目錄; 不能修改這個寫入目錄的路徑,是為防止伺服器磁碟爆掉。該寫入目錄是掛載路徑,程序寫入的東 西實際上是儲存到了統一儲存中; 不能修改該目錄為其它使用者持有,是因為掛載操作只能由root去mount,到此,該路已不通。好,請回頭。 3)kduser使用者是可以執行所屬它的shell的; 4)該shell名為ampTomcatRestart.sh,在該指令碼中執行tomcat-amp; 5)因tomcat-amp為root,所以ampTomcatRestart.sh中應以root許可權執行tomcat-amp; 要root許可權,有一個環節,那就是要密碼。 第一時間想的方案是用互動式命令完成,如下: spawn xxx expect “xxx” send “xxx” 遺憾告知expect not command。沒事,yum install expect*,搞掂。 糾結從此時發生,spawn expect send已經寫出花,沒有效果。 不能證明是錯,也不能證明是對。 時間啪啪啪,此路不通,請及時回頭,請看6。 6)以root許可權執行,一是直接用su root身份,二是sudo command。 5的互動式操作為的就是免密,好吧,是偽免; 但5已不通,於是考慮對sudo免密;對kduser使用者配置sudo免密。該路順暢到令人流淚,具體: vi /etc/sudoers 增加一行 kduser ALL=(ALL:ALL) NOPASSWD ALL,強儲存; 對kduser來說,免密無阻礙,完美。 7)ampTomcatRestart.sh已可以root許可權執行tomcat-amp,好,興沖沖在構建步驟中sh ampTomcatRestart.sh; 8)被告知,need sudo to try。 這就難理解了,ampTomcatRestart.sh是kduser的,我就是kduser,還讓我sudo來run。好吧,強解釋:腳本里面用了sudo的命令,你要,就給唄; 9)在構建步驟中sudo su ampTomcatRestart.sh; 10)又被告知,需在tty終端,才能使用sudo; 這個比較好解釋,說sudo目前只能在tty端可使用,你配在jenkins端不好使。解決的辦法如下: vi /etc/sudoers 把Defaults requiretty註釋掉; 11)萬事具備,只欠重構一發; 12)哈,又被告知,root是不在sudoers file中的。 這個問題,出現的是最有含量的,以及最蹊蹺的。按理說sudo的是kduser,但為什麼又提示root不在sudoers file中呢,雖然root確實不在sudoers中。 那是因為構建工程的ssh site雖然配置的是kduser,但是這個kduser僅被用來決定是否有許可權去access。真正sudo的,其實還是tomcat程序所屬的root發出的。 13)解決的方法,把root也加到sudoers即可,參照6;