Distributed builds

Skip to end of metadata
Go to start of metadata

Jenkins supports the "master/slave" mode, where the workload of building projects are delegated to multiple "slave" nodes, allowing a single Jenkins installation to host a large number of projects, or to provide different environments needed for builds/tests. This document describes this mode and how to use it.

Contents

How does this work?

A "master" is an installation of Jenkins. When you weren't using the master/slave support, a master was all you had. Even in the master/slave mode, the role of a master remains the same. It will serve all HTTP requests, and it can still build projects on its own.

Slaves are computers that are set up to build projects for a master. Jenkins runs a separate program called "slave agent" on slaves. In other words, there is no need to install the full Jenkins (package or compiled binaries) on a slave node. There are various ways to start slave agents, but in the end a slave agent and Jenkins master needs to establish a bi-directional byte stream (for example a TCP/IP socket.)

When slaves are registered to a master, a master starts distributing loads to slaves. The exact delegation behavior depends on configuration of each project. Some projects may choose to "stick" to a particular machine for a build, while others may choose to roam freely between slaves. For people accessing Jenkins website, things works mostly transparently. You can still browse javadoc, see test results, download build results from a master, without ever noticing that builds were done by slaves.  In other words, the master becomes a sort of "portal" to the entire build farm.

Follow the Step by step guide to set up master and slave machines to quickly start using distributed builds.

Different ways of starting slave agents

Pick the right method depending on your environment and OS that master/slaves run.

Have master launch slave agent via ssh

Jenkins has a built-in SSH client implementation that it can use to talk to remote sshd and start a slave agent. This is the most convenient and preferred method for Unix slaves, which normally has sshd out-of-the-box. Click Manage Jenkins, then Manage Nodes, then click "New Node." In this set up, you'll supply the connection information (the slave host name, user name, and ssh credential). Note that the slave will need the master's public ssh key copied to ~/.ssh/authorized_keys. (This is a decent howto if you need ssh help). Jenkins will do the rest of the work by itself, including copying the binary needed for a slave agent, and starting/stopping slaves. If your project has external dependencies (like a special ~/.m2/settings.xml, or a special version of java), you'll need to set that up yourself, though.

This is the most convenient set up on Unix. However, if your are on Windows and you don't have ssh commands with cygwin for example, you can use a tool like PuTTY and PuTTYgen to generate your private and public pair of keys.

For connecting to Windows slaves through cygwin sshd, see SSH slaves and Cygwin for more details.

Have master launch slave agent on Windows

For Windows slaves, Jenkins can use the remote management facility built into Windows 2000 or later (WMI+DCOM, to be more specific.) In this set up, you'll supply the username and the password of the user who has the administrative access to the system, and Jenkins will use that remotely create a Windows service and remotely start/stop them.

This is the most convenient set up on Windows, but does not allow you to run programs that require display interaction (such as GUI tests).

Note : Unlike other Node's configuration type, the Node's name is very important as it is taken as the node's address where to create the service !

Write your own script to launch Jenkins slaves

If the above turn-key solutions do not provide flexibility necessary, you can write your own script to start a slave. You place this script on the master, and tell Jenkins to run this script whenever it needs to connect to a slave.

Typically, your script uses a remote program execution mechanism like SSH, or other similar means (on Windows, this could be done by the same protocols through cygwin or tools like psexec), but Jenkins doesn't really assume any specific method of connectivity.

What Jenkins expects from your script is that, in the end, it has to execute the slave agent program like java -jar slave.jar, on the right computer, and have its stdin/stdout connect to your script's stdin/stdout. For example, a script that does "ssh myslave java -jar ~/bin/slave.jar" would satisfy this.
(The point is that you let Jenkins run this command, as Jenkins uses this stdin/stdout as the communication channel to the slave agent. Because of this, running this manually from your shell will do you no good).

A copy of slave.jar can be downloaded from http://yourserver:port/jnlpJars/slave.jar . Many people write scripts in such a way that this 160K jar is downloaded during the running of said script, to ensure that a consistent version of slave.jar is always used. Such an approach eliminates the slave.jar updating issue discussed below. Note that the SSH Slaves plugin does this automatically, so slaves configured using this plugin always use the correct slave.jar.

