build jenkins hudson multi-configuration

build - ¿Es posible convertir un trabajo libre de Jenkins a un trabajo de configuración múltiple?



hudson multi-configuration (3)

Acabo de escribir un guión para convertir unos 10000 trabajos de Jenkins de Maven Job Type a Freestyle. Por favor no lo uses a ciegas. Puede perder las opciones de configuración o terminar en una configuración de Jenkins rota. Python Part toma un config xml como argumento y sobrescribe el mismo archivo con los datos convertidos. Ejecuté este en vivo en el sistema de archivos Jenkins con el siguiente comando:

cd /path/to/jenkins/jobs

find * -maxdepth 2 -name config.xml -exec /path/to/maven2freestyle.py {} /;

ADVERTENCIA otra vez. ¡Esto podría romper tu Jenkins! Por favor, mantenga una copia de seguridad!

#!/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])

Tengo bastantes trabajos libres en Jenkins que me gustaría convertir a trabajos de configuración múltiple para que pueda construir en múltiples plataformas en un solo trabajo. Estos trabajos especifican bastantes parámetros de compilación y me gustaría no tener que configurarlos manualmente de nuevo creando nuevos trabajos de configuración múltiple. Cada trabajo actualmente está limitando sus construcciones a la plataforma en la que hemos estado desarrollando y la única otra opción que veo es clonar el trabajo existente y cambiar la restricción a la nueva plataforma. Esto no es ideal ya que necesitaré mantener 2 trabajos donde la única diferencia es la plataforma de destino.

No veo una manera de hacer esto a través de la interfaz de usuario, pero me pregunto si hay otra manera.


Hasta donde yo sé, no hay forma de convertir el tipo de trabajo en la IU. Deberá editar el config.xml del trabajo o copiar y editar el archivo de configuración y crear un nuevo trabajo en función de la configuración editada.

Deberá verificar las diferencias entre un trabajo de estilo libre y de configuración múltiple con las diversas configuraciones que usa. Puede ser tan simple como cambiar el elemento de nivel superior en config.xml de project a matrix-project .

Si edita la configuración de trabajo existente, tendrá que hacerlo mientras Jenkins está desconectado, o decirle a Jenkins que vuelva a cargar su configuración a través de Administrar Jenkins -> Volver a cargar la configuración desde el disco .

Si decides crear nuevos trabajos, esta pregunta previa podría ser útil una vez que averigües qué ediciones se deben realizar. Específicamente, esta respuesta describe cómo cargar un archivo de configuración para crear un nuevo trabajo.


Solo una nota para aquellos que deseen cambiar de maven a trabajo de estilo libre.

  1. Cambie la etiqueta maven2-moduleset al project .
  2. Eliminar etiquetas: rootModule , goals , mavenValidationLevel (deben estar cerca el uno del otro).
  3. Fusiona a los prebuilders y postbuilders en builders .