Jenkins 节点断开重连的代码实现

579 阅读2分钟

专栏前面的文章里,我们探讨过如何通过代码来修改Jenkins节点的配置和删除节点,在Jenkinsapi的python库功能下,目前还没有断开后重新连接节点的功能。这一篇向大家介绍如何实现这个功能。

(前情提要:jenkins 节点的创建与管理的自动化 - 掘金 (juejin.cn)

为什么要这个功能

对于Jenkins来说,节点的环境变量是只有在断开重新连接的时候才会更新的,临时下线再上线并不影响这个变量,所以节点断开重连是实现管理自动化的很重要的功能。 

Jenkinspai库中节点重连的实现逻辑

以目前的功能来看,对于节点的操作,Jenkins库可以实现增加、删除、修改配置、临时下线再上线并不影响这个变量,、上线、轮询、查询状态、查询配置等功能,暂时还没有节点断开的功能。

从上面的几项功能里,我们分析,可以把节点断开后重连的功能分解为下面几个步骤:

1. 读取节点的配置

2. 判断节点是否空闲,不空闲就等待。

3. 空闲节点执行删除操作

4. 重新建一个节点

5. 节点加载原有的节点配置

6. 轮询节点使其上线

代码及其释义

导入需要的库文件并建立Jenkins实例:

# coding:utf-8
import time  
from jenkinsapi.jenkins import Jenkins  


jks = Jenkins('http://127.0.0.1:8080/', username='bob', password='110c70ea8f41063e377aca53007a1ca2e',  
              use_crumb=True)  

取得原有节点的配置

node_name = 'test_node'
test_node = jks.get_node(node_name)
test_node_config = test_node.get_config()  

检测节点的空闲状态,空闲后删除节点

while not test_node.is_idle():  
    print('node')  
    time.sleep(10)  
jks.delete_node(node_name)  

重新建立节点并加载原来的配置,create_node方法上次没用过,其实只需要提供一个节点的名称,他就能创建出来一个节点了

jks.create_node(node_name)  
test_node = jks.get_node(node_name)  
test_node.upload_config(test_node_config)  
test_node.poll()

注意事项

节点的创建功能其实也可以应用于更新,取决于create_node源码里推送配置文件动作在Jenkins处的处理逻辑,有这个名称的节点就是更新配置,没有就是新增一个节点