一、准备config.xml文件

<flow-definition plugin="workflow-job@1174.1176.va_29023983d67">
  <actions>
    <org.jenkinsci.plugins.workflow.multibranch.JobPropertyTrackerAction plugin="workflow-multibranch@716.vc692a_e52371b_">
      <jobPropertyDescriptors>
        <string>hudson.model.ParametersDefinitionProperty</string>
      </jobPropertyDescriptors>
    </org.jenkinsci.plugins.workflow.multibranch.JobPropertyTrackerAction>
  </actions>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
  </properties>
  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2660.2664.v4c114e93f4c1">
    <script></script>
    <sandbox>true</sandbox>
  </definition>
  <triggers/>
  <disabled>false</disabled>
</flow-definition>

二、增加字符串参数

代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import jenkins
from xml.dom.minidom import parse

jenkins_server_url = "http://192.168.1.4:6060/"
username = "devops"
token = "112f52051d1432cade5d555b5c595"

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

doc = parse("./config.xml")

# 创建第一个字符串参数:DB_TYPE
param_define=doc.getElementsByTagName("parameterDefinitions")[0]             # 获取第一个parameterDefinitions元素
new_str_param=doc.createElement("hudson.model.StringParameterDefinition")    # 创建元素:hudson.model.StringParameterDefinition
param_define.appendChild(new_str_param)      # 追加元素

str_param_define=doc.getElementsByTagName("hudson.model.StringParameterDefinition")[0]
new_element=doc.createElement("name")
new_element.appendChild(doc.createTextNode("DB_TYPE"))      # 给元素增加文本
str_param_define.appendChild(new_element)
new_element=doc.createElement("description")
new_element.appendChild(doc.createTextNode("数据库类型"))
str_param_define.appendChild(new_element)

# 创建第二个字符串参数:OS_TYPE
param_define=doc.getElementsByTagName("parameterDefinitions")[0]             # 获取第一个parameterDefinitions元素
new_str_param=doc.createElement("hudson.model.StringParameterDefinition")    # 创建元素:hudson.model.StringParameterDefinition
param_define.appendChild(new_str_param)      # 追加元素

str_param_define=doc.getElementsByTagName("hudson.model.StringParameterDefinition")[1]
new_element=doc.createElement("name")
new_element.appendChild(doc.createTextNode("OS_TYPE"))      # 给元素增加文本
str_param_define.appendChild(new_element)
new_element=doc.createElement("description")
new_element.appendChild(doc.createTextNode("操作系统类型"))
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.create_job("test1",xml)                   # 创建Job

confix.xml文件会增加如下内容:

在这里插入图片描述

创建的jenkins项目test1

在这里插入图片描述

三、删除字符串参数的某个属性

例如:删除OS_TYPE的描述

str_param_define=doc.getElementsByTagName("hudson.model.StringParameterDefinition")[1]
element_delete = doc.getElementsByTagName("description").item(0)
str_param_define.removeChild(element_delete)

四、替换字符串参数的某个元素的值

例如:将OS_TYPE替换为STORAGE_TYPE

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

四、增加extendedChoice复选框参数

Jenkins需要安装插件:Extended Choice Parameter

代码

# 创建第一个复选框参数:SKIP_GIT_PRODUCT
param_define=doc.getElementsByTagName("parameterDefinitions")[0]             # 获取第一个parameterDefinitions元素
new_str_param=doc.createElement('com.cwctravel.hudson.plugins.extended__choice__parameter.ExtendedChoiceParameterDefinition')    # 创建元素:hudson.model.StringParameterDefinition
new_str_param.setAttribute("plugin","extended-choice-parameter@346.vd87693c5a_86c")     # 给元素增加属性
param_define.appendChild(new_str_param)      # 追加元素

extend_choice_param_define=doc.getElementsByTagName('com.cwctravel.hudson.plugins.extended__choice__parameter.ExtendedChoiceParameterDefinition')[0]
new_element=doc.createElement("name")		# 参数名字
new_element.appendChild(doc.createTextNode("SKIP_GIT_PRODUCT"))      # 给元素增加文本
extend_choice_param_define.appendChild(new_element)
new_element=doc.createElement("description")	# 参数描述
new_element.appendChild(doc.createTextNode("跳过指定的git工程"))
extend_choice_param_define.appendChild(new_element)
new_element=doc.createElement("visibleItemCount")	# 界面展示选项行数,默认为5
new_element.appendChild(doc.createTextNode("3"))
extend_choice_param_define.appendChild(new_element)
new_element=doc.createElement("type")				# 类型为复选框
new_element.appendChild(doc.createTextNode("PT_CHECKBOX"))
extend_choice_param_define.appendChild(new_element)
new_element=doc.createElement("value")				# 可选值
new_element.appendChild(doc.createTextNode("web,backend,db"))
extend_choice_param_define.appendChild(new_element)
new_element=doc.createElement("defaultValue")		# 默认值
new_element.appendChild(doc.createTextNode("web"))
extend_choice_param_define.appendChild(new_element)
new_element=doc.createElement("multiSelectDelimiter")	# 指定分隔符
new_element.appendChild(doc.createTextNode(","))
extend_choice_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")

config.xml会增加如下内容

在这里插入图片描述

创建的jenkins项目

在这里插入图片描述

参考文章

Python处理XML文件

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