2015-07-03 12 views
6

Ho alcuni file su un computer Unix a cui posso accedere dal mio PC Windows con Windows Explorer utilizzando la directory \ host \Come copiare file da una condivisione Unix su una macchina Windows usando formica?

Tuttavia, quando si utilizza un'attività di copia di ant, continua a dire che la directory non esiste. ..

Così, la parte formica è:

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

l'output di questo è:

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. 

Se provo la sa io con un percorso di rete Windows remoto, funziona ...

Qualche idea su come risolvere questo problema? Sembra strano che io possa accedere a \ hyperion \ dbs con il mio Windows Explorer, ma a quanto pare non può ...

L'Unix è un CentOs 6.5, ma immagino che non importi.

Alcune informazioni extra. Ho creato un piccolo script build.xml per copiare un file dalla nostra macchina Unix su una macchina Windows. Se eseguo lo script ant build.xml dalla riga di comando (non avviato come amministratore tra l'altro), allora l'uscita è:

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 

Quando si esegue lo script build.xml da Jenkins, ottengo output seguente:

[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 

Non riesco a capire qual è la differenza. cmd.exe deve essere eseguito come qualche altro utente? Sto solo indovinando qui, ma dalla mia riga di comando in Windows, sto eseguendo formica come utente di dominio. Forse questo è diverso da Jenkins?

script di 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

hai provato nel formato '// hyperion/dbs'? – deimus

+0

Sì, ci ho provato. Anche provato \\\\ hyperion \\ dbs ... –

risposta

2

non riesco a capire quale sia la differenza. cmd.exe deve essere eseguito come qualche altro utente?

100%. Non solo l'utente è diverso, ma lo è anche lo %PATH% e tutte le credenziali che potresti avere memorizzato nella cache. Inoltre, anche il tuo eseguibile ant è diverso. A partire da cmd hai tutto ciò che fa da %PATH%. Attraversando Jenkins, usa una delle installazioni di Jenkins. Tuttavia questa non era la domanda qui.

L'utente Jenkins dipende da come è stato configurato. Se un servizio Windows, gestisci l'utente tramite la finestra di dialogo Servizi Windows, cambialo da "Sistema locale" a qualcosa con cui hai più familiarità, come il tuo utente.

Diverse cose da verificare per prime.

  • Puoi persino eseguire il ping dell'host, tramite Jenkins.
    Configurare un passaggio "Esegui comando batch" e digitare solo ping srv-linuxdev. Esegui attraverso Jenkins. Vedi se funziona.

  • È ancora possibile copiare il file se si omette il tag available?

  • Come vengono configurate le autorizzazioni per accedere alla condivisione linux? È aperto al 100%? Per quale utente? Non vedo alcuna credenziale passata nel tuo caso. Le credenziali sono memorizzate nella cache della sessione utente? Tutto ciò si collega a Jenkins in esecuzione come utente diverso.

+0

Il servizio Windows è impostato con lo stesso utente usato per testare dalla riga di comando DOS (Domain User). –

+0

Il ping funziona. La copia del file non funziona, anche se ometto il disponibile. –

+0

Le autorizzazioni sono impostate utilizzando i Criteri di gruppo (l'amministratore IT me l'ha spiegato). Dovrebbe essere aperto al 100% per tutti gli utenti del dominio. –