首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以将Jenkins自由风格的作业转换为多配置作业吗?

可以将Jenkins自由风格的作业转换为多配置作业吗?
EN

Stack Overflow用户
提问于 2011-10-03 22:22:16
回答 3查看 21.7K关注 0票数 23

我在Jenkins中有相当多的自由式工作,我想将它们转换为多配置工作,这样我就可以在一个工作下构建跨多个平台的工作。这些作业指定了相当多的构建参数,我不希望通过创建新的多配置作业来再次手动设置它们。每个作业目前都将其构建限制在我们一直在构建的平台上,我看到的唯一其他选择是克隆现有作业,并将限制更改为新平台。这并不理想,因为我需要维护2个作业,唯一的区别是目标平台。

我看不到通过UI来实现这一点的方法,但我想知道是否有其他方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-04 03:51:27

据我所知,没有办法在UI中转换作业类型。您必须编辑作业的config.xml,或者复制并编辑配置文件,然后基于编辑的配置创建一个新作业。

您必须使用您使用的各种设置来检查自由样式和多配置作业之间的差异。这可能和将config.xml中的顶级元素从project更改为matrix-project一样简单。

如果您编辑现有作业配置,则需要在Jenkins离线时执行此操作,或者告诉Jenkins通过Manage Jenkins -> 从Disk重新加载配置。

如果您决定创建新作业,一旦您确定需要进行哪些编辑,this previous question可能会很有帮助。具体地说,this answer描述了如何上传配置文件来创建新作业。

票数 24
EN

Stack Overflow用户

发布于 2013-08-20 17:53:25

对于那些希望从maven切换到freestyle工作的人来说,这只是一个注释。

  1. maven2-moduleset标签更改为project.
  2. Remove标签:rootModulegoalsmavenValidationLevel (应相互靠近)。
  3. prebuilderspostbuilders合并到code中
票数 4
EN

Stack Overflow用户

发布于 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!请保留备份!

代码语言:javascript
运行
复制
#!/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])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7636312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档