2012-06-08 10 views
11

Sto cercando di eseguire questo comando in Jenkins dopo un msbuilddei comandi di Windows in lotti Esegui da Jenkins non riesce, ma funziona bene in cmd.exe

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 

Y: è un'unità di rete mappata. Funziona bene in cmd.exe ma quando provo a eseguirlo in Jenkins, ricevo l'errore Invalid drive specification.

Ecco l'output da Jenkins:

Time Elapsed 00:00:04.03 
[trunk] $ cmd /c call C:\Windows\TEMP\hudson3389873107474371072.bat 

C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 
Invalid drive specification 
0 File(s) copied 

C:\Program Files (x86)\Jenkins\workspace\trunk>exit 4 
Build step 'Execute Windows batch command' marked build as failure 
Finished: FAILURE 

Tutto l'aiuto sarebbe apprezzato.

+3

non è Jenkins in esecuzione come un servizio? Se ciò è vero, è necessario risolvere l'emittente specificando il percorso di rete al posto dell'unità mappata –

+1

Y: è probabilmente mappato a un utente specifico. Probabilmente Jenkins funziona con il proprio 'account di servizio' senza accesso a quella lettera di unità Y :? Puoi provare a utilizzare il percorso UNC invece di Y :, ad esempio "\\ NomeServer \ Cartella \ Extraction_zone \ Jenkins \" – JMC

+0

Grazie per le risposte. Ho provato a farlo, ma sto ottenendo l'accesso è negato: 'Tempo trascorso 00: 00: 03,70 [tronco] $ cmd/c chiamata C: \ Windows \ Temp \ hudson7535872922876977589.bat C: \ Program Files (x86) \ Jenkins \ workspace \ trunk> xcopy "C: \ Programmi (x86) \ Jenkins \ workspace \ trunk \ Projects \ results \ results \ obj \ Debug \ Package \ PackageTmp" "\\ COMP-NAME \ Webs \ Extraction_Zone"/E Accesso negato Impossibile creare la directory - \\ COMP-NAME \ Webs \ Extraction_Zone 0 File (s) copiato C: \ Program Files (x86) \ Jenkins \ workspace \ tronco> uscita 4 passo Corporatura 'Esegui Comando batch di Windows 'marked build as failure Finito: FAILURE' – Chris

risposta

14

Anch'io ho avuto un problema simile una volta. Prova a concedere il servizio Jenkins "Accedi come questo account" proprio sotto services.msc e assicurati che l'account digitato sia uguale a quello che usi per l'esecuzione di cmd.exe.

enter image description here

+0

Questo non sembra funzionare. Ho provato ad accedere come amministratore, ma sto ricevendo lo stesso errore. – Chris

+1

Sto scappando dalla mia macchina da lavoro e ho avuto lo stesso problema. Ho fatto come suggerito da @adarshr e ho utilizzato This Account e Browse ... quindi ho cercato le informazioni e la password dell'account AD di corprate. Ha funzionato come un fascino! – TWhite

+0

ho avuto un problema con questo: dopo aver cambiato l'utente il servizio avrebbe iniziato e quindi si fermerà. controlla il visualizzatore di eventi per maggiori informazioni. nel mio caso il mio utente non ha avuto accesso a C: \ program files \ jenkins – DLeh

0

La soluzione del adarshr (vale a dire, modificando il registro alle credenziali del servizio) ha lavorato per me per una parte del problema: nel mio caso, questo mi ha permesso di controllare con successo un repository Mercurial (usando il protocollo ssh), cosa che non potevo fare quando si utilizzava "Account di sistema locale".

Tuttavia, ho ancora un comportamento diverso tra l'esecuzione di uno script da riga di comando o l'esecuzione dello stesso script da uno script di 'execute shell' di jenkins nella sezione di compilazione. Nel mio caso, compilo un'estensione Python. In Jenkins, non posso importare l'estensione (non vedo alcun errore, ma l'esecuzione si interrompe semplicemente, quindi sospetto che si blocca).

Se si disinstalla il servizio ed è in esecuzione l'agente slave come Java Web Start, si ottiene lo stesso comportamento. È una soluzione temporanea per me, ma significa che quando riavvio il computer Windows build, devo riavviare manualmente l'applicazione Java Web Start.

Quindi, almeno nel mio caso, è chiaro che si tratta di un problema di credenziali.

Credenziali documentazione utilizzo: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

1

Ho avuto lo stesso problema con la mia operazione di Windows in esecuzione di un file batch (lo so che non è esattamente lo stesso) in cui ho cercato di copiare il file di rete posizione vale a dire un'unità condivisa. Ho usato il percorso UNC e l'unità mappata, ma l'errore era lo stesso. Per me è stato l'errore numero 4 - codice errore MS DOS. La soluzione era usare il comando net use! Spero che aiuti.

2

Questi comandi basati su file JAR Java lavorato per me:
cmd
net use x: \\
xcopy "dist \" x: \/Y

E questo è tutto! Ho passato molto tempo a capire questo problema e niente ha funzionato fino a quando non ho scritto CMD e NET USE!
Né è stato necessario modificare i permessi sul servizio jenkins né utilizzare il comando runas.

Ma devo menzionare che tutti avevano accesso in lettura e scrittura al drive di rete.

+0

Questo ha funzionato anche per me, (avevo già il server jenkins in base alla risposta di @adarshr).Per migliorare la leggibilità, la seconda riga indica 'net use x: \\ yournetworkshare \ foldername' – Schaki

0

Di fronte a problemi simili, abbiamo trovato due modi per risolvere.

Tipo 1: Comunicare a Jenkins l'unità mappata. 1.Goto -> Gestisci Jenkins -> Console di script (Groovy Script). 2.Run sotto comando

def mapdrive = "net use Y: \\\\copy_nework_address" 
mapdrive.execute(); 
println "net use".execute().getText() 

Tipo: 2 1.Goto -> cmd -> Esegui "net use" per conoscere l'indirizzo di rete

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Copy_Network_Address\Extraction_Zone\Jenkins\" /E 

Conclusione: - Io preferisco 2 ° tipi come dopo ogni riavvio dovrei eseguire Groovy Script.

0

Facile soluzione per la maggior parte delle cose.

  1. Creare un comando batch con ciò che si tenta di eseguire, nomefile.bat con il testo del prompt dei comandi all'interno.
  2. Crea una normale scorciatoia di Windows per il comando batch, modifica le proprietà avanzate scorciatoie e controlla "Esegui come amministratore" (difficile).
  3. Ora esegui il collegamento filename.lnk dalla chiamata alla riga di comando di jenkins, questo ti porterà in giro per tutto il jazz.

:)

Problemi correlati