Jenkins ant插件对${user.dir}工作目录的值错误

Jenkins ant插件对${user.dir}工作目录的值错误,jenkins,ant,jenkins-plugins,Jenkins,Ant,Jenkins Plugins,我在C中有以下生成文件:\A\B <project name="demo" default="printCWD"> <target name="printCWD"> <echo message="user.dir=${user.dir}"/> </target> </project> 它打印“C:\A” 但是从安装在Jenkins CI机器上的Ant插件(其Buildfile设置设置为“B/build.

我在C中有以下生成文件:\A\B

<project name="demo" default="printCWD">
    <target name="printCWD">
        <echo message="user.dir=${user.dir}"/>
    </target>
</project>
它打印“C:\A”

但是从安装在Jenkins CI机器上的Ant插件(其Buildfile设置设置为“B/build.xml”)中,它会打印“/workspace/B”

为什么它在我的本地机器上打印我调用ant命令的文件夹,而在Jenkins CI服务器上打印构建文件所在的文件夹

非常感谢你的帮助


Paul

这是因为Jenkins Ant插件在执行构建文件之前正在将工作目录更改为包含构建文件的目录,因此导致
user.dir
指向该目录(
/workspace/B

查看位于的Ant插件的源代码可以发现,工作目录已更改为构建文件的父目录,特别是在这一行中(注意调用
pwd(buildFilePath.getParent())

考虑到本地和Jenkins上的行为差异,我个人不会依赖
user.dir
属性。如果您想访问Jenkins作业的当前工作区,可以使用Jenkins提供的:

<property environment="env"/>

<target name="printCWD">
    <echo message="workspace=${env.WORKSPACE}"/>
</target>
然后在Jenkins作业中传递
-Droot.dir=${WORKSPACE}

r = launcher.launch().cmds(args).envs(env).stdout(aca).pwd(buildFilePath.getParent()).join();
<property environment="env"/>

<target name="printCWD">
    <echo message="workspace=${env.WORKSPACE}"/>
</target>
<property name="root.dir" value="${user.dir}" />  <!-- default value -->

<target name="printCWD">
    <echo message="root.dir=${root.dir}"/>
</target>