2017-05-10 70 views
0

我喜歡groovy。這是非常強大的腳本,我們在任何地方都使用它。最近在Jenkins服務器上,我們試圖通過subst命令創建駐留在虛擬驅動器上的一些文件。問題是,似乎groovy不支持虛擬驅動器,但我沒有找到任何確認。這是真的嗎,有沒有解決方法?如何在groovy中列出虛擬(子)磁盤中的文件?

這裏是我們使用的示例代碼:

import groovy.io.FileType 

def list = [] 
//the original file path for T: is C:\Users\MyUser\workspace\MyProject\src\test\data 
def dir = new File("T:" + "\\") 
dir.eachFile (FileType.FILES) { file -> 
    list << file 
} 

list.each{ 
    println "${it}" 
} 

我們得到的結果是:

[EnvInject] - 判斷Groovy腳本內容[EnvInject] - [錯誤] - 問題在構建 包裝器中定義的注入環境變量時發生:org.jenkinsci.lib.envinject.EnvInjectException:無法對 評估腳本。 java.io.FileNotFoundException:T :.請參閱系統 登錄更多信息

任何幫助表示讚賞。

+1

我過去是這樣的掙扎着,顯然是「虛擬驅動器映射」並不一定對所有用戶可見。你是如何設置虛擬驅動器的,以及Jenkins運行的用戶和權限? (如果您指定,可能會提示正確的專家提出見解) –

+0

嗨Hugues Moreau 9.感謝您的反饋。這是有趣的提示。我正在用我自己的用戶運行Jenkins。有趣的是,我現在在SoapUI下嘗試了相同的腳本,並且它工作正常。這意味着Groovy可以處理虛擬驅動器,但在Jenkins下無法處理它們。我會盡力調查更多這一部分。 – Gico

+0

詹金斯是否作爲服務運行?這也很重要 –

回答

1

我自己找到了答案,但@Hugues Moreau 9的輸入是引導我回答問題的那個。

這是一個權限問題。詹金斯在我的默認帳戶下運行,但問題是由Apache(httpd.exe)引起的。 httpd.exe作爲系統帳戶運行,並且沒有訪問T:的權限。我所做的是我從https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx下載PSEXEC.EXE,並通過這個工具,我開了一個命令行SYSTEM用戶:

PSEXEC -i -s -d CMD 

後,我建立一個SUBST目錄T:爲SYSTEM用戶。現在詹金斯和Apache可以訪問虛擬驅動器。

正如雨果指出的更精確的描述,問題就在這裏:https://stackoverflow.com/questions/182750/map-a-network-drive-to-be-used-by-a-service

相關問題