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.

Jenkins en Windows se detiene después de activar Python VENV.

Al ejecutar una compilación en Windows, Jenkins no logra activar el entorno virtual de Python.

Configuré el servidor Jenkins en Windows 10 para ejecutar pruebas unitarias en Python. Creé un “proyecto libre”. En “Compilación”, seleccioné “Ejecutar comando por lotes de Windows” e ingresé estos comandos:

echo 'ANTES DE LA ACTIVACIÓN'
C:\Development\venvs\venv366-001\Scripts\activate.bat
echo 'DESPUÉS DE LA ACTIVACIÓN'

Inicio la compilación haciendo clic en “Compilar ahora”. La compilación es exitosa y la salida de la consola muestra lo siguiente:

C:\ProgramData\Jenkins.jenkins\workspace\DemoCalculator>echo 'ANTES DE LA ACTIVACIÓN'
'ANTES DE LA ACTIVACIÓN'

C:\ProgramData\Jenkins.jenkins\workspace\DemoCalculator>C:\Development\venvs\venv366-001\Scripts\activate.bat
Finished: SUCCESS

Observe que la consola no indica DESPUÉS DE LA ACTIVACIÓN. En la práctica, agregaría comandos no triviales después de la activación. Este ejemplo solo muestra que nada después de la activación se ejecuta.

¿Cómo puedo hacer que se ejecuten los comandos posteriores?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Existen varias soluciones posibles para este problema:

    1. Usar “Execute Windows batch command” para activar el entorno virtual y ejecutar los comandos en el mismo paso. En lugar de solo activar el entorno virtual, también puedes incluir los comandos que deseas ejecutar después de la activación en el mismo archivo por lotes. Por ejemplo:
      call C:\Development\venvs\venv366-001\Scripts\activate.bat && pytest tests/
      

      Este comando activa el entorno virtual y luego ejecuta pytest en el directorio de pruebas. Ten en cuenta que el comando “call” es necesario para permitir que el archivo por lotes devuelva el control a Jenkins después de la activación.

    2. Usar el complemento “Python” para administrar el entorno virtual dentro de Jenkins. En lugar de confiar en un entorno virtual externo, puedes usar el complemento Python para Jenkins, que te permite especificar un entorno virtual para cada compilación. De esta manera, Jenkins puede administrar la activación y desactivación del entorno virtual automáticamente. Para usar el complemento Python:

      1. Instala el complemento en Jenkins usando el Administrador de complementos.
      2. En la configuración de tu trabajo de Jenkins, selecciona “Agregar paso de compilación” y elige “Python”.
      3. En el campo “Python environment”, especifica la ruta al entorno virtual que deseas usar. Por ejemplo: C:\Development\venvs\venv366-001.
      4. En el campo “Commands”, especifica los comandos que deseas ejecutar dentro del entorno virtual. Por ejemplo: pytest tests/.
    3. Echa un vistazo al complemento “Virtualenv” para Jenkins. Jenkins ofrece el complemento Virtualenv, que puede crear y administrar múltiples entornos virtuales. Instala el complemento Virtualenv desde el Administrador de complementos, selecciona “Agregar paso de compilación” y elige “Virtualenv”, lo que permitirá ejecutar los comandos en el entorno aislado. Ten en cuenta que este enfoque tiene algunas limitaciones, como la necesidad de virtualenv y la imposibilidad de manejar los venv preferidos en Python 3.4 en adelante.
    4. Asegúrate de que el script de activación solo contenga comandos válidos de Windows. El script por lotes de activación podría ejecutar comandos de Linux o comandos no compatibles con Windows que provocarán el fallo del archivo por lotes. Asegúrate de que los comandos del script sean compatibles con Windows antes de ejecutar el archivo en Jenkins.

    Al implementar una de las soluciones anteriores, la compilación de Jenkins debería poder activar el entorno virtual de Python y ejecutar los comandos posteriores con éxito.

Comments are closed.