如何使用 ant 将文件从 Unix 共享复制到 Windows 机器?
How to copy files from a Unix share to a Windows machine using ant?
我在 Unix 机器上有一些文件,我可以使用 \host\directory
通过 Windows Explorer 从我的 Windows PC 访问这些文件
但是使用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 网络路径进行相同的尝试,它确实有效...
知道如何解决这个问题吗?似乎很奇怪,我只能使用我的 Windows 资源管理器访问 \hyperion\dbs,但蚂蚁显然不能...
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
从 Jenkins 执行此 build.xml 脚本时,我得到以下输出:
[workspace] $ cmd.exe /C '"C:\Jenkins\tools\hudson.tasks.Ant_AntInstallation.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。也许这与 Jenkins 不同?
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>
Can't seem to figure out what the difference is. cmd.exe must be executed as some other user?
100%。不仅用户不同,%PATH%
以及您可能缓存的任何凭据也不同。此外,您的 ant
可执行文件也不同。 运行 来自 cmd
你有来自 %PATH%
的任何应对。 运行 通过 Jenkins,使用 Jenkins 的安装之一。然而,这不是这里的问题。
Jenkins 用户取决于您的设置方式。如果是 Windows 服务,请通过 Windows 服务对话框管理用户,将其从 "Local System" 更改为您更熟悉的内容,例如您自己的用户。
首先要检查几件事。
你能通过 Jenkins ping 主机吗?
配置 "Execute Batch Command" 步骤,然后键入 ping srv-linuxdev
。通过詹金斯执行。看看是否可行。
如果完全省略 available
标记,您还能复制文件吗?
如何设置访问 linux 共享的权限?是100%开放吗?针对哪个用户?我没有看到您的案例中传递了任何凭据。凭据是否缓存在您的用户会话中?这都与 Jenkins 运行 作为不同的用户有关。
我在 Unix 机器上有一些文件,我可以使用 \host\directory
通过 Windows Explorer 从我的 Windows PC 访问这些文件但是使用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 网络路径进行相同的尝试,它确实有效...
知道如何解决这个问题吗?似乎很奇怪,我只能使用我的 Windows 资源管理器访问 \hyperion\dbs,但蚂蚁显然不能...
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
从 Jenkins 执行此 build.xml 脚本时,我得到以下输出:
[workspace] $ cmd.exe /C '"C:\Jenkins\tools\hudson.tasks.Ant_AntInstallation.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。也许这与 Jenkins 不同?
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>
Can't seem to figure out what the difference is. cmd.exe must be executed as some other user?
100%。不仅用户不同,%PATH%
以及您可能缓存的任何凭据也不同。此外,您的 ant
可执行文件也不同。 运行 来自 cmd
你有来自 %PATH%
的任何应对。 运行 通过 Jenkins,使用 Jenkins 的安装之一。然而,这不是这里的问题。
Jenkins 用户取决于您的设置方式。如果是 Windows 服务,请通过 Windows 服务对话框管理用户,将其从 "Local System" 更改为您更熟悉的内容,例如您自己的用户。
首先要检查几件事。
你能通过 Jenkins ping 主机吗?
配置 "Execute Batch Command" 步骤,然后键入ping srv-linuxdev
。通过詹金斯执行。看看是否可行。如果完全省略
available
标记,您还能复制文件吗?如何设置访问 linux 共享的权限?是100%开放吗?针对哪个用户?我没有看到您的案例中传递了任何凭据。凭据是否缓存在您的用户会话中?这都与 Jenkins 运行 作为不同的用户有关。