PSExec issues with Jenkins

來源:互聯網
上載者:User

由於需要做自動整合測試,所以需要做到自動部署,而由於ci server和test server是區域網路內的兩台不同的伺服器,所以需要遠程執行,因此我想到了用微軟的一款免費工具PSTools中的PSExec(目前最新版本為1.98)。在Jenkins中使用PSExec,碰到了一系列的問題,我也在嘗試解決,這個過程中解決了部分問題,但仍然有關鍵性問題沒有解決,但是我先把這些過程記錄下來。

 

*.遠程執行一個批處理指令碼出錯,提示:"MSBUILD : error MSB1009: Project file does not exist. Switch: ***.proj"

原因:在批處理中通過msbuild調用***.proj檔案進行相關操作的時候,***.proj檔案名稱需要以絕對路徑給出,而不能給相對路徑,相對路徑會依賴於當前執行目錄,在Jenkins中通過PSExec來執行,增加了使用相對路徑的複雜度,所以使用絕對路徑相對更加方便。那麼如何擷取***.bat的當前路徑呢?

解決辦法:在批處理裡面可以使用%~dp0來擷取到,從而解決***.proj需要使用絕對路徑的問題。

 

*.在Jenkins中調用含有PSExec處理的批處理指令碼時,Jenkins的構建過程一直掛著直到逾時

原因:由於PSExec在初次使用時會彈出license確認提示框。

解決辦法:增加/accepteula選項。

 

*.MSBUILD : error MSB1008: Only one project can be specified.

原因:在***.proj檔案的路徑中含有空格。

解決辦法:在整個路徑上使用雙引號。

 

*.System error 1312 has occurred. A specified logon session does not exist. It may already have been terminated. The network connection could not be found.

這個是在使用net use進行建立網路磁碟映射以拷貝檔案到遠程伺服器時出現的錯誤:

net use \\1.2.3.4\DropLocation /user:administrator password

xcopy /s DropLocation \\1.2.3.4\DropLocation /y
net use \\1.2.3.4\DropLocation /delete

這個問題很詭異的,有人說要加上網域名稱,可是我的伺服器沒有入獄,那麼用機器名如何呢?結果還真的就可以,自從在account name前加上了domain name / computer name,就沒再出現過這個問題了。我也不能夠確定這個問題的真正原因是什麼。

 

*. Access is denied. Couldn't access 1.2.3.4

在解決了hung up的問題後,緊接著這個問題接踵而至,這個事在Jenkins中使用PSExec出現的一個難以繞開的問題,到現在為止都沒有找到很好的解決辦法。

其中有一條線索:

Possible reasons:
1) psiexec.exe shows EULA message during first run.
2) Permissions
3) dll function can require user session.
To avoid these issues please try following scenarios:

1) with "-accepteula" argument
2) with "-s" argument
3) with "-i" argument

http://stackoverflow.com/questions/5653836/psexec-hang-while-being-executed-from-a-very-simple-c-sharp-or-c-gui-program-c

可是試之無用。

又有另一哥們說加-h,可是我查看了PSExec /?沒有發現有-h選項,這個時候開始懷疑我使用的PSExec的版本,一看時1.96,而最新的是1.98,趕緊去微軟的網站上下載最新的PSExec (http://technet.microsoft.com/en-us/sysinternals/bb545027),新版本裡果真支援-h,考慮到了vista及以後windows版本的許可權問題。不過試了-h後,問題還是依舊存在,我和這個哥們同病相憐:

---------------------------------------------
Posted: 12 February 2012 at 5:51am
Hi, I'm using the psexec v.1.98 but still suffering the issue with -h option. What revision of psexec you're using? Thanks.
---------------------------------------------

 

此外,PSExec 1.96和1.98在文法上還是有些差異的。1.96可以運行成功的指令碼在1.98下竟然報錯:

Couldn't access 1.2.3.4:
Logon failure: unknown user name or bad password.

最後需要改成這樣,才可以通過:

psexec \\1.2.3.4 -u administrator -p password -n 60 -accepteula "C:\DropLocation\ABC Deployment\ABC.Database\DeployABCDatabase.bat"

可以問題依舊。

 

又一個哥們據說下面的可以成功執行,只是無返回:
psexec.exe -accepteula \\1.2.3.4 -u administrator -p password -w "DropLocation\ABC Deployment\ABC.Database" "C:\DropLocation\ABC Deployment\ABC.Database\DeployABCDatabase.bat"

可是我試了還是無用。

 

那麼用.net做一個殼,通過這個殼在一個新的進程裡來調用PSExec如何呢?因為手動在批次檔中運行可以成功,只是通過Jenkins調用不能成功而已。用.net console application做了一個簡單的殼,在裡面直接建立一個進程,使用後的問題還是一樣:

The handle is invalid.
Access is denied.
Connecting to 1.2.3.4...
Couldn't access 1.2.3.4:

 

那看來還是執行賬戶的原因,如果可以run as administrator會怎樣呢?實現這個做法有兩種方式:CreateProcessAsUser和CreateProcessWithLogonW。

那使用CreateProcessAsUser來啟動cmd執行看看(http://blogs.msdn.com/b/alejacma/archive/2007/12/20/how-to-call-createprocesswithlogonw-createprocessasuser-in-net.aspx),可惜執行CreateProcessAsUser失敗,報1314錯誤(CreateProcessAsUser error #1314),有人說啟用本機使用者組的目標使用者以下許可權,就可以正常執行了:

Act as part of the operating system
Create a token object
Log on as a batch job

但是我加了,似乎仍然不行,似乎使用CreateProcessAsUser又碰到了冰山了,那就試試另外一個方法CreateProcessWithLogonW,fuck,在Jenkins下執行CreateProcessWithLogonW也有問題:Access is denied。非常奇怪,改一下Jenkins的Log on賬戶呢?改成了Administrator後,這個錯誤竟然就沒再出現了。只是又發現了CreateProcessWithLogonW似乎建立的進程一閃而逝,而且遠程執行似乎並未真正執行。悲催。。。更悲劇的是,曾經出現過的問題又出現了:

'ABC.Service.deploy.cmd' is not recognized as an internal or external command,operable program or batch file.

 

問題研究在繼續。。。歡迎大家共同交流學習。謝謝。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.