Jenkins slave遠端執行windows exe無視窗問題解決方法
在使用jenkinsslave下發並執行exe的時候遇到一個很奇怪的問題,之前實驗過程中能夠正常執行的exe在實際部署的環境下執行後無法顯示程式視窗,這樣導致有介面行為的一些測試程式無法正常得到結果。
經過一系列排查,基本確認該問題和jenkins的許可權控制有關,嘗試安裝一個新的帳號及許可權設定外掛role-strategy後,重新在slave機器上執行,exe視窗能正常顯示且程式正常工作。
嘗試不用role-strategy外掛,使用jenkins預設的” ConfigureGlobal Security”設定,啟用安全並設定訪問控制,問題也能解決:
而重新在家裡機器上和虛擬機器上清空所有資料,然後不開啟安全訪問,竟然還是能夠正常執行並顯示exe視窗……,如此神奇。
補充:
繼續追查發現,該問題並不是因為jenkins的許可權導致的問題,而是因為系統服務是以system啟動的,他執行在session0,而桌面及其他GUI程式則執行在session1,2,3...以上,如果想以jenkins的服務來執行GUI的windows exe,則需要有一個由服務啟動一箇中間程序來進行session和許可權切換。
可參考:http://www.installsetupconfig.com/win32programming/windowsservicesapis5_7.html 和 http://msdn.microsoft.com/en-us/library/ms682429.aspx
但是上面太麻煩了,為了簡單起見,我們可以使用另外一種方式,在windows計劃任務中啟動一個批處理並且設定成系統登陸啟動,批處理中執行slave的啟動,如
javaws http://192.168.1.8/computer/192.168.1.110/slave-agent.jnlp