我在Jenkins中有相当多的自由式工作,我想将它们转换为多配置工作,这样我就可以在一个工作下构建跨多个平台的工作。这些作业指定了相当多的构建参数,我不希望通过创建新的多配置作业来再次手动设置它们。每个作业目前都将其构建限制在我们一直在构建的平台上,我看到的唯一其他选择是克隆现有作业,并将限制更改为新平台。这并不理想,因为我需要维护2个作业,唯一的区别是目标平台。
我看不到通过UI来实现这一点的方法,但我想知道是否有其他方法。
发布于 2011-10-04 03:51:27
据我所知,没有办法在UI中转换作业类型。您必须编辑作业的config.xml,或者复制并编辑配置文件,然后基于编辑的配置创建一个新作业。
您必须使用您使用的各种设置来检查自由样式和多配置作业之间的差异。这可能和将config.xml中的顶级元素从project更改为matrix-project一样简单。
如果您编辑现有作业配置,则需要在Jenkins离线时执行此操作,或者告诉Jenkins通过Manage Jenkins -> 从Disk重新加载配置。
如果您决定创建新作业,一旦您确定需要进行哪些编辑,this previous question可能会很有帮助。具体地说,this answer描述了如何上传配置文件来创建新作业。
发布于 2013-08-20 17:53:25
对于那些希望从maven切换到freestyle工作的人来说,这只是一个注释。
maven2-moduleset标签更改为project.rootModule、goals、mavenValidationLevel (应相互靠近)。prebuilders和postbuilders合并到code中发布于 2017-07-14 22:33:02
我刚刚写了一个脚本,将大约10000个Jenkins Job从Maven Job Type转换为Freestyle。请不要盲目使用。您可能会丢失配置选项或最终导致Jenkins设置中断。Python部分接受配置xml作为参数,并用转换后的数据覆盖相同的文件。我使用以下命令在Jenkins文件系统上实时运行:
cd /path/to/jenkins/jobs
find * -maxdepth 2 -name config.xml -exec /path/to/maven2freestyle.py {} \;
再次警告。这可能会毁了你的Jenkins!请保留备份!
#!/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])https://stackoverflow.com/questions/7636312
复制相似问题