Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Java Web Start provides some means of automatically running the slave agent. For example, instead of manually clicking the icon, you can run the following command from CLI:

No Format

$ javaws http://hudson.acme.org/computer/slave-name/slave-agent.jnlp

See also Installing Hudson as a Windows service

...

This third option uses a mechanism very similar to Java Web Start, except that it runs without using GUI, making it convenient for an execution as a daemon. To do this, take slave.jar as discussed above, and run it like:

No Format

$ java -jar slave.jar -jnlpUrl http://hudson.acme.org/computer/slave-name/slave-agent.jnlp

This approach is especially convenient to run a slave agent as a service on Windows, for those who don't want to run sshd on Windows.

...

  • Each computer has an user called hudson and a group called hudson. All computers use the same UID and GID. (If you have access to NIS, this can be done more easily.) This is not a Hudson requirement, but it makes the slave management easier.
  • On each computer, /var/hudson directory is set as the home directory of user hudson. Again, this is not a hard requirement, but having the same directory layout makes things easier to maintain.
  • All machines run SSHD. Windows slaves run cygwin sshd.
  • All machines have ntp client installed, and synchronize clock regularly with the same NTP server.
  • Master's /var/hudson have all the build tools beneath it --- a few versions of Ant, Maven, and JDKs. JDKs are native programs, so I have JDK copies for all the architectures I need. The directory structure looks like this:
    No Format
    /var/hudson
      +- .ssh
      +- bin
      |   +- slave  (more about this below)
      +- workspace (hudson creates this file and store all data files inside)
      +- tools
          +- ant-1.5
          +- ant-1.6
          +- maven-1.0.2
          +- maven-2.0
          +- java-1.4 -> native/java-1.4 (symlink)
          +- java-1.5 -> native/java-1.5 (symlink)
          +- native -> solaris-sparcv9 (symlink; different on each computer)
          +- solaris-sparcv9
          |   +- java-1.4
          |   +- java-1.5
          +- linux-amd64
              +- java-1.4
              +- java-1.5
    
  • Master's /var/hudson/.ssh has private/public key and authorized_keys so that a master can execute programs on slaves through ssh, by using public key authentication.
  • On master, I have a little shell script that uses rsync to synchronize master's /var/hudson to slaves (except /var/hudson/workspace) I use this to replicate tools on all slaves.
  • /var/hudson/bin/launch-slave is a shell script that Hudson uses to execute jobs remotely. This shell script sets up PATH and a few other things before launching slave.jar.  Below is a very simple example script.{{{}
    Code Block
    
    #!/bin/bash
    
    JAVA_HOME=/opt/SUN/jdk1.6.0_04
    PATH=$PATH:$JAVA_HOME/bin
    echo $PATH
    export PATH
    java -jar /var/hudson/bin/slave.jar
    
    
    }}
  • Finally all computers have other standard build tools like svn and cvs installed and available in PATH.

...