Как установить Hudson как услугу на OS X?

Запуск hudson легко, но в настоящее время в документации отсутствует учебное пособие по установке запущенного hudson в качестве демона/службы в OS X.

При переключении на производство вы должны убедиться, что он правильно настроен и защищен.

Требования:

  • сможет запустить его на порту 80
  • не работает как root (или, по крайней мере, не выполняет задания с правами root)
  • убедитесь, что он правильно запускает/останавливает перезапуск системы.
  • включить автоматическое обновление, которое работает непосредственно из веб-интерфейса.

Лучше всего было бы иметь установку script, которая загружает последний hudson и устанавливает его.

Мы будем интегрировать лучший ответ на Wiki в Гудзоне.

Ресурсы

Ответ 1

Правильное решение - установить hudson внутри tomcat и сделать tomcat работать как демон

Это также будет соответствовать требованиям безопасности и позволит вам легко обновить hudson.

Вот полное руководство для OS X 10.6: https://serverfault.com/questions/183496/full-guide-for-installing-tomcat-on-os-x/183527#183527

Ответ 2

Если вы хотите, чтобы локальный Hudson запускался на вашем Mac при каждом входе в систему, попробуйте это.

Вам нужно настроить для него плагин launchctll; что должно выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>UserName</key>
 <string>yourid</string>
 <key>Label</key>
 <string>Hudson</string>
 <key>EnvironmentVariables</key>
   <dict>
     <key>HUDSON_HOME</key>
     <string>/Users/yourid/.hudson</string>
   </dict>
 <key>ProgramArguments</key>
 <array>
 <string>/usr/bin/java</string>
 <string>-jar</string>
 <string>/Users/yourid/Hudson/hudson.war</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
</dict>
</plist>

Предполагается, что вы загрузили hudson.war в свой домашний каталог под ~/Hudson и хотите, чтобы вы запускали его как самостоятельно (вероятно, лучшие решения.) Убедитесь, что вы определили ключ <UserName>, или он будет запускается как root!

Запуск при входе в систему

  • Сохраните выше как /Library/LaunchAgents/hudson.plist
  • Запустите его в первый раз с помощью

    sudo launchctl load -w/Library/LaunchAgents/hudson.plist

или выйти из системы и вернуться в систему, что автоматически сделает то же самое.

Начало перезагрузки

  • Сохраните выше как /Library/LaunchDaemons/hudson.plist
  • Запустите его в первый раз с помощью

    sudo launchctl load -w/Library/LaunchDaemons/hudson.plist

или перезагрузите компьютер, который будет делать то же самое автоматически.

Перезапуск Хадсона

Хадсон не может автоматически перезапускаться под OS X, поэтому, если вам нужно его остановить, выполните команду перезапуска

launchctl unload -w path_to_plist

Я обнаружил, что иногда это не останавливается при первом выполнении launchctl unload; в этих случаях просто выпустите команду снова.

Это будет работать под портом 8080, как если бы вы выполнили команду из командной строки самостоятельно, используя сервер Winstone, встроенный в файл .war.

Я понимаю, что это специально не отвечает на вопрос "запустить его по порту 80", но для разработки на вашем собственном ноутбуке я предлагаю, чтобы это был лучший вариант.

Ответ 3

Маленькое решение, которое у меня было (которое также начинается при входе в систему), было следующим: Сначала запускайте hudson вручную один раз (так что он создает его .hudson dir). создайте файл hudson.command где-нибудь на вашем компьютере в OSX с содержимым, немного похожим на это:

nohup java -jar .hudson/hudson.war --httpPort=8080 &

Затем откройте системные настройки, выберите своего пользователя, а затем элементы входа. Нажмите кнопку "+", и вы сможете выбрать команду с помощью finder.

В следующий раз, когда вы войдете в систему, hudson запустится.

Недостатки:

  • У Hudson нет конкретного пользователя - это просто вы
  • hudson находится на порту 8080
  • Перезапуск Hudson означает поиск процесса, его убийство и запуск файла hudson.command снова.
  • Hudson запускается только после входа пользователя.