1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
"""
How to create slaves/nodes
"""
import logging
import requests
from jenkinsapi.jenkins import Jenkins
from jenkinsapi.utils.requester import Requester
requests.packages.urllib3.disable_warnings()
log_level = getattr(logging, "DEBUG")
logging.basicConfig(level=log_level)
logger = logging.getLogger()
jenkins_url = "http://localhost:8080/"
username = "default_user" # In case Jenkins requires authentication
password = "default_password"
jenkins = Jenkins(
jenkins_url,
requester=Requester(
username, password, baseurl=jenkins_url, ssl_verify=False
),
)
# Create JNLP(Java Webstart) slave
node_dict = {
"num_executors": 1, # Number of executors
"node_description": "Test JNLP Node", # Just a user friendly text
"remote_fs": "/tmp", # Remote workspace location
"labels": "my_new_node", # Space separated labels string
"exclusive": True, # Only run jobs assigned to it
}
new_jnlp_node = jenkins.nodes.create_node("My new webstart node", node_dict)
node_dict = {
"num_executors": 1,
"node_description": "Test SSH Node",
"remote_fs": "/tmp",
"labels": "new_node",
"exclusive": True,
"host": "localhost", # Remote hostname
"port": 22, # Remote post, usually 22
"credential_description": "localhost cred", # Credential to use
# [Mandatory for SSH node!]
# (see Credentials example)
"jvm_options": "-Xmx2000M", # JVM parameters
"java_path": "/bin/java", # Path to java
"prefix_start_slave_cmd": "",
"suffix_start_slave_cmd": "",
"max_num_retries": 0,
"retry_wait_time": 0,
"retention": "OnDemand", # Change to 'Always' for
# immediate slave launch
"ondemand_delay": 1,
"ondemand_idle_delay": 5,
"env": [ # Environment variables
{"key": "TEST", "value": "VALUE"},
{"key": "TEST2", "value": "value2"},
],
}
new_ssh_node = jenkins.nodes.create_node("My new SSH node", node_dict)
# Take this slave offline
if new_ssh_node.is_online():
new_ssh_node.toggle_temporarily_offline()
# Take this slave back online
new_ssh_node.toggle_temporarily_offline()
# Get a list of all slave names
slave_names = jenkins.nodes.keys()
# Get Node object
my_node = jenkins.nodes["My new SSH node"]
# Take this slave offline
my_node.set_offline()
# Delete slaves
del jenkins.nodes["My new webstart node"]
del jenkins.nodes["My new SSH node"]
|