मैंने मैवेन जॉब टाइप टू फ्रीस्टाइल से लगभग 10000 जेनकिन्स जॉब्स को बदलने के लिए एक स्क्रिप्ट लिखी है। कृपया इसे अंधाधुंध प्रयोग न करें। आप कॉन्फ़िगरेशन विकल्प खो सकते हैं या टूटे हुए जेनकिंस सेटअप में समाप्त हो सकते हैं। पायथन भाग एक कॉन्फ़िगरेशन xml को तर्क के रूप में लेता है और परिवर्तित फ़ाइल के साथ एक ही फ़ाइल को ओवरराइट करता है। फिर
cd /path/to/jenkins/jobs
find * -maxdepth 2 -name config.xml -exec /path/to/maven2freestyle.py {} \;
चेतावनी: मैं निम्न आदेश के साथ जेनकींस फ़ाइल पर इस लाइव भाग गया। यह आपके जेनकींस तोड़ सकता है! कृपया बैकअप रखें!
#!/usr/bin/env python2
import copy
import sys
from lxml import etree
from lxml.etree import fromstring, tostring
from StringIO import StringIO
def parseXML(xmlFile):
print(xmlFile)
f = open(xmlFile)
xml = f.read()
f.close()
e = etree.parse(xmlFile)
root = e.getroot()
if root.tag != 'maven2-moduleset':
#print("WARNING: Skipping non Maven Project")
return
#change project type
root.tag = "project"
if 'plugin' in root.attrib:
del root.attrib["plugin"]
#get maven data
rootModule = root.find('./rootModule')
rootPOM = root.find('./rootPOM')
goals = root.find('./goals')
mavenName = root.find('./mavenName')
mavenOpts = root.find('./mavenOpts')
# merge prebuilders into builders
prebuilders = root.findall("./prebuilders/*")
builders = etree.Element("builders")
root.insert(99, builders)
if len(prebuilders) > 0:
builders.append(copy.deepcopy(prebuilders[0]))
#create maven builder
maven = etree.Element("hudson.tasks.Maven")
if not goals is None:
etree.SubElement(maven, "targets").text = goals.text
if not mavenName is None:
etree.SubElement(maven, "mavenName").text = mavenName.text
if not rootPOM is None:
etree.SubElement(maven, "pom").text = rootPOM.text
if not mavenOpts is None:
etree.SubElement(maven, "javaOpts").text = mavenOpts.text
builders.append(maven)
#cleanup
prebuilder = root.findall("./prebuilders")
if len(prebuilder) > 0:
root.remove(prebuilder[0])
if not rootModule is None:
root.remove(rootModule)
if not rootPOM is None:
root.remove(rootPOM)
if not goals is None:
root.remove(goals)
if not mavenName is None:
root.remove(mavenName)
if not mavenOpts is None:
root.remove(mavenOpts)
e.write(sys.argv[1], xml_declaration=True, pretty_print=True, encoding='utf-8', method="xml")
if __name__ == "__main__":
parseXML(sys.argv[1])
स्रोत
2017-07-14 14:33:02
हालांकि मैं वास्तव में यह कोशिश नहीं करता था, ऐसा प्रतीत होता है कि आपने जिस प्रक्रिया को रेखांकित किया है वह काम करेगा।मैंने आगे बढ़ने का फैसला किया और उन्हें यूआई के माध्यम से किया। मुझे लगा कि यह दृष्टिकोण थोड़ा जोखिम भरा था और मैं सड़क के नीचे सूक्ष्म मुद्दों के साथ समाप्त हो सकता है। जवाब के लिए धन्यवाद। –
और नए "पुराने डेटा प्रबंधित करें" सुविधा के साथ, यह उन चीज़ों को दिखाना चाहिए जो नौकरी प्रकार के परिवर्तन से अप्रचलित थे। – reechard
अच्छी तरह से काम करता है। वांछित तत्व भी जोड़ा और किसी भी यूआई संपादन करने के लिए सहेजने के लिए को हटा दिया। हालांकि, यह नौकरी के लिए निर्माण इतिहास खो देता है। –
OrangeDog