2013-05-28 4 views
0

У меня есть установка Jenkins (версия 1.474), работающая на компьютере под управлением Windows Server Enterprise 2007, и У меня возникла проблема при запуске цели тестирования maven через Jenkins. Мой тест должен прочитать текстовый файл в настроен пути, и я получаю «FileNotFound» исключение при его запуске:FileNotFound by Jenkins на виртуальном диске Windows

path: file:////X:/TESTIN/file.txt 
java.io.FileNotFoundException: X:\TESTIN\file.txt (The system cannot find the path specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:120) 
    at java.io.FileInputStream.<init>(FileInputStream.java:79) 
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) 
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) 
    at br.com.telecomassociates.taalarms.EncoderTest.open(EncoderTest.java:69) 
    at br.com.telecomassociates.taalarms.EncoderTest.readFile(EncoderTest.java:48) 
    at br.com.telecomassociates.taalarms.EncoderTest.testDecrypt(EncoderTest.java:22) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 

Проблемная точка является то, что этот файл ссылается через виртуальное окно привод:

файл находится физически в D: /TESTOUT/TESTIN/file.txt но мы использовали вышеуказанную команду:

subst X: D:/TESTOUT 

и мы ссылаемся его в нашем тестовом коде файла URI: /// X:/TESTIN /file.txt.

Когда Дженкинс/Maven запускает его я получаю исключение FileNotFound, но, когда я запускаю ту же команду, используя «тест МВН» в командной строке Windows, файл читается правильно:

Runs fine on mvn test

Вы, ребята, знаете, что может вызвать проблему?

+2

Является ли Jenkins под управлением того же пользователя, что и ваша командная строка? –

+1

Я предполагаю, что jenkins работает как пользователь службы, который не имеет этого диска. – jtahlborn

ответ

0

Оба @ lee-meador и @jtahlborn указали мне в правильном направлении. Мой Jenkins работает как веб-приложение внутри Tomcat, которое работает как служба. Оказывается, Дженкинс не смог увидеть диск X:.

Чтобы решить эту проблему, я следовал за советом с https://code.google.com/p/psubst/. Я создал файл «.reg» со следующим содержимым:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\D:\\TESTOUT" 

Затем я выполнил его и перезапустил машину.

Привод X: теперь доступен для всех пользователей, и Дженкинс может его отлично видеть.

Смежные вопросы