Можно ли преобразовать работу в свободном стиле Jenkins в работу с несколькими конфигурациями? - PullRequest
23 голосов
/ 03 октября 2011

У меня в Дженкинсе довольно много заданий свободного стиля, которые я хотел бы преобразовать в задания с несколькими конфигурациями, чтобы я мог создавать несколько платформ за одно задание.Эти задания задают довольно много параметров сборки, и я бы не хотел настраивать их вручную, создавая новые многоконфигурационные задания.Каждое задание в настоящее время ограничивает свои сборки платформой, на которой мы строили, и единственный другой вариант, который я вижу, - это клонировать существующее задание и изменить ограничение на новую платформу.Это не идеально, так как мне нужно сохранить 2 задания, единственное отличие которых заключается в целевой платформе.

Я не вижу способа сделать это через пользовательский интерфейс, но мне интересно, есть ли другой способ.

Ответы [ 3 ]

23 голосов
/ 03 октября 2011

Насколько я знаю, нет способа конвертировать тип задания в пользовательском интерфейсе. Вам нужно будет либо отредактировать config.xml задания, либо скопировать и отредактировать файл конфигурации и создать новое задание на основе отредактированной конфигурации.

Вам придется проверить разницу между свободным стилем и многоконфигурационная работа с различными настройками, которые вы используете. Это может быть как просто, как изменение элемента верхнего уровня в config.xml с project на matrix-project.

Если вы редактируете существующую конфигурацию задания, вам нужно будет либо сделать это, пока Jenkins находится в автономном режиме или попросите Jenkins перезагрузить конфигурацию через Manage Jenkins -> Перезагрузить конфигурацию с диска .

Если вы решили создать новые рабочие места, этот предыдущий вопрос может быть полезен один раз Вы выясняете, какие изменения должны быть сделаны. В частности этот ответ описывает, как загрузить файл конфигурации для создания новой работы.

4 голосов
/ 20 августа 2013

Просто примечание для тех, кто хотел бы перейти с работы на Maven.

  1. Изменить maven2-moduleset тег на project.
  2. Удалить теги: rootModule, goals, mavenValidationLevel (должно быть близко друг к другу).
  3. Слияние prebuilders и postbuilders в builders.
2 голосов
/ 14 июля 2017

Я только что написал скрипт для преобразования около 10000 заданий Дженкинса из Maven Job Type во фристайл. Пожалуйста, не используйте это вслепую. Вы можете потерять параметры конфигурации или оказаться в неправильной конфигурации Jenkins. Часть Python принимает config xml в качестве аргумента и перезаписывает тот же файл преобразованными данными. Я запустил это в прямом эфире в файловой системе Jenkins с помощью следующей команды:

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...