Updating slave.jar
Technically speaking, in this set up you should update slave.jar every time you upgrade Jenkins to a new version. However, in practice slave.jar changes infrequently enough that it's also practical not to update until you see a fatal problem in start-up.

Launching slaves this way often requires an additional initial set up on slaves (especially on Windows, where remote login mechanism is not available out of box), but the benefits of this approach is that when the connection goes bad, you can use Jenkins's web interface to re-establish the connection.

Launch slave agent via Java Web Start

Another way of doing this is to start a slave agent through Java Web Start (JNLP). In this approach, you'll interactively logon to the slave node, open a browser, and open the slave page. You'll be then presented with the JNLP launch icon. Upon clicking it, Java Web Start will kick in, and it launches a slave agent on the computer where the browser was running.

This mode is convenient when the master cannot initiate a connection to slaves, such as when it runs outside a firewall while the rest of the slaves are in the firewall. OTOH, if the machine with a slave agent goes down, the master has no way of re-launching it on its own.

On Windows, you can do this manually once, then from the launched JNLP slave agent, you can install it as a Windows service so that you don't need to interactively start the slave from then on.

If you need display interaction (e.g. for GUI tests) on Windows and you have a dedicated (virtual) test machine, this is a suitable option. Create a jenkins user account, enable auto-login, and put a shortcut to the JNLP file in the Startup items (after having trusted the slave agent's certificate). This allows one to run tests as a restricted user as well.

Launch slave agent headlessly

This launch mode 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 on Unix. To do this, configure this slave to be a JNLP slave, take slave.jar as discussed above, and then from the slave, run a command like this:

$ java -jar slave.jar -jnlpUrl http://yourserver:port/computer/slave-name/slave-agent.jnlp

Make sure to replace "slave-name" with the name of your slave.

Other Requirements

Also note that the slaves are a kind of a cluster, and operating a cluster (especially a large one or heterogeneous one) is always a non-trivial task. For example, you need to make sure that all slaves have JDKs, Ant, CVS, and/or any other tools you need for builds. You need to make sure that slaves are up and running, etc. Jenkins is not a clustering middleware, and therefore it doesn't make this any easier.  Nevertheless, one can use a server provisioning tool and a configuration management software to facilitate both aspects.

Example: Configuration on Unix

This section describes Kohsuke Kawaguchi's set up of Jenkins slaves that he used to use inside Sun for his day job. His master Jenkins node ran on a SPARC Solaris box, and he had many SPARC Solaris slaves, Opteron Linux slaves, and a few Windows slaves.

  • Each computer has an user called jenkins and a group called jenkins. All computers use the same UID and GID. (If you have access to NIS, this can be done more easily.) This is not a Jenkins requirement, but it makes the slave management easier.
  • On each computer, /var/jenkins directory is set as the home directory of user jenkins. 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 /usr/sbin/ntpdate installed, and synchronize clock regularly with the same NTP server.
  • Master's /var/jenkins 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:
    /var/jenkins
      +- .ssh
      +- bin
      |   +- slave  (more about this below)
      +- workspace (jenkins 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/jenkins/.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/jenkins to slaves (except /var/jenkins/workspace). I also use the script to replicate tools on all slaves.
  • /var/jenkins/bin/launch-slave is a shell script that Jenkins 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.
    #!/bin/bash
    
    JAVA_HOME=/opt/SUN/jdk1.6.0_04
    PATH=$PATH:$JAVA_HOME/bin
    export PATH
    java -jar /var/jenkins/bin/slave.jar
    
  • Finally all computers have other standard build tools like svn and cvs installed and available in PATH.

Note that in the more recent Jenkins packages, the default JENKINS_HOME (aka home directory for the 'jenkins' user on Linux machines, e.g. Red Hat, CentOS, Ubuntu) is set to /var/lib/jenkins.

Scheduling strategy

Some slaves are faster, while others are slow. Some slaves are closer (network wise) to a master, others are far away. So doing a good build distribution is a challenge. Currently, Jenkins employs the following strategy:

  1. If a project is configured to stick to one computer, that's always honored.
  2. Jenkins tries to build a project on the same computer that it was previously built.
  3. Jenkins tries to move long builds to slaves, because the amount of network interaction between a master and a slave tends to be logarithmic to the duration of a build (IOW, even if project A takes twice as long to build as project B, it won't require double network transfer.) So this strategy reduces the network overhead.

If you have interesting ideas (or better yet, implementations), please let me know.

Node monitoring

Jenkins has a notion of a “node monitor” which can check the status of a slave for various conditions, displaying the results and optionally marking the slave offline accordingly. Jenkins bundles several, checking disk space in the workspace; disk space in the temporary partition; swap space; clock skew (compared to the master); and response time.

Plugins can add other monitors.

Offline status and retention strategy

Administrators can manually mark slaves offline (with an optional published reason) or reconnect them.

Groovy scripts such as Monitor and Restart Offline Slaves can perform batch operations like this. There is also a CLI command to reconnect.

Then there is a background task which automatically reconnects slaves that are thought to be back up. The behavior is configurable per slave (or per cloud, if using cloudy provisioning for slaves) via a “retention strategy”, of which Jenkins bundles several (plugins can contribute others): always keep online if possible; drop offline when not in use; use a schedule; behave according to cloud’s notion of load.

Transition from master-only to master/slave

Typically, you start with a master-only installation and then much later you add slaves as your projects grow. When you enable the master/slave mode, Jenkins automatically configures all your existing projects to stick to the master node. This is a precaution to avoid disturbing existing projects, since most likely you won't be able to configure slaves correctly without trial and error. After you configure slaves successfully, you need to individually configure projects to let them roam freely. This is tedious, but it allows you to work on one project at a time.

Projects that are newly created on master/slave-enabled Jenkins will be by default configured to roam freely.

Access an Internal CI Build Farm (Master + Slaves) from the Public Internet

One might consider make the Jenkins master accessible on the public network (so that people can see it), while leaving the build slaves within the firewall (typical reasons: cost and security) There are several ways to make it work:

  • Equip the master node with a network interface that's exposed to the public Internet (simple to do, but not recommended in general)
  • Allow port-forwarding from the master to your slaves within the firewall. The port-forwarding should be restricted so that only the master with its known IP can connect to slaves. With this set up in the firewall, as far as Jenkins is concerned it's as if the firewall doesn't exist.  If multiple hops are involved, you may wish to investigate how to do ssh "jump host" transparently using the ProxyCommand construct.  In fact,  with a properly configured "jump host" setup, even the master doesn't need to expose itself to the public Internet at all - as long as the organization's firewall allows port 22 traffic.
  • Use JNLP slaves and have slaves connect to the master, not the other way around. In this case it's the slaves that initiates the connection, so it works correctly with the NAT firewall.

Note that in both cases, once the master is compromised, all your slaves can be easily compromised (IOW, malicious master can execute arbitrary program on slaves), so both set-up leaves much to be desired in terms of isolating security breach. Build Publisher Plugin provides another way of doing this, in more secure fashion.

Running Multiple Slaves on the Same Machine

Using a well established virtualization infrastructure such as Kernel-based Virtual Machine (KVM), it is quite easy to run multiple slave instances on a single physical node.  Such instances can be running various Linux, *BSD UNIX, Solaris, Windows.  For Windows, one can have them installed as separate Windows services so they can start up on system startup. While the correct use of executors largely obviates the need for multiple slave instances on the same machine, there are some unique use cases to consider:

  • You want more configurability between the configured nodes. Say you have one node set to be used as much as possible, and the other node to be used only when needed.
  • You may have multiple Jenkins master installations building different things, and so this configuration would allow you to have slaves for more than one master on the same box. That's right, with Jenkins you really can serve two masters.
  • You may wish to leverage the easiness of starting/stopping/replacing virtual machines, perhaps in conjunction with Jenkins plugins such as the Libvirt Slaves Plugin.
  • You wish to maximize your hardware investment and utilization, at the same time minimizing operating cost (e.g. utility expenses for running idling slaves).

Follow these steps to get multiple slaves working on the same Windows box:

  • Add the first slave node in Jenkins and give it its own working dir (e.g. jenkins-slave-a).
  • Go to the slave page from the slave box and launch by JNLP, then use the menu to install it as a service instead.
  • Once the service is running, you'll get jenkins-slave.exe and jenkins-slave.xml in your slave's work dir.
  • Bring up windows services and stop the Jenkins Slave service.
  • Open a shell prompt, cd into the slave work dir.
  • First run "jenkins-slave.exe uninstall" to uninstall the one that the jnlp-launched app installed. This should remove it from the service list.
  • Now edit jenkins-slave.xml. Modify the id and name values so that your multiple slaves are distinct. I called mine jenkins-slave-a and Jenkins Slave A.
  • Run jenkins-slave.exe install and then check the Windows service list to ensure it is there. Start it up, and watch Jenkins to see if the slave instance becomes active.
  • Now repeat this process for a second slave, beginning with configuring the new node in the master config.

When you go to create the second node, it is nice to be able to copy an existing node, and copy the first node you setup. Then you just tweak the Remote FS Root and a couple other settings to make it distinct. When you are done you should have two (or more) Jenkins slave services in the list of Windows services.

Troubleshooting tips

Some interesting pages on issues (and resolutions) occurring when using Windows slaves:

Some more general troubleshooting tips:

  1. Every time Jenkins launches a program locally/remotely, it prints out the command line to the log file. So when a remote execution fails, login to the computer that runs the master by using the same user account, and try to run the command from your shell. You tend to solve problems quickly in this way.
  2. Each slave has a log page showing the communication between the master and the slave agent. This log often shows error reports.
  3. If you use binary-unsafe remoting mechanism like telnet to launch a slave, add the -text option to slave.jar so that Jenkins avoids sending binary data over the network.
  4. When the same command runs outside Jenkins just fine, make sure you are testing it with the same user account as Jenkins runs under. In particular, if you run Jenkins master on Windows, consult How to get command prompt as the SYSTEM user.
  5. Feel free to send your trouble to one of our mailing lists|http://jenkins-ci.org/content/mailing-lists

Other readings

Labels

schedule schedule Delete
distribution distribution Delete
master master Delete
slave slave Delete
troubleshooting troubleshooting Delete
jnlp jnlp Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Jun 29, 2007

    Anonymous says:

    You should consider expanding on the section about launching slaves via Java Web...

    You should consider expanding on the section about launching slaves via Java WebStart. Took me a bit to figure it out. I'll even write it up of you like.

    1. Jun 29, 2007

      Kohsuke Kawaguchi says:

      Yes, please! Much appreciated.

      Yes, please! Much appreciated.

      1. Aug 01, 2007

        Anonymous says:

        Can someone give me a hint please how to open the slave page (url) ? thx!&n...

        Can someone give me a hint please how to open the slave page (url) ?

        thx! 

        1. Sep 20, 2007

          Anonymous says:

          On my master (Linux) node I have added an Ant instance which points to the /opt/...

          On my master (Linux) node I have added an Ant instance which points to the /opt/ant-1.7.0 directory. Now, some build can be performed only on Windows so I've defined a Windows slave spawned via JNLP. But every build will fail, because Ant is not in /opt/ant-1.7.0 but somewhere else (c:\ant or whatever).

          Same question about JDK path.

          1. Sep 20, 2007

            Anonymous says:

            Ok, I have found that if I put Ant into c:\opt\ant-1.7.0 it seems to work. Never...

            Ok, I have found that if I put Ant into c:\opt\ant-1.7.0 it seems to work. Nevertheless I think that such things could be configurable per slave. Of course plugins could be able to contribute paths to slave configurations

        2. Oct 24, 2007

          Anonymous says:

          If the Hudson master is running at http://hudsonmaster:8080/hudson then you w...

          If the Hudson master is running at

          http://hudsonmaster:8080/hudson
          

          then you would login to the remote slave server, open a browser and enter the above URL.  On the left-hand menu, you will see Build Executor Status section with "Master" and your remote slave listed below.  Click the slave name link and on the resulting page you will see the "Launch" button for Java Web Start.

  2. Oct 10, 2007

    Daniel Pike says:

    Something very useful in corporate networks in the ability to run slaves as a wi...

    Something very useful in corporate networks in the ability to run slaves as a windows service.  After a fair bit of playing I have been able to achieve this using the Tanuki software's Java service wrapper.  I am happy to write something up and send it through if it would be useful?

    1. Oct 10, 2007

      Kohsuke Kawaguchi says:

      Yes, by all means!

      Yes, by all means!

      1. Oct 18, 2007

        Daniel Pike says:

        Done, sent through to Kohsuke's address

        Done, sent through to Kohsuke's address

    2. Oct 16, 2007

      Jeff Black says:

      Second that!

      Second that!

  3. Jan 07, 2008

    Anonymous says:

    When hudson tries to launch a slave it complains that it cannot find maven-agent...

    When hudson tries to launch a slave it complains that it cannot find maven-agent.jar I don't know what maven is. What do I need to do to make hudson happy?

  4. Jan 25, 2008

    Anonymous says:

    Within a *nix system, you might be able to view top or uptime - looking for ...

    Within a *nix system, you might be able to view top or uptime - looking for load average on a that host. Weighting it then scheduling work based on that value.

  5. Feb 13, 2008

    Anonymous says:

    If I have 2 slaves build machines building the same project, is there a way to c...

    If I have 2 slaves build machines building the same project, is there a way to configure Hudson to utilize the build machines at the same time? for example, if machine 1 is already building and Hudson detects a change in the source code repository, can machine 2 start the build for the new checkin? That way there is no need to wait for machine 1 to finish to get feedback on the last checkin.

    1. Jun 18, 2009

      Thomas Guieu says:

      I would appreciate this feature too ! Is there a way to do that ? Or to man...

      I would appreciate this feature too !

      Is there a way to do that ? Or to manually start several builds of the same job ?

      1. Sep 02, 2011

        Christian Soltenborn says:

        That would indeed be a nice feature. As far as I can see there is no extension p...

        That would indeed be a nice feature. As far as I can see there is no extension point yet to implement different scheduling strategies - maybe this could be introduced, and plug-ins could then handle features like the above...

  6. May 23, 2008

    Michael Manz says:

    An idea for a further rule for the scheduling strategy: 4. If a build depends o...

    An idea for a further rule for the scheduling strategy:

    4. If a build depends on another build, try to build it on the same node that previously build the parent build.

  7. Dec 01, 2008

    Leon Franzen says:

    Our organization uses Maven2. We deploy a master POM that nearly all projects d...

    Our organization uses Maven2. We deploy a master POM that nearly all projects directly or indirectly inherit from. The POM project is a job in Hudson. We intend to deploy the SNAPSHOT build when changes committed to the POM are picked up and when all downstream jobs pass. Does Hudson provide a mechanism for synchronizing successful slave artifact SNAPSHOT builds so that all downstream builds on different slaves use the CI-installed (as opposed to deployed) artifacts?

    Optimally I would like to do the following:
    1) Hudson job "master pom": mvn install
    2) Do all downstream jobs (triggered by Hudson)
    3) If step 2 successful perform snapshot deploy "master pom" to primary repository.
    4) Deploy downstream projects

    Or, because we are using various (identically configured) slaves to perform the jobs, do we have to install a Hudson dedicated repository and do the following?:
    1) Hudson job "master pom": mvn deploy to Hudson repository.
    2) Do all downstream jobs
    3) If step 2 successful, mvn deploy "master pom" to primary repository.
    4) Deploy downstream projects

  8. Dec 12, 2008

    sqook - says:

    Is it possible to have a slave authenticate as a certain user? I've finally got...

    Is it possible to have a slave authenticate as a certain user? I've finally got a nice master/slave network up and running, but in order to do so, I had to grant read access to the "Anonymous" user on my main Hudson server, which opens up the site to anybody who wants to browse our projects, download build artifacts, etc. I would really prefer to have the anonymous user have no rights at all, and require usernames/passwords for all of our users, but then this would break our slaves...

    So, is it possible to tell the slave to log into hudson with a given username and password? I've looked through the documents here on the wiki, the config XML, and tried passing "-help" to all available programs, but I can't seem to find anything.

    1. Oct 13, 2009

      Stefan Bäumler says:

      I agree this is a defect (still exists in version 1.323); the whole authenticati...

      I agree this is a defect (still exists in version 1.323); the whole authentication is less worthy when I must grant read access to Anonymous only to enable build slaves connecting to the master. Does there already exist an issue on it, or is it already planned for fixing in any further version?

      1. Sep 29, 2010

        Thomas Johnson says:

        It looks like slave.jar accepts the following arguments: -jnlpCredentials USER:P...

        It looks like slave.jar accepts the following arguments: -jnlpCredentials USER:PASSWORD

        Providing Overall Read Access to the user seems sufficient to get a slave up and running. This means that you can run the slave with the following command:

        java -jar slave.jar -jnlpUrl http://build.example.com/computer/12.34.56.78/slave-agent.jnlp -jnlpCredentials builder:12345

        If you're running the Windows service, you can tweak the "arguments" node inside c:\hudson\hudson-slave.xml to contain this option. This does leave the issue of securely storing the password in the launch script, but it does achieve the "no rights for anonymous" objective.

  9. Jan 29, 2009

    dmulter - says:

    If you configure a Windows slave using Cygwin for sshd, I recommend not using th...

    If you configure a Windows slave using Cygwin for sshd, I recommend not using the CVS client that's part of Cygwin. I noticed that it was munging CRLF line terminations on DOS format files. It's possible that some combination of settings could avoid the problem, but I decided to uninstall Cygwin CVS and install TortoiseCVS (with CVSNT) instead. Once CVSNT is added to the PATH, everything worked perfectly.

  10. Apr 22, 2009

    Homer Yau says:

    Thanks for the writeup on the master/slave setup.

    Thanks for the writeup on the master/slave setup.

  11. May 22, 2009

    Chris Hines says:

    I have a working Master (Linux) / Slave (Windows XP) setup.  I use the WMI ...

    I have a working Master (Linux) / Slave (Windows XP) setup.  I use the WMI interface to launch the slave.

    Getting the master to successfully connect to the slave and launch Hudson remotely required some configuration changes on the Windows machine that were not documented here.  The exception message returned during the initial failed attepts provided just enough information for me to find this useful page on the J-Integra site that solved my problem.  Maybe others will find this information useful too.

  12. Sep 21, 2009

    sheilly agrawal says:

    All the posts seem to indicate that the Master has to be a Linux machine. Can Wi...

    All the posts seem to indicate that the Master has to be a Linux machine. Can Windows (Windows XP) be used as a Master? I wanted to have windows XP as master that would trigger builds on slaves (windows machines again). Is that possible? Where can I find detail instructions on this one?

    1. Sep 02, 2011

      Christian Soltenborn says:

      I'm using Jenkins on 2 Windows7 machines, ie., 1 master and 1 slave. The informa...

      I'm using Jenkins on 2 Windows7 machines, ie., 1 master and 1 slave. The information provided above sufficed to set everything up. As soon as I provided access to the slave, the setup was done automatically and was really easy.

  13. Oct 26, 2009

    Saniya Chopra says:

    M using Linux master and Windows slave. I used JNLP to launch the slave on ...

    M using Linux master and Windows slave. I used JNLP to launch the slave on Windows. When I used the services.msc command this opened services window and from there I tried to start HudsonSlave service and there it gave the following error

             Could not start the HudsonSlave service on Local Computer

             Error1053: The service did not respond to the start or control request in a timely fashion.

    Plz help me solve this error

  14. Jan 21, 2010

    prashanth says:

    When I use the windows 2003 Master and windows 2003 slave I am having a issue wh...

    When I use the windows 2003 Master and windows 2003 slave I am having a issue while running the build on slave, it fails with (Fatal : Unable to build script).  I think it is adding an extra slashes \, how to eradicate this without this it is not working. Started by user anonymous
    Building remotely on testing1
    [DIMENSIONS] Removing 'file:/C:/Hudson/workspace/PROJ1_DEV1/'...
    [DIMENSIONS] Checking out project "Test_DEV:PROJ1_DEV1"...
    [DIMENSIONS] (Note: Dimensions command output was -

    [DIMENSIONS] SUCCESS: Operation completed
    [DIMENSIONS] Operation completed
    [DIMENSIONS] )
    [DIMENSIONS] Dimensions project was successfully locked
    FATAL: Unable to find build script at C:\Hudson\workspace\PROJ1_DEV1\\proj1\build\build.xml
    [DIMENSIONS] Dimensions project was successfully unlocked
    Finished: FAILURE

  15. Apr 14, 2010

    bnewman - says:

    I am using Hudson to launch a distributed build for automated test purposes.&nbs...

    I am using Hudson to launch a distributed build for automated test purposes.  The master Hudson server is a Linux box; the slave, which only runs this set of tests, is a Windows box.  We use ant on the Windows box to launch the automated tests.  The slave is set up using JNLP and autologon.  The process works fine; the only question is that sometimes in the error logs I will find that ant returned a non-zero exit code from the automated test process (the exit codes are for the automated tests, for example, informing us that exceptions occurred during the automated tests) on the slave machine.  This is printed in the console output for the build, but the build still succeeds.  I'd like to be able to use that exit code to send descriptive email, but I can't seem to find any way to access that information.  Am I missing something?

  16. May 07, 2010

    Sven Oppermann says:

    Are there plans to add another distribution build like: 1. the hudson master wi...

    Are there plans to add another distribution build like:

    1. the hudson master will get the source code changes from the SCM

    2. rsync this with a slave node

    3. finally builds it on the slave node

    Im asking because, i'm using Synergy as SCM and a Synergy Project can only exists once. So if a build runs initially on node 1 and next time on node 2, synergy is moving the complete project to node 2.

  17. May 17, 2010

    meenu says:

    I am working on distributed builds from hudson. One window NT node is ...

    I am working on distributed builds from hudson. One window NT node is being used as slave. I am trying to perform build on mounted drive on window node. But hudson does not understand the drive names as say U:\ or any other name. But it recognises the absolute path.

    My requierement is to use the network drive with out giving absolute path.

    Please guide if we can perform this functionality from hudson

    1. Aug 19, 2010

      Alex Lea says:

      We managed to get this working by adding a subst command to the build subst U: ...

      We managed to get this working by adding a subst command to the build

      subst U: C:\mydir

      The service should then be able to see the U: drive. You may also need to configure the Hudson slave to run as a process with network access rights (not sure whether this is strictly necessary).

  18. Jun 28, 2010

    Norbas says:

    Lets assume that we have Master M and slave A, B and C. How can we execute on d...

    Lets assume that we have Master M and slave A, B and C.

    How can we execute on demand the Job Z, only in one of the slaves?

    For example: I want to run Job Z on Slave C. and later I want to run Job Z in Slave B.

    Cheers

    1. Jan 13, 2011

      arya ahmadi-ardakani says:

      goto Hudson, Select the job Z, click on configure. at the job configure page cli...

      goto Hudson, Select the job Z, click on configure. at the job configure page click on "Restrict where this project can be run" and in the "label expression" input box enter the name of the slave (ex: salve A). and then save this job.

      create the same job (job Z: job Z-1, Z-2) for other slave (ex: slave B and C) however set the Restrict where this project can be run" to slaves B and C.

      I think you get the idea from here

  19. Jan 14, 2011

    arya ahmadi-ardakani says:

    I was wondering once the build is done (using an script that calls gcc and make ...

    I was wondering once the build is done (using an script that calls gcc and make and all sorts of thing) on an slave, how can I use those files to package them?
    example: I have 3 builds that are being run on 3 different salves (Slaves A, B, C) and the resultant of all three needs to be packaged as one. how does master handle this situation?

    Please let me know.

    Thannk you

    1. Sep 15, 2011

      Ben Sluis says:

      Have you looked at the copyartifact plugin?  You could have each job archiv...

      Have you looked at the copyartifact plugin?  You could have each job archive its relevant files and then trigger a downstream job (say D) which uses the copyartifact plugin to get the archived files from each of the jobs (A, B, C).  It could then package them together.

      Job D would have to specify to wait for upstream jobs to finish building before it runs.

  20. May 10, 2011

    Marcus Haebler says:

    One important item I noted when starting a Windows Slave via WMI+DCOM, you have ...

    One important item I noted when starting a Windows Slave via WMI+DCOM, you have to have "java" in your PATH on the Windows slave. Otherwise it will fail to start the slave.

    This is actually a somewhat puzzling behavior because it seems that the Jenkins code - based on the messages during setup - actually looks for Java.

  21. Jun 02, 2011

    Natalia Naumova says:

    About the marking slaves as online/offline: it will be good to add the possibili...

    About the marking slaves as online/offline: it will be good to add the possibility to view who has changed the node status (reserve it for example) if the 'Matrix-based security' is used. Is this possible?

  22. Sep 15, 2011

    Ben Sluis says:

    I have some slaves that are faster machines and some slaves that are slower.&nbs...

    I have some slaves that are faster machines and some slaves that are slower.  I would like jobs to have a priority to run on the faster machines but fallback to the slower machines when the fast ones are busy.  I haven't found a good way to do this through the 'Restrict where this project can be run' feature of the job.  Any suggestions about how to make this work?

    1. Sep 20, 2011

      Milutin Jovanovic says:

      I have the same problem. The way I would like to work is that Jenkins sorts all ...

      I have the same problem. The way I would like to work is that Jenkins sorts all the slaves in my order of preference, and then chose the first available one. In case few were set with the same preference, then it can prefer one with the most recent build.

      This can be applied even to the current scheme of preferences, chose any prefered free node, and only if none available then chose one maked to be used only for tied jobs.

      The idea of saving disk space by reusing the slave that ran the last build is nice, but I dont think this should override my setting that a certain machine should be used only for tied jobs.

      BTW, this is my first comment, and I cannot leave before saying big thanks to all involved with the Jenkins project!

  23. Jan 04, 2012

    cheap clothes says:

    Hi, the article is so wonderful, I am in...

    Hi, the article is so wonderful, I am interested in it. I will pay attention to your articles. And I like cheap clothes very much, and I have found a wholesale in china online, there are cheap shoes on their website. 

    Especially the cheap clothing and cheap bags, the wholesale shoes and wholesale jewelry are also very nice, they are my favorite!

  24. Jan 04, 2012

    cheap clothes says:

    Do you like motorcycling and have your own&nb...

    Do you like motorcycling and have your own motor equiments?You can come here Belstaff Outlet to find your Belstaff Jacket.Belstaff Coat can not little.If your foot is cold,Belstaff Boots is not bad.

    You can buy a Belstaff Bag to hold those equipments.

  25. Mar 19, 2012

    Ed Randall says:

    Scheduling strategy - we have 4 slaves, all identical, all the same network dist...

    Scheduling strategy - we have 4 slaves, all identical, all the same network distance from the master.

    Each slave is configured to have 2 executors.

    We've noticed that Jenkins always seems to favour one slave in particular, to the extent that it will run 2 jobs on it simultaneously even when all the other slaves are idle.

    This is not ideal so I reduced the executors on that node to 1.  Now it does the same behaviour, but preferring a different node.

    I'd prefer if it took account of the current job situation (or recent average CPU load?) when allocating a new job as well.

    This is open as JENKINS-7444

  26. Apr 04, 2012

    daniel nitzan says:

    I have seen no where a reference to working with distributed builds and maintain...

    I have seen no where a reference to working with distributed builds and maintaining Maven snapshots.

    In a master-only configuration, we used to install the snapshots to local maven repository, which could be used by other builds.

    However, with a master/slave configuration, two builds might be processed on different machines, so the local repositories are not in sync, which means build problems.

    Is there anyway to overcome this issue other that deploying every dependency to our organization repository (Artifactory) and building every project with force update snapshots? (mvn -U)?

    Thanks

    Daniel

  27. Oct 02, 2012

    Michael Chmielewski says:

    With Jenkins able to do autoinstall of tools, do we need to follow the Unix guid...

    With Jenkins able to do autoinstall of tools, do we need to follow the Unix guidelines of putting tools in /var/tools. I mean, sure, non-standard tools, yes. The examples of ant, maven and the JDK seem moot now, or am I mistaken?

  28. Apr 01, 2013

    Alexander Artemov says:

    >Jenkins tries to move long builds to slaves, because the amount of network ...

    >Jenkins tries to move long builds to slaves, because the amount of network interaction between a master and a slave tends to be logarithmic to the duration of a build

    Please explain this sentence more clearly. Now it states the following )as I understand):

    Jenkins tries to move long builds to slaves, because it takes more traffic between servers - which is very strange. I would understand if Jenkins tries to minimize traffic and thus tries NOT to move long builds to slaves.

  29. Jul 11, 2013

    Alexander Artemov says:

    "Restrict where this project can be run" options: I wonder, what is the differen...

    "Restrict where this project can be run" options: I wonder, what is the difference between expr&&expr and expr||expr variants?