2016-08-24 156 views
2

在slave上運行Jenkins作業時,我得到了這個控制檯輸出。該工作應該創建一個文件並將其放入c:\foo\services.csv在slave上運行powershell命令 - Jenkins

這裏是工作PowerShell命令:

Get-Service | Export-CSV c:\foo\service.csv 

注意在這個控制檯輸出詞「搭橋」。我無法擺脫它。我認爲這是問題:

[AnonymousJWTApi] $ powershell.exe -nonInteractive -ExecutionPolicy 搭橋 「& 'C:\用戶\ XXX \應用程序數據\本地的\ Temp \ hudson1582303083838020200.ps1'」

我在網上發現,在從站上運行坐在主站上的腳本時發生錯誤。

所以我手動創建了奴隸的腳本,並把它放在c:\foo\listServices.ps1。然後在Jenkins(master)中,這個命令在slave上運行:「C:\foo\listServices.ps1」來調用腳本直接從slave運行。

我仍然得到相同的控制檯輸出...關於「繞過」的東西似乎仍然導致它無法正常工作。 csv文件沒有放在foo文件夾中。它是否阻止了它的工作,如果是這樣,那麼解決方案是什麼?

並全面控制檯輸出:

Started by user anonymous 
Building remotely on slave1 in workspace C:\Jenkins\Master\workspace\AnonymousJWTApi 
> git.exe rev-parse --is-inside-work-tree # timeout=10 
Fetching changes from the remote Git repository 
> git.exe config remote.origin.url C:\Users\xxx\Source\Repos\AnonymousJWTApi # timeout=10 
Fetching upstream changes from C:\Users\xxx\Source\Repos\AnonymousJWTApi 
> git.exe --version # timeout=10 
> git.exe -c core.askpass=true fetch --tags --progress C:\Users\xxx\Source\Repos\AnonymousJWTApi +refs/heads/*:refs/remotes/origin/* 
Seen branch in repository origin/master 
Seen 1 remote branch 
Checking out Revision a7087f81af855cc96b8763a5ec66b96c19a44a30 (origin/master) 
> git.exe config core.sparsecheckout # timeout=10 
> git.exe checkout -f a7087f81af855cc96b8763a5ec66b96c19a44a30 
> git.exe rev-list a7087f81af855cc96b8763a5ec66b96c19a44a30 # timeout=10 
[AnonymousJWTApi] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\xxx\AppData\Local\Temp\hudson1582303083838020200.ps1'" 
Finished: SUCCESS 

編輯:該文件得到保存到主...:P

似乎從沒有打算舉辦PowerShell腳本或他們的輸出,我不知道。

+0

您是否登錄過從站並嘗試手動運行該命令?怎麼了? –

+0

@ChrisN是的,它在那麼做的時候 – BeniaminoBaggins

回答

2

-ExecutionPolicy Bypass確保可以運行腳本文件,而不管適用於計算機或用戶的執行策略如何。這是正確的,這不是你問題的原因。

問題可能是權限。

詹金斯奴隸代理正在作爲某個用戶運行;無論是您用來啓動它的用戶,還是作爲服務運行的用戶,它都將是服務帳戶。

用戶可能沒有權限寫入C:\Foo,因此您可以檢查。

另一種方法來測試,這是寫入工作空間目錄,所以做這樣的事情:

Get-Service | Export-CSV $env:WORKSPACE\service.csv 

這應該工作。如果是,則更改C:\Foo目錄的權限,或者將該從站作爲已具有權限的帳戶運行。

這裏有一個方法,你也許能告訴這兩個用戶正在運行的服務,並在工作區目錄爲:

Get-ChildItem env:\ | Out-String | Set-Content -Path $env:USERPROFILE\env.txt 

這會寫一個名爲env.txt到用戶的配置文件運行腳本,包含所有環境變量(包括%WORKSPACE%)。您只需瀏覽每個用戶配置文件即可查看其最終位置,然後您就會知道該用戶。

+0

如何找到$ env:WORKSPACE的位置?在master的powershell中運行它實際上是c盤,權限被拒絕。但在奴隸似乎工作,我只是不知道在哪裏尋找文件 – BeniaminoBaggins

+0

你如何運行奴隸作爲一個帳戶? – BeniaminoBaggins

+1

@Beniamino_Baggins當您在主設備上定義了從節點時,您指定了FS根目錄; 'workspace'將會低於這個級別,然後我認爲它會在那裏創建一個文件夾,裏面有工作的名字。請參閱https://wiki.jenkins-ci.org/x/BAN-Ag – briantist