Не удается запустить скрипты python в Jenkins

Я использую Jenkins в течение нескольких лет и недавно купил новый ПК с Windows 10. Я установил Jenkins 2.89.2, Visual Studio 2017 и Python 3.6 и скопировал несколько заданий Jenkins с моего предыдущего ПК с Windows 7.

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

У меня есть похожие командные файлы командной строки, которые запускают эти сценарии Python, которые прекрасно работают в командном окне на новом ПК.

Я также проверил ассоциации файлов с ftype и в итоге изменил его:

ftype Python.File
Python.File="D:\Python36_64\python.exe" "%L" %*

Мой обходной путь выглядит так:

Пример строки, которая работала под Windows 7:

CreateBuildNumber.py <= использует PATH для поиска этого файла, затем сопоставления файлов для запуска python

Замена строки должна работать под Windows 10:

python.\Scripts\CreateBuildNumber.py <= использует PATH для поиска python.

Как я могу избежать явных путей в моих скриптах?

Обновить:

D:\project>assoc | findstr -i python
.py=Python.File
.pyc=Python.CompiledFile
.pyd=Python.Extension
.pyo=Python.CompiledFile
.pyw=Python.NoConFile
.pyz=Python.ArchiveFile
.pyzw=Python.NoConArchiveFile

echo %PATH%
D:\Python36_64;D:\Python36_64\Scripts;.\Scripts;"C:\Program Files\CppCheck";C:\windows\system32

Дальнейшая информация

Я удалил. \Scripts из% PATH% и снова запустил задание, также переместив demo.py в. \Scripts, теперь вместо того, чтобы ничего не делать, появляется ошибка:

'demo.py' is not recognized as an internal or external command, operable program or batch file.

Это означает, что Windows IS ищет и находит скрипты Python, но не может их выполнить. Почему бы Windows не сделать следующий шаг и использовать ассоциации файлов, чтобы найти исполняемую программу для запуска, принимая файл в качестве параметра?

Обновить:

Теперь все работает как надо, и я не знаю почему.

Недавно я начал использовать другую работу на Дженкинс, которую я не выполнял и не трогал более двух лет, и эта работа работала без изменений. С тех пор я вернулся к рассматриваемой работе и отменил все изменения, и эта тоже работает.

Я предполагаю, что Windows 10 была исправлена.

Ответ 1

Я не знаю, устранит ли это проблему, но у вас не должно быть относительного пути в переменной среды PATH.

Повторите попытку после удаления .\Scripts из переменной PATH. (не забудьте открыть новый новый терминал, получите новое значение% PATH%)

Ответ 2

Проблема в том, что ваша переменная PATH не включает в себя пути к вашим скриптам python. Вам нужен полный путь к каталогу Scripts. Не относительный путь .\Scripts.

Ответ 3

Тот факт, что "demo.py" дает сообщение "... не распознается как внутренняя или внешняя команда", не убеждает меня в том, что ваш script признан исполняемым. Если я напечатаю "turkey.abc" в окне командной строки, я получаю ту же ошибку, и у меня нет инструмента для выполнения файлов ".abc".

Здесь я вижу две возможности:

1) В пакетных сценариях исполняемые расширения иногда должны появляться в переменной среды PATHEXT.

В пакете Jenkins script добавьте команду "set" в верхней части script, чтобы выгрузить переменные среды для вашего запуска script в ваш журнал сборки Jenkins (вы можете удалить команду set после этого отлаживается). Запустите сборку. Посмотрите не только на определение PATH, но и на PATHEXT. Является ли ".py" одним из указанных там расширений?

Я столкнулся с этой проблемой с Perl-скриптами. Тем не менее, я стараюсь утверждать это определенно, так как при тестировании на моем домашнем ПК с Windows 10 я успешно выполняю сценарии .py, даже если он не находится в PATHEXT, поэтому попробовать что-то не так.

2) Еще одна возможность заключается в том, что среда, в которой работает ваша служба, отличается от среды, которую вы получаете при открытии командной строки на рабочем столе (поскольку служба Jenkins работает как другой пользователь, чем тот, который вы входите в систему,.)

Добавление "набора" к вашим командам партии Jenkins также поможет отладить это, так как оно покажет вам среду, в которой работает Jenkins script. Затем вы можете проверить PATH, чтобы узнать, найдена ли ваша папка script.

Также возможно, что ассоциации файлов для Python были установлены только для вашего пользователя, а не для всех пользователей (т.е. в HKEY_CURRENT_USER в реестре вместо HKEY_LOCAL_MACHINE). Это сложнее сбрасывать в ваш журнал Jenkins - команда reg будет делать это, но вам понадобится несколько попыток получить все, что вам нужно. Вы можете понять это, просто изучив реестр. Найдите ".py" - если это происходит в HKEY_LOCAL_MACHINE, это не так; если это происходит в HKEY_CURRENT_USER, что является по крайней мере частью проблемы.