Как скопировать файлы из общего ресурса Unix на компьютер под управлением Windows с помощью ant?

У меня есть некоторые файлы на Unix-машине, к которым я могу получить доступ с моего ПК с Windows с помощью Проводника Windows, используя каталог \host\

Тем не менее, при использовании задачи копирования ant, ant продолжает говорить, что каталог не существует...

Итак, часть муравья это:

<if>
    <available file="${unix-dbs-dir}" type="dir" />
    <then>
        <echo message="${unix-dbs-dir} exists"/>
    </then>
    <else>
        <echo message="${unix-dbs-dir} doesn't exist"/>
    </else>
</if>

<copy todir="${dbsDir}" verbose="true">
    <fileset dir="${unix-dbs-dir}">
        <include name="*.bd"/>
    </fileset>
</copy>

Выход этого:

15:28:42      [echo] \\hyperion\dbs doesn't exist
15:28:42 
15:28:42 BUILD FAILED
15:28:42 ... \\hyperion\dbs does not exist.

Если я пытаюсь сделать то же самое с удаленным сетевым путем Windows, это работает...

Есть идеи, как это исправить? Кажется странным, что я могу просто получить доступ к \hyperion\dbs с помощью моего проводника Windows, но муравей явно не может...

Unix - это CentOs 6.5, но, думаю, это не имеет значения.

Некоторая дополнительная информация. Я создал небольшой скрипт build.xml для копирования файла с нашего Unix-компьютера на Windows-компьютер. Если я выполню скрипт build.xml ant из командной строки (кстати, не запускается от имени администратора), то получится:

C:\Users\lievenc\TestCopyHyperion>%ANT_HOME%/bin/ant.bat -lib lib
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.
0_45\lib\tools.jar
Buildfile: C:\Users\lievenc\TestCopyHyperion\build.xml
     [echo] Load them from directory \\srv-linuxdev\pde\appl\samplenet\dbs
     [echo] \\srv-linuxdev\pde\appl\samplenet\dbs exists
     [copy] Copying 1 file to C:\Users\lievenc\TestCopyHyperion
     [copy] Copying \\srv-linuxdev\pde\appl\samplenet\dbs\apif.d to C:\Users\lievenc\TestCopyHyperion\apif.d

При выполнении этого сценария build.xml от Jenkins я получаю следующий вывод:

[workspace] $ cmd.exe /C '"C:\Jenkins\tools\hudson.tasks.Ant_AntInstallation\1.9.4\bin\ant.bat -lib lib && exit %%ERRORLEVEL%%"'
Buildfile: C:\Jenkins\jobs\test-copying-from-hyperion\workspace\build.xml
     [echo] Load them from directory \\srv-linuxdev\pde\appl\samplenet\dbs
     [echo] \\srv-linuxdev\pde\appl\samplenet\dbs doesn't exist

Не могу понять, в чем разница. cmd.exe должен выполняться другим пользователем? Я просто догадываюсь здесь, но из моей командной строки в Windows я выполняю ant как пользователь домена. Может, это отличается от Дженкинса?

Ant скрипт:

<?xml version="1.0"?>

<project basedir="." xmlns:ac="antlib:net.sf.antcontrib">

    <!-- antcontrib -->
    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>

    <echo message="Load them from directory \\srv-linuxdev\pde\appl\samplenet\dbs" />

    <if>
        <available file="\\srv-linuxdev\pde\appl\samplenet\dbs" type="dir" />
        <then>
            <echo message="\\srv-linuxdev\pde\appl\samplenet\dbs exists"/>
        </then>
        <else>
            <echo message="\\srv-linuxdev\pde\appl\samplenet\dbs doesn't exist"/>
        </else>
    </if>

    <copy todir="${basedir}" verbose="true">
        <fileset dir="\\srv-linuxdev\pde\appl\samplenet\dbs">
            <include name="apif.d"/>
        </fileset>
    </copy>

</project>

1 ответ

Решение

Не могу понять, в чем разница. cmd.exe должен выполняться другим пользователем?

100%. Не только пользователь отличается, но и %PATH%и любые учетные данные, которые вы, возможно, кэшировали. Кроме того, ваш ant исполняемый файл тоже отличается. Бег от cmd у вас есть все, с чем справляется %PATH%, Пробежка по Дженкинсу, использует одну из установок Дженкинса. Однако это не был вопрос здесь.

Пользователь Jenkins зависит от того, как он настроен. Если служба Windows, управляйте пользователем через диалог служб Windows, измените его с "Локальная система" на что-то, с чем вы более знакомы, например, на своего собственного пользователя.

Несколько вещей, чтобы проверить в первую очередь.

  • Можете ли вы пинговать хост через Дженкинс.
    Настройте шаг "Выполнить пакетную команду" и просто введите ping srv-linuxdev, Выполнить через Дженкинс. Посмотри, работает ли это.

  • Можете ли вы скопировать файл, если пропустите available пометить в целом?

  • Как настраиваются разрешения для доступа к общему ресурсу Linux? Это 100% открыто? Для какого пользователя? Я не вижу никаких полномочий в вашем случае. Кэшируются ли учетные данные в вашей пользовательской сессии? Все это связано с тем, что Дженкинс работает от имени другого пользователя.

Другие вопросы по тегам