2017-05-10 97 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

相关问题