Jenkinsには、1つのジョブで複数のプラットフォームにまたがって構築できるように、マルチ構成ジョブに変換したいフリースタイルのジョブがかなりあります。これらのジョブはかなりの数のビルドパラメーターを指定しているので、新しいマルチ構成ジョブを作成して手動で再設定する必要はありません。各ジョブは現在、ビルドを構築しているプラットフォームに制限しています。他に表示される唯一のオプションは、既存のジョブのクローンを作成し、制限を新しいプラットフォームに変更することです。唯一の違いがターゲットプラットフォームである2つのジョブを維持する必要があるため、これは理想的ではありません。
UIを介してこれを行う方法はわかりませんが、別の方法があるかどうか疑問に思っています。
私の知る限り、UIでジョブの種類を変換する方法はありません。ジョブのconfig.xmlを編集するか、構成ファイルをコピーして編集し、編集した構成に基づいて新しいジョブを作成する必要があります。
使用するさまざまな設定を使用して、フリースタイルジョブとマルチ構成ジョブの違いを確認する必要があります。 config.xmlの最上位要素をproject
からmatrix-project
に変更するのと同じくらい簡単かもしれません。
既存のジョブ構成を編集する場合は、Jenkinsがオフラインのときに編集するか、Manage Jenkins-を介して構成を再ロードするようにJenkinsに指示する必要があります。 >ディスクから構成をリロードします。
新しいジョブを作成することにした場合、 この前の質問 は、どのような編集を行う必要があるかを理解したら役立つかもしれません。具体的には この回答 は、構成ファイルをアップロードして新しいジョブを作成する方法を説明しています。
Mavenからフリースタイルの仕事に切り替えたい人のためのメモ。
maven2-moduleset
タグをproject
に。rootModule
、goals
、mavenValidationLevel
(互いに近くにある必要があります)。prebuilders
とpostbuilders
をbuilders
にマージします。約10000のJenkinsジョブをMavenジョブタイプからフリースタイルに変換するスクリプトを作成しました。やみくもに使用しないでください。構成オプションを失ったり、Jenkinsのセットアップが壊れたりする可能性があります。 Python Partは、引数として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])