首页 > 编程语言 >python通过API接口修改Jenkins job的参数默认值

python通过API接口修改Jenkins job的参数默认值

时间:2023-01-07 17:03:42浏览次数:35  
标签:xml python server job str jenkins 默认值 config


文章目录

  • ​​一、初级版:修改一个参数的默认值​​
  • ​​`需求:把t1项目的DB_TYPE的默认值从mysql改为oracle`​​
  • ​​`代码`​​
  • ​​`效果`​​
  • ​​二、中级版:同时修改多个参数的默认值​​
  • ​​`需求:把t1项目的DB_TYPE改为oracle,OS_TYPE改为windows`​​
  • ​​`代码`​​
  • ​​`效果`​​
  • ​​三、参考文章​​

一、初级版:修改一个参数的默认值

需求:把t1项目的DB_TYPE的默认值从mysql改为oracle

python通过API接口修改Jenkins job的参数默认值_Jenkins

代码

import jenkins
from xml.etree import ElementTree as ET
from xml.dom.minidom import parse

jenkins_server_url = "http://192.168.1.2:8080/"
username = "admin"
token = "111111"

server = jenkins.Jenkins(jenkins_server_url, username=username, password=token)
print(server.get_version()) # Jenkins版本

# 获取Jenkins job t1项目的配置文件
pipelineBuildConf = server.get_job_config('t1')
xml_root = ET.XML(pipelineBuildConf) # 获取根标签
tree = ET.ElementTree(xml_root)
tree.write("config.xml", encoding="utf-8",short_empty_elements=True) # 将配置文件保存到config.xml

# 处理config.xml
doc = parse("./config.xml")

# 删除字符串参数的某个元素
str_param_define=doc.getElementsByTagName("hudson.model.StringParameterDefinition")[0]
element_delete = doc.getElementsByTagName("defaultValue").item(0)
str_param_define.removeChild(element_delete)
# 创建该元素
str_param_define=doc.getElementsByTagName("hudson.model.StringParameterDefinition")[0]
new_element=doc.createElement("defaultValue")
new_element.appendChild(doc.createTextNode("oracle")) # 给元素增加文本
str_param_define.appendChild(new_element)

with open("config.xml", "w", encoding="utf-8") as f:
doc.writexml(f, indent='\n', addindent='\t', newl='\n', encoding="utf-8")

# 删除xml文件里面的空行
with open("config.xml","r",encoding="utf-8") as xmlfile:
lines = [line for line in xmlfile if line.strip() != ""]
with open("config.xml", "w",encoding="utf-8") as xmlfile:
xmlfile.writelines(lines)

f = open('config.xml', 'r',encoding="utf-8") # 打开文件
xml = f.read() # 读取文件内容
f.close()
server.reconfig_job("t1",xml) # 更新Job

效果

python通过API接口修改Jenkins job的参数默认值_xml_02

二、中级版:同时修改多个参数的默认值

需求:把t1项目的DB_TYPE改为oracle,OS_TYPE改为windows

python通过API接口修改Jenkins job的参数默认值_jenkins_03

代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName :modify_jenkins_job.py
# @Time :2023/1/3
# @Author :运维@小兵
# @Function :通过API接口,修改Jenkins job的配置
# @Excute :python modify_jenkins_job.py

######################导入模块######################
import jenkins,os
from xml.etree import ElementTree as ET

######################定义变量######################
workdir = os.path.dirname(os.path.abspath(__file__)) # 获取当前脚本绝对路径
config_path = os.path.join(workdir,"config.xml")
jenkins_server_url = "http://192.168.1.2:6060/"
username = "admin"
token = "113383aa84ffa8315ec032f6a465f"
jenkins_server = jenkins.Jenkins(jenkins_server_url, username=username, password=token)
job_name = "t1"
job_str_dict = {"DB_TYPE":"oracle","OS_TYPE":"windows"}
"""
Check Jenkins Connection

:param param1: jenkins实例化server

:returns: null
"""
def check_jenkins_connect(jenkins_server):
try:
print('jenkins版本:%s' % jenkins_server.get_version()) # Jenkins版本
except Exception as e:
print('ERROR:%s' % e)

