We have an existing Jenkins install that is testing firmware running on an embedded tart. The multi-stage pipeline looks something like: Checkout -> Build -> Download -> Smoke tests -> Unit tests. This is working great, except it takes 9 hours to run the pipeline. To speed things up and also to test different target variants we have added 3 more targets to the system (UUT#1, #2, and so on).
My question is, what is the most straightforward way to allow the parallelization happen while also restricting the suites to UUTs with specific properties. For example, our Unit tests contain about 10 different suites (suite1 suite2 and so on), and what I’d like to do is spread those out amongst the 4 UUTs (thus having 4 suites running at a time) but restrict the execution this way:
- Suite1 can only run on a UUT that has ‘USB’
- Suite2 can only run on a UUT that has ‘LCD-display’
- Suite3 can run anywhere
.. and so on, then my UUTs might have properties like:
- UUT#1 ‘USB LCD-display’
- UUT#2 ‘Ethernet’
- UUT#3 ‘RS-232 USB’
Etc.
Reading about agents, it seems that a label
on an agent may allow this, but agents seem to carry a lot of overhead and I’m not sure if they’re appropriate.
Long-time Jenkins user, but this is the first time I’ve ever attempted anything this complicated and pipelines are a new concept for me.