How to install Hudson as a service on OS X?

Running hudson it is easy but currently the documentation is missing the tutorial for installing an running hudson as a daemon/service on OS X.

When you switch to production you need to assure that it is properly configured and secured.

  • How can I setup Hudson to use the same repository for different projects and maintain separate change logs?
  • Jenkins pass or fail build on external executable
  • hudson CI: how to delete all jobs?
  • Showing exception while connecting slave to master using headless jnlp
  • How would I produce JUnit test report for groovy tests, suitable for consumption by Jenkins/Hudson?
  • Configure a hudson maven job to keep building if there are test failures, but only deploy if there are no test failures
  • Requirements:

    • be able to run it on port 80
    • not running as root (or at least not running the jobs as root)
    • assure that it does properly start/stop on system restarts
    • enable auto-upgrade, that works directly from the web interface.

    The best, would be to have an installation script that downloads latest hudson and installs it.

    We’ll integrate the best answer to Hudson wiki.

    Resources:

    • http://wiki.hudson-ci.org/display/HUDSON/Meet+Hudson
    • http://wiki.hudson-ci.org/display/HUDSON/Automated+Upgrade
    • http://jrenard.info/blog/a-quick-but-working-startup-item-for-hudson-for-mac-os-x.html
    • http://wiki.hudson-ci.org/display/HUDSON/Installing+Hudson+as+a+Unix+daemon
    • http://weblogs.java.net/blog/2009/02/10/hudson-now-good-behaving-unix-daemon

  • How do I configure a Jenkins Pipeline to be triggered by polling SubVersion?
  • How to upgrade the SVN version used by git-svn
  • NotSerializableException using Publish Over SSH in Jenkinsfile
  • How to use git mergetool's filemerge
  • Jenkins Slave Environment Variable Refresh
  • jenkins extended parameter plugin groovy script
  • 3 Solutions collect form web for “How to install Hudson as a service on OS X?”

    If you want a local Hudson to run on your Mac whenever you log in, try this.

    You’ll want to set up a launchctl plist for it; that should look something like this:

    <?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>
    

    This assumes you’ve downloaded hudson.war to your home directory under ~/Hudson, and that you want to run it as yourself (probably the best decisions.) Be sure that you define the <UserName> key or it will run as root!

    Starting on login

    1. Save the above as /Library/LaunchAgents/hudson.plist
    2. Start it the first time with

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

    or log out and back in, which will do the same thing automatically.

    Starting on reboot

    1. Save the above as /Library/LaunchDaemons/hudson.plist
    2. Start it the first time with

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

    or reboot your machine, which will do the same thing automatically.

    Restarting Hudson

    Hudson can’t automatically restart under OS X, so if you need to stop it, issue the restart command

    launchctl unload -w path_to_plist
    

    I have found that sometimes it doesn’t stop on the first execution of launchctl unload; in those cases just issue the command again.

    This will run under port 8080 as if you had run the command from the command line yourself, using the Winstone server built in to the .war file.

    I realize this doesn’t specifically answer the “run it on port 80” question, but for development on your own laptop, I suggest that this is a better option.

    The correct solution is to install hudson inside tomcat and make tomcat run as daemon

    This will also meet the security requirements and allow you to upgrade hudson with ease.

    Here is the full guide for OS X 10.6:
    https://serverfault.com/questions/183496/full-guide-for-installing-tomcat-on-os-x/183527#183527

    The tiny solution I had (which also starts at login) was this:
    First run hudson manually once (so it builds it’s .hudson dir).
    create a hudson.command file somewhere on your machine in OSX with content a little like this:

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

    Then, open up system preferences, select your user, and then Login Items. Click the “+” button, and you’ll be able to select the command with finder.

    Next time you log in, hudson will have started.

    Disadvantages:

    • Hudson has no specific user – it’s just you
    • hudson is on port 8080
    • Hudson restarts mean finding the process, killing it and starting the hudson.command file again.
    • Hudson starts only once a user has logged in.
    Git Baby is a git and github fan, let's start git clone.