2012-06-08 141 views
11

Estoy tratando de ejecutar este comando en Jenkins después de un MSBUILDEjecutar un comando por lotes ventanas de Jenkins, pero no funciona muy bien en cmd.exe

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

Y: es una unidad de red asignada. Esto funciona bien en cmd.exe pero cuando intento ejecutarlo en Jenkins, obtengo el error Invalid drive specification.

Aquí está la salida de 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 

se agradecería cualquier ayuda.

+3

no es Jenkins ejecutan como un servicio? Si eso es cierto, debe resolver su emisor especificando la ruta de la red en lugar de la unidad mapeada –

+1

Y: probablemente esté asignada a un usuario específico. Jenkins probablemente se ejecuta bajo su propia "cuenta de servicio" sin acceso a esa letra de unidad Y :? Puede intentar utilizar la ruta UNC en lugar de Y :, es decir, "\\ ServerName \ Folder \ Extraction_zone \ Jenkins \" – JMC

+0

Gracias por las respuestas. He intentado esto, pero estoy recibiendo Acceso denegado: 'Tiempo transcurrido 00: 00: 03,70 [tronco] $ cmd/c llamada C: \ Windows \ Temp \ hudson7535872922876977589.bat C: \ Archivos de programa (x86) \ Jenkins \ workspace \ trunk> xcopy "C: \ Archivos de programa (x86) \ Jenkins \ workspace \ trunk \ Projects \ results \ results \ obj \ Debug \ Package \ PackageTmp" "\\ COMP-NAME \ Webs \ Extraction_Zone"/E Acceso denegado No se puede crear el directorio - \\ COMP-NOMBRE \ Webs \ Extraction_Zone 0 archivo (s) copiado C: \ archivos de programa (x86) \ Jenkins \ espacio de trabajo \ tronco> salida de 4 pasos Build 'Ejecutar Comando por lotes de Windows 'marcada compilación como falla Terminado: FALLO' – Chris

Respuesta

14

Yo también tuve un problema similar una vez. Intente otorgar el servicio Jenkins "Iniciar sesión como esta cuenta" justo debajo de services.msc y asegúrese de que la cuenta que escribe allí es la misma que la que usa para ejecutar cmd.exe.

enter image description here

+0

Esto parece no funcionar. Intenté iniciar sesión como administrador, pero recibo el mismo error. – Chris

+1

Me estoy escapando de mi máquina de trabajo y tuve el mismo problema. Hice como @adarshr sugirió y usé This Account and Browse ... luego busqué la información y la contraseña de mi cuenta corprate AD. ¡Trabajado como un encanto! – TWhite

+0

tuve un problema con esto: después de cambiar el usuario, el servicio se iniciará y luego se detendrá. mira el visor de eventos para más información. en mi caso, mi usuario no tenía acceso a C: \ archivos de programa \ jenkins – DLeh

0

La solución de adarshr (es decir, modificando el registro en las credenciales del servicio) ha trabajado para mí para una parte del problema: en mi caso, esto me permitió comprobar con éxito un repositorio mercurial (usando el protocolo ssh), que no pude hacer cuando uso 'Cuenta del sistema local'.

Sin embargo, todavía tengo un comportamiento diferente entre ejecutar un script de línea de comandos o ejecutar el mismo script desde el script de ejecución de jenkins en la sección de compilación. En mi caso, compilo una extensión de Python. En Jenkins, no puedo importar la extensión (no veo ningún error, pero la ejecución simplemente se detiene, así que sospecho que se cuelga).

Si desinstalo el servicio y ejecuto el agente esclavo como un Java Web Start, obtengo el mismo comportamiento. Es una solución temporal para mí, pero significa que cuando reinicie el equipo de construcción de Windows, tengo que reiniciar manualmente la aplicación Java Web Start.

Así que, al menos en mi caso, está claro que se trata de un problema de credencial.

Credenciales documentación de uso: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

1

he tenido el mismo problema con mi tarea de Windows ejecutar un archivo por lotes (ya sé que no es exactamente lo mismo), donde he tratado de copiar el archivo a la ubicación de red es decir, unidad compartida. Usé la ruta UNC y la unidad mapeada también, pero el error fue el mismo. Para mí fue el error número 4 - código de error de MS DOS. La solución fue usar net use comando! Espero que ayude

2

Estos comandos basados ​​en archivos JAR de Java trabajaron para mí:
cmd
net use x: \\
xcopy "dist \" x: \/Y

Y eso es todo! Pasé mucho tiempo resolviendo este problema y nada funcionó hasta que escribí CMD y NET USE.
Ni yo necesité cambiar el permiso en el servicio jenkins ni usar el comando runas.

Pero debo mencionar que todos tenían acceso de lectura y escritura a la unidad de red.

+0

Esto hizo que también funcionara para mí (ya tenía el servidor jenkins de acuerdo con la respuesta de @adarshr).Para una mejor legibilidad, la segunda línea significa 'net use x: \\ yournetworkshare \ foldername' – Schaki

0

Se enfrentó a un problema similar y encontró dos maneras de resolverlo.

Tipo 1: Dile a Jenkins acerca de la unidad mapeada. 1.Goto -> Gestionar Jenkins -> Consola de script (Groovy Script). 2.Run a continuación comando

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

Tipo: 2 1.Goto -> cmd -> Ejecutar "net use" para conocer la dirección de red

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

Conclusión: - Yo prefiero 2ª tipos ya que después de cada reinicio debería ejecutar Groovy Script.

0

Solución fácil para la mayoría de las cosas.

  1. Realice un comando por lotes con lo que intenta ejecutar, filename.bat con el texto del símbolo del sistema dentro.
  2. Realice un acceso directo a Windows normal para el comando por lotes, edite las propiedades avanzadas de accesos directos y marque la opción "Ejecutar como administrador" (complicado complicado).
  3. Ahora ejecute el acceso directo filename.lnk desde la llamada de línea de comandos de jenkins, esto lo guiará por todo el jazz.

:)

Cuestiones relacionadas