I have set up Windows build nodes in awhile, but I do remember when I did I was only able to set 1 executor per node. Is this still true?
2 Answers
You can specify the executors of your node in his configuration.
Manage Jenkins -> Manage Nodes -> Configure Node -> Number of build processors
In environments where we only run scripts etc. we have one executor per core.
But if you have large build jobs and the performance is important for you, you should read this article from the jenkins documentation.
https://www.jenkins.io/doc/book/scaling/architecting-for-scale/#Calculating-how-many-jobs
-
LOL, thanks I was just reading that. But that describes how may executors I may need, and doesn't really address my question directly.– Chris FCommented May 18, 2021 at 15:11
-
Sorry, I hid the answer a little bit. We have one executor per core, so it is possible to set more than one executor per node. Commented May 19, 2021 at 9:26
The architecting for scale calcs don't give a good calculation, just a starting point. It does not address how often your jobs are triggered. The answer really depends on what you are executing and how often. Are you doing process intensive work, I/O heavy of network heavy work? Do you have a CI pipeline trigger on every commit (and how often is that), or manual jobs?
We have over 9000 jobs of all flavours, from manual and CI check-in triggered builds (Java and JS) and pipelines, to nightly integration/regression jobs, file management jobs, analysis jobs, some sometime once in a blue moon jobs, some interact w/real hardware or simulate waits or wait for remote results processing. About 1000 jobs execute/day. We have win nodes, linux nodes, common pool and label restricted nodes, all VM based ans dedicated to Jenkins. We even have some VMs running two different agent/nodes on same VM, different settings, effectively overallocating, but not in practice.
The short answer is: start with one executor/core and load it up, measure your loads (cpu/io/net/duration) and see. How long does each job take by itself (100%) vs one of many in parallel? Is the aggregate faster or longer? Gow do the loads compare?
We found when we know what we are running, at specific times we can easily go 2 executors/core. Every now and then, just 2 memory intensive jobs will exhaust memory, even when just 2/4 executiors in use (bad luck, restart one).
This may all be different if all your agents are cloud-based or ephemeral.
YMMV.