jenkins[windows_slave cygwin] 執行GUI程式長時間卡頓(fixed)
分享一個issue,終於在不懈的努力下,解決了(耽誤了好長時間)...
現象
target:將老的jenkins上的job遷移到新的機器上,並採用pipeline的方式進行改寫。該job涉及在windows平臺install exe程式,需要搭建一個windows slave。通過將生成打包的程式安裝到windows上並啟動服務,為接下來automation case提供agent服務。
process:在搭建windows slave 的時候,發現無法通過pipeline方式呼叫windows上的exe程式,一直處於卡頓狀態。遠端登入到windows機器上發現程式的process已經在處理,但是一直處於running階段,結束不了。
排查
1. windows slave如何搭建(不在本文討論的範圍內),我們採用的是cygwin的方式( ofollow,noindex">https://docs.oracle.com/cd/E24628_01/install.121/e22624/preinstall_req_cygwin_ssh.htm#EMBSC340 ),這種方式的好處是我們可以在windows上跑shell命令,jenkins可以通過ssh的方式連線到windows上。排查下來,cygwin的service在新的windows上正常啟動,jenkins也能正常的訪問,並可以執行script,但是對於exe程式這種有gui的,出現了上述的情況。
網上資料比較少,只找到兩篇: https://blog.csdn.net/Anlegor/article/details/24329237 和 https://blog.csdn.net/lb445720337/article/details/78969175 ,對一般問題的排查還是有用的。
2.檢視工作管理員中安裝該exe程式的process session,發現都是0,而遠端登入進來同樣的使用者session 是2,進入誤區,認為是因為session不一致導致沒有許可權執行。
3.參照網上經驗指定windows slave上啟動sshd服務的user,如下:

並將其設定為管理員,restart。服務正常開啟,但是還是執行不了。並發現jenkins 認證出現問題,連不上該機器了,出現:
/bin/bash: Operation not permitted 這樣的錯誤,網上查下:需要重新指定下user:
editrights -a SeAssignPrimaryTokenPrivilege -u cy_user (cy_user為服務啟動使用者) editrights -a SeCreateTokenPrivilege -ucy_user editrights -a SeTcbPrivilege -ucy_user editrights -a SeServiceLogonRight -ucy_user
重新指定好後,jenkins可以正常連線了,然後發現pipeline可以正常的執行了!!!帶著疑惑,我又去翻看了下cygwin的安裝文件:

文件中並沒有強調一定要和jenkins連線使用者區分開來,我這也算是第一個吃螃蟹的人了。。。
結論:設定cygwin提供服務的user必須和jenkins連線到slave的user分開,不能是同一個。否則在處理類似於GUI程式的時候會出現長時間的卡頓。不是同一個的話這樣它會以系統管理員的方式去啟動service然後執行exe,而不是以jenkin的角色(某個session)來進行。