Я пытаюсь создать проект Java на подчиненном узле Jenkins Windows, и когда я пытаюсь запустить любую команду mvn
на подчиненном устройстве из службы Jenkins, я получаю ошибка произнося команды не может быть найдено:Команда mvn не распознана на Jenkins Windows slave node
java.io.IOException: Cannot run program "mvn": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
...
Примечание: Если я вхожу в машину непосредственно под управлением любой mvn
команда работает просто отлично.
установки Windows Подчиненный узел
Maven установлен в каталог
D:\Apache\Maven
.Установить системные переменные среды:
JAVA_HOME
=C:\Program Files\Java\jdk1.8.0_40
M2
=%M2_HOME%\bin
M2_HOME
=D:\Apache\Maven
Переменная среды
PATH
система настроена на%M2%;...
С веб-страницы мастера Дженкинс, если я бегу Groovy скрипт println System.getenv("PATH")
на ведомом узле Windows я могу видеть, что есть имеет правильный, расширенный путь для bin
директории в Maven.
Я могу также проверить bin
каталог Maven можно увидеть, выполнив следующие действия:
Groovy Сценарий:
println "ls -al D:/Apache/Maven/bin".execute().text
total 14 drwxr-xr-x 8 D-AUN-00 Administ 4096 Apr 20 12:35 . drwxr-xr-x 9 D-AUN-00 Administ 4096 Mar 31 11:46 .. -rw-r--r-- 1 D-AUN-00 Administ 230 Mar 31 11:46 m2.conf -rwxr-xr-x 1 D-AUN-00 Administ 7085 Apr 20 11:49 mvn -rw-r--r-- 1 D-AUN-00 Administ 6007 Mar 31 11:46 mvn.cmd -rwxr-xr-x 1 D-AUN-00 Administ 1796 Mar 31 11:46 mvnDebug -rw-r--r-- 1 D-AUN-00 Administ 1513 Mar 31 11:46 mvnDebug.cmd -rwxr-xr-x 1 D-AUN-00 Administ 1843 Mar 31 11:46 mvnyjp
Любопытно, что если я бегу Maven с mvn.cmd
, то Maven работает очень хорошо:
Groovy Сценарий:
println "mvn.cmd --version".execute().text
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-13T15:10:27-05:00) Maven home: D:\Apache\Maven Java version: 1.8.0_40, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.8.0_40\jre Default locale: en_US, platform encoding: Cp1252 OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"
Вопрос: Есть ли что-то я отсутствует или не настроен правильно, что бы вызвать команду mvn
не признается?
EDIT: Билд Я бегу использует пользовательский Python Баш скрипт для вызова Maven. Сценарий также настроен для запуска сборок для проектов на других языках (PHP, Ruby, .NET, Node), а инструменты для этих сборок все работают отлично (composer
, bundle
, devenv.com
). Тем не менее, я бы подумал, что выполнение сборки не имеет значения, если консоль сценария для подчиненного узла возвращает ту же ошибку при попытке выполнить команды mvn
.
EDIT 2: Чем больше я смотрю на это, тем меньше я чувствую, что это не имеет ничего общего с Дженкинс и больше, чтобы сделать с тем, как скорлупа скрипты выполняются на Windows. Когда я использую Консоль сценариев для вызова Groovy Script на подчиненном узле, Jenkins просто записывает это во временный файл на подчиненном узле и использует sh -xe <script>
для его вызова. Когда я пытаюсь использовать подобный подход непосредственно на машине Windows, каждая команда на основе сценариев (например, mvn
, composer
) не запускается из сценария оболочки, если я не добавлю команду sh
. Это печально, потому что скрипты, которые я запускаю, могут запускаться на узле Linux или Mac в будущем, и я предпочел бы не мутировать его командами, специфичными для Windows. Я пробовал это как с Git Bash, так и с Msysgit, и получаю те же результаты. Затем я попробую Cygwin, чтобы узнать, работает ли это ...
Какой шаг сборки вы используете для запуска 'mvn'? – Slav
@Slav Я использую собственный скрипт Python, исполняемый оболочкой, для запуска на подчиненном устройстве, который включает вызовы Maven. Все в этом скрипте работает, кроме Maven. По какой-то причине служба Jenkins, работающая на подчиненном устройстве, не распознает команду 'mvn' как команду, хотя все, кажется, правильно настроено. FWIW, скрипт Python также используется для создания проектов на других языках на подчиненном устройстве (PHP, Ruby, .NET, Node), и все они прекрасно работают ('composer',' bundle', 'devenv' с некоторыми дополнительными hand-holding: P) –
Хорошо, поцарапайте это, 'composer',' bundle', 'npm' и почти любую другую написанную на основе скрипта команду, которая ранее работала, возвращает ту же ошибку. Наш мастер Jenkins был недавно обновлен, поэтому мне интересно, связано ли это с этим. Я попытаюсь удалить ведомую службу и переустановить ее из мастера (теперь обновленного). –