Пип не активирован должным образом при использовании venv в Jenkins - PullRequest
0 голосов
/ 22 апреля 2019

Я использую Jenkins на Raspberry Pi 3 (на Rasbian).В этом экземпляре Jenkins я хочу запустить Python (3.6) в виртуальной среде, используя venv.Однако, когда я запускаю свой скрипт (используя Jenkins Execute-shell build-step) и активирую pip, он не работает должным образом, и я не могу использовать установленные модули.Запуск точно такого же скрипта в терминале работает отлично, и я могу использовать модуль.

Я попытался найти проблему, и похоже, что pip в venv не используется, когда я запускаю сценарий через Jenkins.

В jenkins я добавил следующее после того, как venv был установлен и активирован, чтобы попытаться отладить его.Рабочая область находится в /var/lib/jenkins/workspace/Test Python VENV/:

>python --version
Python 3.6.5
>pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)
>which python
/var/lib/jenkins/workspace/Test Python VENV/venv/bin/python
>which pip
/var/lib/jenkins/workspace/Test Python VENV/venv/bin/pip
>pip install coverage
Collecting coverage
Installing collected packages: coverage
Successfully installed coverage-4.5.3
>pip show coverage | grep Location     
Location: /var/lib/jenkins/.local/lib/python2.7/site-packages
>python -m coverage --version
/var/lib/jenkins/workspace/Test Python VENV/venv/bin/python: No module named coverage

Однако, если я запускаю тот же скрипт в терминале (то есть вне Jenkins), он работает, и я получаю следующее (каталог ~Develop/python_test/):

>python --version
Python 3.6.5
>pip --version
pip 9.0.3 from /home/pi/Develop/python_test/venv/lib/python3.6/site-packages (python 3.6)
>which python
/home/pi/Develop/python_test/venv/bin/python
>which pip
/home/pi/Develop/python_test/venv/bin/pip
>pip install coverage
Collecting coverage
Installing collected packages: coverage
Successfully installed coverage-4.5.3
>pip show coverage | grep Location
Location: /home/pi/Develop/python_test/venv/lib/python3.6/site-packages
>python -m coverage --version
Coverage.py, version 4.5.3 with C extension

Так что моя проблема в том, что когда я запускаю это через Jenkins, пип в venv is, кажется, не используется, вместо этого используется системный пип по умолчанию.И по некоторым причинам pip --version и which pip показывают два разных пути в Jenkins.

Полный скрипт, который я запускаю (как в Jenkins, так и в терминале), можно найти ниже:

echo Creating and activating virtual environment
python="python3.6"
venv_name="venv"

echo VERSIONS BEFORE VENV
python --version
pip --version
which python
which pip

echo 'Creating venv'
$python -m venv $venv_name
echo 'Activating venv'
. $venv_name/bin/activate

echo VERSIONS AFTER VENV
python --version
pip --version
which python
which pip

pip install coverage
pip show coverage | grep Location
python -m coverage --version 

1 Ответ

0 голосов
/ 22 апреля 2019

Вы можете попробовать Pyenv Jenkins PLugin Pyenv

Я проверил ваш скрипт, и он, кажется, работает, просто добавьте #!/bin/bash shebang.

...