This is my use case: I have tests that require a collection of machines to run. There are different types of machine collections, with 1 or more instances of each type. Each collection can be used by only one driving set of tests at a time.
The tests themselves do not run in the collection of machines; they can all run via ssh on the same host (or different ones, it makes no difference to me). Once the tests are finished I would like to publish reports that they generate. So the tests could run on a regular Jenkins ssh slave with a bunch of executors. But at the same time I would like to define each collection of machines as a "slave", giving each collection type a different label so that test jobs would queue and wait for the appropriate type. Essentially, each machine collection slave is just a set of key value pairs (of credentials and other bits of info) to pass to the dumb ssh slave and used as test parameters, telling the tests where to run. I was wondering if there are plugins that allow a) defining a slave as a set of key value pairs and b) defining a requirement for a job to have exclusive access to 2 types of slaves before it will run on one of them. I can't recall seeing any additional types of slaves apart from the dumb one or VMs controlled by the vSphere Cloud Plugin. Are there any more? One solution I thought of is to define an ssh slave for each machine collection (they could all be on the same host), each with 1 executor and 2 labels: one generic (i.e. perf) and the other specific (i.e. perf1). Then there would be one Slave Setup Plugin<https://wiki.jenkins-ci.org/display/JENKINS/Slave+Setup+Plugin>configuration per slave, each with a label matching the specific slave labels (i.e. perf1) that would copy a properties file to the root of the slave directory tree. One open question I have is where the Slave Setup Plugin copies files to; if it is to an absolute path then I wouldn't be able to reuse the same host for a number of slaves. Any thoughts or suggestions on how this could be set up (or what might be missing or which plugin almost fits to set this up) would be highly appreciated! Thanks, David