How to Dynamically Create Jenkins Agent Nodes Using Groovy
This article demonstrates how to programmatically create Jenkins agent nodes on demand with Groovy scripts, covering import statements, node configuration, adding the node to Jenkins, and retrieving node details for further automation in a CI/CD pipeline.
The article explains a method to dynamically create Jenkins agent nodes for elastic builds, using native Groovy code instead of the Kubernetes plugin.
Import Packages
import hudson.model.Node.Mode
import hudson.slaves.*
import jenkins.model.JenkinsAdd a New Node
String agentName = "zeyang"
String executorNum = "1"
String agentLabel = "JenkinsPod"
agent_node = new DumbSlave(agentName, "Jenkins pod", "/opt/jenkins", executorNum,
Mode.EXCLUSIVE,
agentLabel,
new JNLPLauncher(),
RetentionStrategy.INSTANCE)
Jenkins.instance.addNode(agent_node)The parameters are:
agentName : node name
executorNum : number of executors (as a string)
agentLabel : node label
description : description text
JNLPLauncher() : launch method
Mode.EXCLUSIVE : restrict job scheduling to this node
RetentionStrategy.INSTANCE : keep the node always online
Retrieve Node Information
node = Jenkins.instance.getNode(agentName)
computer = node.computer
jenkinsUrl = Jenkins.instance.rootUrl.trim().replaceAll('/$', '')
return ""{
"jenkinsUrl" : "${jenkinsUrl}",
"jenkinsHome": "${node.remoteFS.trim()}",
"computerUrl": "${computer.url.trim().replaceAll('/$', '') as String}",
"computerSecret": "${computer.jnlpMac.trim()}"
}""This script fetches the newly created node's configuration and returns it as a JSON string for downstream processing.
By completing these steps, the first phase of elastic build automation is achieved, and the retrieved node data can later be used to replace pod templates and launch containers in a Kubernetes cluster.
DevOps Cloud Academy
Exploring industry DevOps practices and technical expertise.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.