У меня есть сервер Jenkins под управлением Windows Server 2012, и Java предложила мне обновить его до более новой версии (с jre1.8.0_261 до jre1.8.0_271), и во время этой установки он попросил удалить более старые версии (для соображения безопасности), что я разрешил. Когда я перезапустил службу Jenkins, она не перезапустилась. В журнале ошибок указано это Информационное сообщение:
Запуск C: \ Program Files \ Java \ jre1.8.0_261 \\ bin \ java.exe -Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -jar "C: \ Prog ram Files \ Jenkins \ jenkins.war "--httpPort = 8080 --webroot =" C: \ Windows \ system32 \ config \ systemprofile \ AppData \ Local \ Jenkins \ war "
И эта ошибка:
Служба не может быть запущенным. System.ComponentModel.Win32Exception (0x80004005): система не может найти файл, указанный в System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo) в winsw.Util.ProcessHelper.StartProcessAndCallbackForExit (ProcessToStart аргументы, String Execution, String Execution, String workingDirectory, приоритет Nullable1, обратный вызов ProcessCompletionCallback, логическое redirectStdin, LogHandler logHandler, Boolean hideWindow) в winsw.WrapperService.StartProcess (процесс processToStart, String arguments, исполняемый файл String, LogHandler logHandler, Boolean redirectStdin) в String. ) в System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (состояние объекта)
Информационное сообщение дало мне ключ к разгадке проблемы: Jenkins указывает на расположение более старой версии Java здесь: C: \ Program Files \ Java \ jre1.8.0_261
Однако папка пуста, и самое главное, в ней нет папки bin (без сомнения, из-за вышеупомянутую деинсталляцию).
Более новая версия здесь содержит полные двоичные файлы Java: C: \ Program Files \ Java \ jre1.8.0_271
Как заставить Дженкинса указать на новую JRE?
Обратитесь к ответу @Jeff Mergler для первичного решения
Мы обходим всю проблему, используя ссылку . mklink / D C: Java \ jre1.8 C: \ Program Files \ Java \ jre1.8.0_261
, и поместите его в jenkins.xml
. Сначала мы устанавливаем jdk вручную, затем просто останавливаем все наши приложения, перенаправляем одну ссылку и запускаем все наши приложения. Затем удалите старый jdk. У нас также есть ссылка для 8 и одна для 11. Мы делаем то же самое на стороне Linux, откуда мы взяли решение!
Кроме того, в соответствии с новыми условиями лицензирования Oracle, вы должны использовать что-то вроде acceptOpenJDK , чтобы не противоречить условиям Big Red.
например:
C:\Tools\Java>echo %JAVA_HOME%
C:\Tools\Java\jdk
C:\Tools\Java>dir
Volume in drive C is L103437
Volume Serial Number is 28B0-4574
Directory of C:\Tools\Java
2020-10-28 12:43 PM <DIR> .
2020-10-28 12:43 PM <DIR> ..
2020-08-19 11:59 AM <SYMLINKD> jdk [jdk1.8]
2020-10-28 12:41 PM <DIR> jdk-11.0.9.11-openj9
2020-08-05 12:14 AM <SYMLINKD> jdk1.6 [jdk1.6.0_211]
2020-08-05 12:13 AM <DIR> jdk1.6.0_211
2020-03-11 01:31 AM <DIR> jdk1.8.0_231
2020-10-28 12:40 PM <DIR> jdk1.8.0_271
0 File(s) 0 bytes
8 Dir(s) 162,629,304,320 bytes free
C:\Tools\Java>mklink /D jdk1.8 jdk1.8.0_231
symbolic link created for jdk1.8 <<===>> jdk1.8.0_231
C:\Tools\Java>java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b32)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b32, mixed mode)
C:\Tools\Java>unlink jdk1.8
C:\Tools\Java>mklink /D jdk1.8 jdk1.8.0_271
symbolic link created for jdk1.8 <<===>> jdk1.8.0_271
C:\Tools\Java>java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b32)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b32, mixed mode)
C:\Tools\Java> dir
2020-08-19 11:59 AM <SYMLINKD> jdk [jdk1.8]
2020-10-28 12:44 PM <SYMLINKD> jdk1.8 [jdk1.8.0_271]
2020-03-11 01:31 AM <DIR> jdk1.8.0_231
2020-10-28 12:40 PM <DIR> jdk1.8.0_271
В приведенном выше примере
JAVA_HOME = C: \ Tools \ Java \ jdk
и PATH =% JAVA_HOME% \ bin;% PATH%
. jdk
- это символьная ссылка , в настоящее время указывающая на jdk1.8
, которая в приведенном выше примере была сброшена с указания на 1.8.0_231
на 1.8.0_271
(Не забудьте включить / D
для ссылки на каталог.
jenkins.xml
может ссылаться на исполняемый файл любым из :
или, если вы хотите проверить на соответствие конкретной версии:
Существует довольно простое решение: найдите файл Jenkins.xml (для меня он находится в C: \ Program Files \ Jenkins \ jenkins.xml
) и отредактируйте его. .
Найдите элемент
и исправьте его, чтобы он указывал на новый путь JRE, например, в моем случае я изменил
этот
в этот <исполняемый файл> C: \ Program Files \ Java \ jre1.8.0_271 \ bin \ java.exe исполняемый файл >
Сохраните файл, и Jenkins теперь нормально запускается.