2017-02-23 42 views
2

我在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 

它打印 「C:\ A」

但是從Ant插件安裝一個詹金斯CI機,其具有構建文件設置爲 「B/build.xml中」 上,它打印「/工作區/ B「

爲什麼在我的本地機器上打印我從中調用ant命令的文件夾,但在Jenkins CI服務器上它打印了構建文件所在的文件夾?

非常感謝您的幫助。

保羅

回答

1

這是因爲詹金斯螞蟻插件是改變工作目錄包含構建文件的目錄只是在執行之前,因此引起user.dir指向該目錄(/workspace/B)。

一看螞蟻插件的源代碼在https://github.com/jenkinsci/ant-plugin/blob/master/src/main/java/hudson/tasks/Ant.java表明,工作目錄更改爲構建文件的父母,特別是在這條線(注意調用pwd(buildFilePath.getParent())

r = launcher.launch().cmds(args).envs(env).stdout(aca).pwd(buildFilePath.getParent()).join(); 

鑑於本地和詹金斯之間的這種行爲差異,我不會親自依靠user.dir屬性如果您要訪問的詹金斯作業的當前工作區,你可以使用詹金斯提供的built-in environment variables

<property environment="env"/> 

<target name="printCWD"> 
    <echo message="workspace=${env.WORKSPACE}"/> 
</target> 

如果你不想顯式引用WORKSPACE環境變量在構建文件,你可以提供一個自定義屬性從外部通過它(設置爲user.dir默認值):

<property name="root.dir" value="${user.dir}" /> <!-- default value --> 

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

然後通過-Droot.dir=${WORKSPACE}在詹金斯的工作。

+0

非常感謝! – Paul