23

Jenkinsには、1つのジョブで複数のプラットフォームにまたがって構築できるように、マルチ構成ジョブに変換したいフリースタイルのジョブがかなりあります。これらのジョブはかなりの数のビルドパラメーターを指定します。新しいマルチ構成ジョブを作成して、手動で再度セットアップする必要はありません。各ジョブは現在、ビルドを構築しているプラ​​ットフォームに制限しています。他に表示されるオプションは、既存のジョブのクローンを作成し、制限を新しいプラットフォームに変更することだけです。唯一の違いがターゲットプラットフォームである2つのジョブを維持する必要があるため、これは理想的ではありません。

UIを介してこれを行う方法はわかりませんが、別の方法があるかどうか疑問に思っています。

4

3 に答える 3

24

私の知る限り、UIでジョブの種類を変換する方法はありません。ジョブのconfig.xmlを編集するか、構成ファイルをコピーして編集し、編集した構成に基づいて新しいジョブを作成する必要があります。

使用するさまざまな設定を使用して、フリースタイルジョブとマルチ構成ジョブの違いを確認する必要があります。config.xmlの最上位要素をからprojectに変更するのと同じくらい簡単かもしれませんmatrix-project

既存のジョブ構成を編集する場合は、Jenkinsがオフラインのときに編集するか、[Jenkinsの管理] -> [ディスクから構成を再ロード]を使用して構成を再ロードするようにJenkinsに指示する必要があります。

新しいジョブを作成することにした場合、どのような編集を行う必要があるかを理解したら、この前の質問が役立つ場合があります。具体的には、この回答では、構成ファイルをアップロードして新しいジョブを作成する方法について説明します。

于 2011-10-03T19:51:26.553 に答える
4

Mavenからフリースタイルの仕事に切り替えたい人のためのメモ。

  1. maven2-modulesetタグをに変更しprojectます。
  2. タグを削除します:、、rootModule(互いに近くにある必要があります)goalsmavenValidationLevel
  3. にマージprebuilderspostbuildersますbuilders
于 2013-08-20T09:53:24.870 に答える
3

約10000のJenkinsジョブをMavenジョブタイプからフリースタイルに変換するスクリプトを作成しました。やみくもに使用しないでください。構成オプションを失ったり、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])
于 2017-07-14T14:33:02.077 に答える