我在Unix机器上有一些文件可以通过Windows资源管理器使用\ host \目录从我的Windows PC访问
但是,当使用ant copy任务时,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\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>
答案 0 :(得分:2)
似乎无法弄清楚区别是什么。 cmd.exe必须像其他用户一样执行吗?
100%。不仅用户不同,%PATH%
也是如此,以及您可能已缓存的任何凭据。此外,您的ant
可执行文件也不同。从cmd
开始,你有%PATH%
的任何应对措施。运行Jenkins,使用Jenkins的一个安装。然而,这不是问题。
Jenkins用户取决于你如何设置它。如果是Windows服务,请通过“Windows服务”对话框管理用户,将其从“本地系统”更改为您更熟悉的内容,例如您自己的用户。
首先要检查几件事。
你能不能通过Jenkins对主机进行ping操作
配置“执行批处理命令”步骤,然后键入ping srv-linuxdev
。通过詹金斯执行。看看是否有效。
如果您完全省略available
标记,是否还可以复制文件?
如何设置权限以访问Linux共享?是100%开放吗?对于哪个用户?我没有看到您的案件中传递任何凭据。凭据是否缓存在您的用户会话中?这一切都与作为不同用户的Jenkins有关。