文章目录

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

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

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

代码

import jenkins
from xml.etree import ElementTree as ET
from xml.dom.minidom import parsejenkins_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

效果

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

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

代码

#!/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 Jenkins的job名字 "key1:value1" "key2:value2"######################导入模块######################
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)"""
modify job string parameter defaultvalue: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)                            # 获取文件根标签for key, value in str_dict.items():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_TYPEif element_value == key:str_param_cell.find(element_name).text = value      # 修改元素的值print("%s的值改为%s" % (key,value))breaktree = ET.ElementTree(xml_root)tree.write(config_path)                                         # 如果文件不存在,则创建文件,如果文件已存在则修改相应内容# 更新jobf = open(config_path, 'r')  # 打开文件xml = f.read()              # 读取文件内容f.close()jenkins_server.reconfig_job(job_name, xml)  # 更新jobprint("[INFO] Jenkins Job:%s Update Success" % job_name)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处理Jenkins Job配置文件config.xml

python修改Jenkins job的参数默认值相关推荐

  1. python参数默认值

    官方文档很详细啊! python官方文档 4.7.1. Default Argument Values¶ The default values are evaluated at the point o ...

  2. ES6: 参数默认值及中间域

    下午看了一章 ECMA-262 by Dmitry Soshnikov, 现在稍稍来小结下ES6中的参数默认值以及由此产生的参数中间作用域. 原文地址: http://dmitrysoshnikov. ...

  3. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  4. JavaScript中实现函数重载和参数默认值

    2019独角兽企业重金招聘Python工程师标准>>> 参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高. 举个例 ...

  5. Python中如何设置函数的默认值

    1 问题描述 如何在python中获得一个设置了指定参数默认值的函数呢? 2 获得指定参数默认值的函数 使用functools.partial来实现:

  6. ES6:Rest 参数和参数默认值【转】

    Rest 参数 通常,我们需要创建一个可变参数的函数,可变参数是指函数可以接受任意数量的参数.例如,String.prototype.concat 可以接受任何数量的字符串作为参数.使用 Rest 参 ...

  7. java接口参数默认值_下面关于setMaxAge(int expires)方法参数默认值的描述中,正确的是(5.0分)_学小易找答案...

    [单选题]下面选项中,用于在web.xml中配置监听器的元素是(5.0分) [填空题]Cookie技术用于将会话过程中的数据保存到( )中,从而使浏览器和服务器可以更好地进行数据交互.(5.0分) [ ...

  8. ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map

    根据视频进行整理 [https://www.bilibili.com/video/BV1uK411H7on?p=1] 视频资源(百度网盘): 链接:[https://pan.baidu.com/s/1 ...

  9. 【Shell】设置变量默认值,参数默认值, 自动赋值

    设置变量默认值,参数默认值, 自动赋值 转自:https://zhuanlan.zhihu.com/p/98636736 默认参数(变量默认值) if 繁琐方式 if [ ! $1 ]; then$1 ...

最新文章

  1. 分布式、服务化的ERP系统架构设计
  2. [转] - 学习ASP.NET比较完整的流程!
  3. 07丨切片集群:数据增多了,是该加内存还是加实例
  4. php mysql int 日期格式化 string,MYSQL int类型字段的时间存放和显示 和 php的时间存放函数...
  5. 安卓增删改查用sql语句号码_详解Android中一些SQLite的增删改查操作
  6. 浅谈css3长度单位rem,以及移动端布局技巧
  7. 亚马逊ec2服务器上无法使用sudo执行npm命令的解决办法
  8. 常用ajax调用方法,web前端之4种常用的Ajax请求方式
  9. java+毕业设计+进销存管理系统+源码+论文.rar
  10. 《Python编程:从入门到实践》读书笔记
  11. 关于生产报表工具—行列视(RCV)的答疑
  12. 期货反向跟单--有趣儿的差异化
  13. 清除某个特定网站的缓存---基于Chrome浏览器
  14. day20.顺序结构 选择结构
  15. JAVA random 缺陷_Random在高并发下的缺陷以及JUC对其的优化
  16. android蓝牙传文件开发,Android Bluetooth文件传输
  17. 如何以HTML显示Base64图像?
  18. 玉米社:什么是差异化营销,差异化营销案例有哪些?
  19. 基于Python画曼德勃罗集
  20. 浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛) K.来自良心出题人wzc的简单题

热门文章

  1. win10 自带截图工具 SnippingTool
  2. elment表格sort-method自定义排序功能
  3. 绝对隐私:华为公司员工待遇全面揭秘
  4. 在iOS当中发送电子邮件和短信
  5. 大丰银行:银行IPO被否第一家,宣告商业银行IPO的审核标准发生了重大变化
  6. java面试vs撒谎?
  7. 【python】windows定时运行python脚本
  8. 用计算机发现计算规律,用计算器探索规律
  9. C语言中的整型变量与实行常量
  10. ps磨皮插件portraiture