es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El script de Bat funciona en el trabajo estilo libre de Jenkins, pero no funciona en el flujo de trabajo de Jenkins Pipeline.

Tengo un script por lotes que ejecuta algunos comandos de Robocopy. Este script por lotes funciona bien en el trabajo de estilo libre de Jenkins, pero no funciona en el pipeline de Jenkins. El script finaliza con el código de salida 2.

Este es mi script por lotes. (Se establecen los valores de %source% y %destination%)

@echo off
ROBOCOPY %source% %destination% /is /it /E
@echo robocopy código de salida: %ERRORLEVEL%
@if %ERRORLEVEL% GTR 3 ( echo ERROR de robocopy )
@if %ERRORLEVEL% GTR 3 ( exit %ERRORLEVEL% )
@set ERRORLEVEL=0

Este es el registro de la compilación.

09:31:38  ------------------------------------------------------------------------------
09:31:38
09:31:38                 Total    Copiado   Omitido  No coinciden    FALLIDO    Extras
09:31:38      Directorios :         6         0         6         0         0       470
09:31:38     Archivos :         4         0         4         0         0      1588
09:31:38     Bytes :   786.0 k         0   786.0 k         0         0   13.08 m
09:31:38     Tiempos :   0:00:00   0:00:00                       0:00:00   0:00:00
09:31:38     Finalizado : martes, 14 de diciembre de 2021 05:01:38
09:31:38
09:31:38  robocopy código de salida: 0
09:31:38  =======================================================
09:31:38   Movimiento de la base de datos completado
09:31:38  =======================================================
[Pipeline] }
[Pipeline] // etapa
[Pipeline] }
[Pipeline] // marcas de tiempo
[Pipeline] }
[Pipeline] // nodo
[Pipeline] Fin del pipeline
ERROR: el script devolvió el código de salida 2
Finalizado: FALLIDO

El mismo script funciona bien cuando se ejecuta como un trabajo de estilo libre. ¿Cuál podría ser la posible razón de esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón más probable por la cual el script de murciélago funciona correctamente en el trabajo de estilo libre de Jenkins pero no en el pipeline de Jenkins es la diferencia en el entorno de ejecución. El pipeline de Jenkins se ejecuta en un agente o computadora diferente, y esto podría afectar la ejecución de los comandos de Robocopy.

    Para solucionar el problema, puedes intentar lo siguiente:

    1. Verificar si la misma versión de Robocopy está instalada tanto en el trabajo de estilo libre de Jenkins como en el agente del pipeline de Jenkins.
    2. Verificar si los directorios y archivos necesarios existen en el destino %destination%.

    3. Cambiar el parámetro /E por /S y comprobar si el script se ejecuta correctamente. El parámetro /E copia directorios vacíos, y esto podría causar problemas en el entorno del pipeline de Jenkins.

    4. Verificar si el agente que ejecuta el script del pipeline de Jenkins tiene los permisos necesarios para acceder a los directorios de origen y destino. Puedes probar esto ejecutando el script de murciélago manualmente en el agente.

    5. Agregar un bloque try-catch alrededor del comando Robocopy e imprimir el mensaje de excepción para obtener más información para solucionar el problema.

    6. Verificar si el script del pipeline tiene los permisos apropiados de Jenkins para usar el comando robocopy.

    Al incluir estos pasos en tu proceso de solución de problemas, puedes identificar la causa raíz del problema y proceder con la solución adecuada.

Comments are closed.