unix - 如何使用 ant 将文件从 Unix 共享复制到 Windows 机器?

标签 unix ant jenkins ant-contrib

我在 Unix 机器上有一些文件,我可以使用\host\directory 从我的 Windows PC 和 Windows Explorer 访问这些文件

但是,在使用 ant 复制任务时,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 似乎很奇怪,但 ant 显然不能......

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。也许这与 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 服务对话框管理用户,将其从“本地系统”更改为您更熟悉的内容,例如您自己的用户。

首先要检查几件事。
  • 你甚至可以通过 Jenkins ping 主机。
    配置“执行批处理命令”步骤,只需键入 ping srv-linuxdev .通过 Jenkins 执行。看看这是否有效。
  • 如果您省略 available,您还可以复制文件吗?完全标记?
  • 如何设置访问linux共享的权限?是100%开放吗?对于哪个用户?我没有看到您的案例中传递了任何凭据。凭据是否缓存在您的用户 session 中?这一切都与 Jenkins 以不同用户身份运行有关。
  • 关于unix - 如何使用 ant 将文件从 Unix 共享复制到 Windows 机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208089/

    相关文章:

    java - Ant -e 仅用于 java 任务

    jenkins - 将 Jenkins 安装为服务或在 Apache 后面运行

    linux - 在线程中调用 sleep(3)、usleep(3) 或 nanosleep(2) 是否安全?

    c++ - 如何让我的 C++ 代码知道从 "system(cmd)"运行的命令是否失败?

    ant - Jenkins:具有多个颠覆模块的单一作业

    eclipse - Ant在eclipse中的全局属性WEBLOGIC_HOME

    build - 跳过 Jenkins 工作中的步骤

    java - Jenkins:如何为所有管道设置默认 JDK

    linux - 比较 shell 脚本和 delta 中的文件

    linux - 使用 Perl 的 telnet 连接出现 "pattern match read eof"错误