Jenkins: Batch Job type Maven will automatically migrate to the free-style type

Why migrate?

Jenkins recently conducted exercises 1.X to 2.X upgrade from the
only running the latest version Jenkins2 in JDK8 or JDK11 version, JDK version I used was JDK8
when building Maven Job, JDK version Job configured for JDK7, building an error

$ /usr/local/java/bin/java -cp /data/jenkins/maven31-agent.jar:/usr/local/maven/boot/plexus-classworlds-2.5.2.jar:/usr/local/maven/conf/logging jenkins.maven3.agent.Maven31Main /usr/local/maven /data/jenkins/slave.jar /data/jenkins/maven31-interceptor.jar /data/jenkins/maven3-interceptor-commons.jar 45631Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at org.codehaus.plexus.classworlds.realm.Cla***ealm.loadClassFromSelf(Cla***ealm.java:401)
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
        at org.codehaus.plexus.classworlds.realm.Cla***ealm.unsynchronizedLoadClass(Cla***ealm.java:271)
        at org.codehaus.plexus.classworlds.realm.Cla***ealm.loadClass(Cla***ealm.java:247)
        at org.codehaus.plexus.classworlds.realm.Cla***ealm.loadClass(Cla***ealm.java:239)
        at jenkins.maven3.agent.Maven31Main.main(Maven31Main.java:138)
        at jenkins.maven3.agent.Maven31Main.main(Maven31Main.java:67)

Positioned, and the original version of the JDK Maven Job type have some compatibility, partially follows:

Maven jobs and Java versions compatibility : Because java serialized classes are exchanged between Jenkins master and Maven Jobs it is required that the JVM used to launch Maven is superior or equal to the version of Java for which Jenkins Master is built for.

  • Jenkins >= 1.520 requires Java 6 thus Maven jobs must be launched with Java >= 6.

  • Jenkins >= 1.612 requires Java 7 thus Maven jobs must be launched with Java >= 7.

  • Jenkins >= 2.54 requires Java 8 thus Maven jobs must be launched with Java >= 8.

See: https://wiki.jenkins.io/display/JENKINS/Maven+Project+Plugin

And those of us who use the Job must specify the JDK version to build and can not modify the JDK version
and free-style type of Job, this question does not appear
so, plan to migrate Job type Maven to free-style type

How to migrate?

So how do you migrate it? Zhengzhou Men's Hospital: www.sgnk029.com

Statistics under the Maven type of Job, there are hundreds, manual migration unrealistic
by google found previous written grovvy script: https://github.com/akomakom/jenkins-scripts/blob/master/maven-to -freestyle.groovy
try to run the script, may be related to the environment, it will complain
because of the less familiar groovy, solve them too much trouble
so refer to its logic, using python script to enable the migration function

python script as shown below, there is a need can modify: Zhengzhou Which male look good: http: //www.zzchanghong110.com/

# -*- coding:utf-8 -*-import xml.etree.ElementTree as ETimport sysfrom jenkinsapi.jenkins import Jenkins

reload(sys)
sys.setdefaultencoding('utf8')def get_jenkins_server():
    JENKINS_URL = "http://127.0.0.1:8080/"
    JENKINS_USERNAME = "jenkins"
    JENKINS_PASSWORD = "jenkins"
    return Jenkins(JENKINS_URL, username=JENKINS_USERNAME, password=JENKINS_PASSWORD, timeout=30)def get_modified_xml(job_config_xml_tree):
    # create builders node
    builders_element = ET.Element("builders")
    job_config_xml_tree.append(builders_element)    # Move prebuilders to builders
    prebuilders_node = job_config_xml_tree.find("prebuilders")    if prebuilders_node is not None and prebuilders_node.getchildren() is not None:        for pre_builder in prebuilders_node.getchildren():
            builders_element.append(pre_builder)
    job_config_xml_tree.remove(prebuilders_node)    # Create a maven block
    maven_node = ET.Element("hudson.tasks.Maven")
    builders_element.append(maven_node)
    move(job_config_xml_tree.find("goals"), job_config_xml_tree, maven_node, "targets")
    maven_name_node = job_config_xml_tree.find("mavenName")    if maven_name_node:
        move(maven_name_node, job_config_xml_tree, maven_node)    else:
        maven_name_node = ET.Element("mavenName")
        maven_name_node.text = "Maven"
        maven_node.append(maven_name_node)
    move(job_config_xml_tree.find("rootPOM"), job_config_xml_tree, maven_node)
    move(job_config_xml_tree.find("mavenOpts"), job_config_xml_tree, maven_node)
    move(job_config_xml_tree.find("settings"), job_config_xml_tree, maven_node)
    move(job_config_xml_tree.find("globalSettings"), job_config_xml_tree, maven_node)    # items that don't exist in maven step:
    remove(job_config_xml_tree, [        'resolveDependencies',        'processPlugins',        'siteArchivingDisabled',        'archivingDisabled',        'mavenValidationLevel',        'disableTriggerDownstreamProjects',        'blockTriggerWhenBuilding',        'fingerprintingDisabled',        'incrementalBuild',        'processPlugins',        'siteArchivingDisabled',        'ignoreUpstremChanges',        'rootModule'
    ])    # Move postbuilders to builders
    postbuilders_node = job_config_xml_tree.find("postbuilders")    if postbuilders_node is not None and postbuilders_node.getchildren() is not None:        for post_builder in postbuilders_node.getchildren():
            builders_element.append(post_builder)
    job_config_xml_tree.remove(postbuilders_node)    # rename top-level element
    # new parent node
    new_job_config_xml_tree = ET.Element("project")    for child_node in job_config_xml_tree.getchildren():
        new_job_config_xml_tree.append(child_node)    return new_job_config_xml_treedef move(from_node, from_parent_node, to_node, to_name=None):
    if from_node is not None:        if to_name:
            tmp_element_node = ET.Element(to_name)
            tmp_element_node.text = from_node.text
            tmp_element_node.attrib = from_node.attrib
            to_node.append(tmp_element_node)
            from_parent_node.remove(from_node)        else:
            to_node.append(from_node)
            from_parent_node.remove(from_node)def remove(from_node, name_list):
    for name in name_list:
        tmp_node = from_node.find(name)        if tmp_node is not None:
            from_node.remove(tmp_node)def main():
    jenkins_server = get_jenkins_server()

    job_list = jenkins_server.get_jobs_list()    for job_name in job_list:        if not job_name.endswith("-DEPRECATED"):
            job_obj = jenkins_server.get_job(job_name)
            config_text = job_obj.get_config()
            config_xml_tree = ET.fromstring(config_text)            if config_xml_tree.tag == "maven2-moduleset":
                new_config_xml_tree = get_modified_xml(config_xml_tree)
                new_config_xml = ET.tostring(new_config_xml_tree)
                jenkins_server.rename_job(job_name, job_name + "-DEPRECATED")
                jenkins_server.create_job(job_name, new_config_xml)
                print("migrate job from Maven Type to FreeStyle Type: " + job_name)if __name__ == "__main__":
    main()

焦作国医堂医院:http://jz.lieju.com/zhuankeyiyuan/36668545.htm


Guess you like

Origin blog.51cto.com/14510269/2449071