2015-07-03 89 views
6

我有一臺Unix機器,我可以從我的Windows PC與Windows資源管理器使用\主機\目錄如何使用ant將文件從Unix共享複製到Windows機器?

但是,使用螞蟻副本任務時訪問某些文件,螞蟻口口聲聲說的目錄不存在。 ..

因此,螞蟻的部分是:

<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. 

如果我嘗試SA我與遠程Windows網絡路徑,它確實工作...

任何想法如何解決這個問題?似乎奇怪,我可以訪問\ hyperion \ dbs與我的Windows資源管理器,但螞蟻顯然不能...

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 

當執行從詹金斯這個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命令行,我作爲一個域用戶執行螞蟻。也許這與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> 
+0

你有嘗試過// hyperion/dbs格式嗎? – deimus

+0

是的,試過了。還嘗試過\\\\ hyperion \\ dbs ... –

回答

2

似乎無法找出有什麼區別。 cmd.exe必須作爲其他用戶執行?

100%。不僅用戶不同,而且%PATH%以及您可能已緩存的任何憑據也是如此。此外,您的ant可執行文件也不同。從cmd運行,你有什麼應對%PATH%。貫穿詹金斯,使用詹金斯的一個裝置。然而這不是這裏的問題。

詹金斯用戶取決於你是如何設置的。如果是Windows服務,通過Windows服務對話框管理用戶,請將其從「本地系統」更改爲您更熟悉的內容,例如您自己的用戶。

首先要檢查的幾件事。

  • 你甚至可以通過Jenkins ping主機。
    配置一個「執行批處理命令」步驟,只需鍵入ping srv-linuxdev。通過詹金斯執行。看看是否有效。

  • 如果您完全省略了available標籤,您仍可以複製該文件嗎?

  • 訪問linux共享的權限設置如何?它是否100%開放?哪個用戶?我沒有看到您的案件中有任何憑據通過。憑證是否緩存在用戶會話中?這一切都與Jenkins以不同的用戶身份運行有關。

+0

Windows服務使用與用於從DOS命令行(域用戶)進行測試的用戶相同的用戶進行設置。 –

+0

Ping作品。即使省略可用,複製文件也不起作用。 –

+0

使用組策略設置權限(IT Admin向我解釋)。它應該100%爲所有域用戶開放。 –

相關問題