Jenkins ant插件的$ {user.dir}工作目录的值不正确

时间:2017-02-23 19:57:47

标签: 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

中运行此命令
ant -buildfile B\build.xml

它打印&#34; C:\ A&#34;

但是从安装在Jenkins CI机器上的Ant插件,它将Buildfile设置设置为&#34; B / build.xml&#34;,它打印&#34; / workspace / B&#34;

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

https://github.com/jenkinsci/ant-plugin/blob/master/src/main/java/hudson/tasks/Ant.java查看Ant插件的源代码,可以看出工作目录已更改为构建文件的父目录,特别是在此行中(请注意对/workspace/B的调用:< / p>

pwd(buildFilePath.getParent())

鉴于本地和Jenkins之间的行为差​​异,我个人不会依赖r = launcher.launch().cmds(args).envs(env).stdout(aca).pwd(buildFilePath.getParent()).join(); 属性。如果要访问Jenkins作业的当前工作空间,可以使用Jenkins提供的built-in environment variables

user.dir

如果您不想在构建文件中显式引用<property environment="env"/> <target name="printCWD"> <echo message="workspace=${env.WORKSPACE}"/> </target> env变量,则可以提供自定义属性以从外部传递它(默认值设置为WORKSPACE) :

user.dir

然后在Jenkins工作中传递<property name="root.dir" value="${user.dir}" /> <!-- default value --> <target name="printCWD"> <echo message="root.dir=${root.dir}"/> </target>