#python-3.x #jenkins #makefile
Вопрос:
Я помещаю наши сценарии Python в наш конвейер Дженкинса и 1 из наших сценариев, если это вызывает у меня много головной боли. Я использую файл Дженкинса с командами Make. У меня есть файл создания с командами в нем. Теперь сам код использует removesuffix и removeprefix, которые являются python 3.9 и выше, но наша команда разработчиков неохотно меняет версию python в наших агентах Дженкинса.
Теперь у меня, конечно, есть способ указать из командной строки, какую версию python использовать (просто python3 или python3.9 и т. Д.). Но теперь я также хочу, чтобы мои модульные тесты были охвачены сонаром. поэтому я создал следующее в своем файле Makefile:
coverage run -m unittest discover -v
coverage xml
mkdir coverage-reports || True
cp coverage.xml coverage-reports/coverage-report.xml
Что также отлично работает, за исключением случаев, когда пути тестирования попадают в «код 3.9», и в это время Дженкинс терпит неудачу.
Я попробовал очевидную вещь, python3.9 coverage run -m discover -v
но она не работает. Также попробовал в requirements.txt — безрезультатно
Мой вопрос в том. Есть ли способ указать для каждого этапа(Дженкинс), какую версию python использовать?
Комментарии:
1. Обычный способ сделать это-выполнить этап настройки, на котором вы устанавливаете нужные версии Python, возможно, за пределами вашего файла Makefile или потока Дженкинса; затем используйте все, что было настроено. Общим механизмом для Python является использование
tox
илиnox
, хотя существуют и другие популярные альтернативы (pyenv
на ум приходит установка и управление произвольными версиями Python).2. Спасибо, трипли. У меня уже есть возможность запустить определенную версию (у меня есть несколько версий в моих агентах Дженкинса). Проблема в том, что при запуске модульных тестов из моего файла Дженкинса я вызываю его через запуск покрытия, что приведет к запуску «стандартной» версии агента (3.6), если я вызову python3.9-m unittest, он выполнит все тесты правильно, но без покрытия, поэтому sonar не сможет собрать подробную информацию. Я надеялся на очень простое решение, в котором я смогу добавить префикс python3.9 к вызову покрытия