用于Jenkins连接Slave节点的脚本,可以自动创建节点。
使用方式:python Connect_Node.py https://Jenkins_Url 节点名称
from jenkinsapi.jenkins import Jenkins
import requests, re, subprocess, sys, os
def download_agent_jar(Jenkins_Url):
agent_jar_url = Jenkins_Url + "/jnlpJars/agent.jar"
response = requests.get(agent_jar_url, stream=True, verify=False)
if response.status_code == 200:
target_path = os.path.join('agent.jar')
with open(target_path, 'wb') as file:
for chunk in response.iter_content(chunk_size=128):
file.write(chunk)
print("Downloaded agent.jar to" + target_path)
return target_path
else:
raise ValueError("Failed to download agent.jar. Status code:" + response.status_code)
def get_node_secret(Jenkins_Url, Username, Token, Node_Name):
jnlp_url = Jenkins_Url + "/computer/" + Node_Name + "/jenkins-agent.jnlp"
response = requests.get(jnlp_url, auth=(Username, Token), verify=False)
match = re.search(r'<application-desc main-class="hudson.remoting.jnlp.Main"><argument>([a-z0-9]*)</argument>', response.text)
if match:
node_secret = match.group(1)
return node_secret
else:
raise ValueError("Failed to retrieve node secret.")
def creatSlave():
nodes = Jenkins.get_nodes()
if Node_Name in nodes:
print(Node_Name + "Node already exists")
else:
node_dict = {
'num_executors': 1,
'node_description': "",
'remote_fs': Workspace,
'labels': "",
'exclusive': True
}
new_slave = Jenkins.nodes.create_node(Node_Name, node_dict)
print("Node created successfully")
return new_slave
def start_jenkins_agent():
command = [
'java', '-jar', 'agent.jar',
'-jnlpUrl', Jenkins_Url + '/computer/' + Node_Name + '/jenkins-agent.jnlp',
'-secret', Node_Secret,
'-workDir', Workspace,
'-noCertificateCheck'
]
subprocess.run(command)
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: python3 lunchSlave.py Jenkins_Url Node_Name")
sys.exit(1)
Jenkins_Url = sys.argv[1]
Node_Name = sys.argv[2]
Username = "用户名"
Token = 'token'
Workspace = "/root/build"
Agent_Jar_Path = download_agent_jar(Jenkins_Url)
Jenkins = Jenkins(Jenkins_Url, Username, Token, ssl_verify=False)
creatSlave()
Node_Secret = get_node_secret(Jenkins_Url, Username, Token, Node_Name)
start_jenkins_agent()