Jenkins的节点创建是一个比较重要的工作,专栏前面的文章里我已经将创建什么样的节点,如何创建节点做了总结。这篇文章将教会大家如何通过python代码来批量处理节点。
(前面的文章juejin.cn/post/722250…
基本环境配置需求与准备工作
插件安装
我们选择远程登录Via SSH,所以需要先安装ssh agent插件,插件全名为SSH Build Agents plugin
这次是在一个windows版本的jenkins进行操作,使用的时候直接安装msi,依赖java11或者17,需要提前安装。安装完后是个服务,并且默认是启动的。
如果在安装插件过程中出现ssl连接问题,可以尝试将/manage/pluginManager/advanced下的Update Site值https改成http,还不行的话在Jenkins服务属性里将其停止,并增加启动参数-Dhudson.model.DownloadService.noSignatureCheck=true进行启动。要是一直不行,那就只能下载文件手动安装了。
凭证配置
增加一个SSH Username with private key的凭证,将一个私钥放进去,用户名就是后面要用的Jenkins登录用户名。
机器认证配置
在对应的机器相关用户下的.ssh文件夹里authorized_keys中,将这个私钥对应的公钥放进去。
建立第一个结点
进入/computer/new,输入名称后照此法填写,在登录方法里一定要选择via SSH
如果上面的步骤都是正确的话,创建成功的时候机器已经链接上了。
生产api token
进入到自己的用户界面进行生成,保存到本地备用,用于代码连接Jenkins。
使用python代码操作节点
连接Jenkins
这里使用jenkinsapi库进行操作
from jenkinsapi.jenkins import Jenkins
jks = Jenkins('http://127.0.0.1:8080/', username='admin', password='11597987c28c751f1750b4b4b0d4694551', use_crumb=True)
获取已定义的节点
批量加载节点需要有个模板,这个是前面我们创建的节点,也就是定义好的模板。
node = jks.get_node('test')
解析配置
这里通过xml库来解析xml格式的配置字符串,打印配置可以看到一个结构化的文档。
from xml.dom.minidom import parseString
node_config = node.get_config()
print(node_config)
通过parseString转换后,字符串变成了一个结构化的对象,对其每个节点的操作都会应用于整个对象。
dt = parseString(node_config)
collection = dt.documentElement
名称节点是必须要修改的,一个Jenkins不能有两个同名的节点,在已经解析的对象里取得这个节点信息是通过getElementsByTagName方法得到的列表第一个。其第一子结点的数据就是这个名称内容。同理远程目录、描述、主机ip、端口信息和其他参数都可以通过这个方式进行修改。
name_node = collection.getElementsByTagName("name")[0]
print(name_node.firstChild.data)
name_node.firstChild.data = 'test_12'
创建一个新的节点,这里节点的名称不要和已有的冲突。这里创建的是一个JNLP类型的节点,这是这个库里可以实现的默认功能,不是我们的ssh类型的节点,配置会被后续修改,所以这里只需要填一个名称。
node_new = jks.create_node('test_1')
加载前一个节点修改后的配置
node_new.upload_config(dt.toxml())
这样一个新的节点就创建完成了,加入循环后可以批量创建节点了。
节点的启动
尝试去连接,不是所有的节点配置完都会自己连接的,所以需要这一个步骤。 node_new.poll()
删除节点
删除节点直接通过jks实例进行操作。
比如我们要删除node2和node3
只需要执行:
注意事项
加载配置的功能可能会受到Jenkins版本的影响变得不一样,需要对不同版本进行尝试观察结果。