Назад | Перейти на главную страницу

Как использовать автоматический перезапуск с Jenkins в Systemd

У меня Jenkins работает на CentOS7, и он время от времени дает сбой, и я хотел бы перезапустить его автоматически, когда это произойдет. Немного погуглив, я обнаружил, что в Systemd вы можете использовать Restart = on-failure, но проблема в том, что, как я вижу, Jenkins не использует служебный файл.

Если я выполняю systemctl status jenkins.service, я получаю:

● jenkins.service - LSB: Jenkins Continuous Integration Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins)
   Active: active (running) since Mon 2016-02-29 17:30:08 UTC; 11min ago

Похоже, он все еще использует init.d? Любая идея, как я могу это использовать Restart=on-failure в таком случае?

Как полный ужасный клудж вы могли указать systemd в сценарии инициализации jenkins, так как в этом сценарии есть множество надоедливых "где находится Java" и другого кода, чтобы выяснить, как запустить jenkins.

# cat /etc/systemd/system/jenkins.service
[Unit]
Description=Jenkins Server Daemon
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/etc/init.d/jenkins start
Restart=always
RestartSec=3
Type=forking

[Install]
WantedBy=multi-user.target
# systemctl enable jenkins.service

а затем служба запускается при перезагрузке, не отображается chkconfig --list, и перезапускается, даже если вы kill -9 $thepid хотя в идеале в долгосрочной перспективе лучшим вариантом было бы для людей jenkins включить прямую поддержку systemd в свои RPM ...

Могу предложить systemd-файл, который представляет собой модификацию кода из Дженкинс вики:

[Unit]
Description=Jenkins Daemon

[Service]
SuccessExitStatus=143
ExecStart=/usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8081 --ajp13Port=-1
Environment="JENKINS_HOME=/data/jenkins"
User=jenkins

[Install]
WantedBy=multi-user.target

Это работает намного лучше, чем у @thrig в Ubuntu 16.04 с Jenkins, установленным через apt. Таким образом, вам больше не нужны /etc/init.d/jenkins и / etc / default / jenkins, а также получать журналы непосредственно в journalctl.

Пакеты Jenkins по-прежнему поставляются только с файлом инициализации SysV, поэтому поведение, специфичное для systemd, недоступно. Я поднимаю отчет об ошибке, чтобы запросить отправку файла модуля systemd в пакетах. https://issues.jenkins-ci.org/browse/JENKINS-41218