"""
Check Jenkins Connection

:param param1: 配置文件绝对路径
:param param1: Jenkins job名字
:param param1: 参数字典
:param param1: 需要修改的xml文件中的元素名

:returns: null
"""
def modify_job_str_defaultValue(config_path,job_name,str_dict,element_name):
pipelineBuildConf = jenkins_server.get_job_config(job_name) # 获取Jenkins job的配置文件
xml_root = ET.XML(pipelineBuildConf) # 获取文件根标签
str_param_object = xml_root.find("properties").find("hudson.model.ParametersDefinitionProperty").find(
"parameterDefinitions").iter("hudson.model.StringParameterDefinition") # 获取字符串参数标签
for str_param_cell in str_param_object:
element_value = str_param_cell.find("name").text # name元素的值,如DB_TYPE
str_param_cell.find(element_name).text = str_dict.get(element_value) # 修改元素的值
tree = ET.ElementTree(xml_root)
tree.write(config_path, encoding="utf-8", short_empty_elements=True) # 如果文件不存在,则创建文件,如果文件已存在则修改相应内容

# 更新job
f = open(config_path, 'r',encoding="utf-8") # 打开文件
xml = f.read() # 读取文件内容
f.close()
jenkins_server.reconfig_job(job_name, xml) # 更新job
print(f"[INFO] Jenkins Job:{job_name} Update Success")

if __name__ == '__main__':
try:
check_jenkins_connect(jenkins_server)
modify_job_str_defaultValue(config_path,job_name,job_str_dict,"defaultValue")
except Exception as e:
print('ERROR:%s' % e)

效果

python通过API接口修改Jenkins job的参数默认值_xml_04

三、参考文章

​​python处理Jenkins Job配置文件config.xml​​


标签:xml,python,server,job,str,jenkins,默认值,config
From: https://blog.51cto.com/u_4820306/5995632

相关文章

  • python画图
    #!pip install matplotlib==3.0.0 import matplotlib.pyplot as pltz = []#生成数据 for i in range(50):    z.append(random.randint(-......
  • 过年不让放炮,我用Python实现了1000响大地红的特效
    兄弟们,马上(还有13天)就要过年啦,今年能带对象回家了吗哈哈哈新的一年,新的气象,穿上新衣准备过大年…俗话说得好,这所谓放鞭炮就是来压邪祟,除恶的,但是近几年来都不让......
  • Python调度库(schedule)——定时任务
    Python调度库(schedule库)——定时任务官网:https://schedule.readthedocs.io/en/stable/examples.html可用与线程池结合使用,进行多线程定时执行任务,也可以当做任务执行队列......
  • Python列表推导式使用举例
    """列表推导式功能说明:列表推导式可以利用range区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。语法:[表达式for迭代变量in可迭代对象......
  • Python编译安装
    #安装依赖yum-yinstallzlib-develbzip2-developenssl-devel\ncurses-develsqlite-develreadline-develtk-devel\gdbm-develdb4-devellibpcap-develxz-dev......
  • Python----函数进阶
    函数的返回值作为参数传递给其他函数deffunc():return50deffunc1(num):print(num+100)func1(func())函数返回多个值deffunc():#返回值可以是......
  • Python库之os库和logging库的基本使用说明
    使用os库操作目录及文件使用os.sep()方法获取系统分隔符print(os.sep)使用os.name()方法获取操作系统的平台类型print(os.name)使用os.getcwd()方法获取当前工作目录p......
  • 使用python发送系统通知(适用于linux,windows等)
    使用pip安装:pip3installplyer使用方法:fromplyerimportnotificationnotification.notify(title="test", #标题message="aaaa", #内容app_ic......
  • python的虚拟环境
    实操:1.安装虚拟环境的工具virtualenvpipx.xinstallvirtualenv2.命令行创建virtualenvF:\envs\v1--python=python3.93.如何使用虚拟环境1绝对路径的方式......
  • python虚拟环境搭建
    一、虚拟环境的作用由于python需要安装大量的库,为了防止库的版本冲突虚拟环境就产生了二、虚拟环境的安装三、虚拟环境的切换进入到虚拟环境目录下的Scripts,执行activ......