如何在python中将jenkins作业配置config.xml转换为YAML格式以用于jenkins-job-builder? [英] How to convert jenkins job configuration config.xml to YAML format in python to be used jenkins-job-builder?

查看:402
本文介绍了如何在python中将jenkins作业配置config.xml转换为YAML格式以用于jenkins-job-builder?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

jenkins-job-builder 是一个很好的工具,可以帮助我维持工作在YAML文件中.参见配置章节中的示例.

jenkins-job-builder is a nice tool to help me to maintain jobs in YAML files. see example in configuration chapter.

现在我有很多旧的jenkins作业,拥有python脚本xml2yaml将现有的jenkins作业config.xml转换为YAML文件格式会很好.

Now I had lots of old jenkins jobs, it will be nice to have a python script xml2yaml to convert the existing jenkins job config.xml to YAML file format.

您对使用python快速解决方案有任何建议吗?

Do you any suggestions to had a quick solution in python ?

我不需要直接在jenkins-job-builder中使用它,只需将其转换为YAML以供参考.

I don't need it to be used in jenkins-job-builder directly, just can be converted it into YAML for reference.

对于转换,某些部分可以忽略,例如名称空间.

For the convert, some part can be ignored like namespace.

config.xml段如下:

<project>
  <logRotator class="hudson.tasks.LogRotator">
    <daysToKeep>-1</daysToKeep>
    <numToKeep>20</numToKeep>
    <artifactDaysToKeep>-1</artifactDaysToKeep>
    <artifactNumToKeep>-1</artifactNumToKeep>
  </logRotator>
  ...
</project>

yaml输出可能是:

- project:
   logrotate:
     daysToKeep: -1
     numToKeep: 20
     artifactDaysToKeep: -1
     artifactNumToKeep: -1

如果您不熟悉jenkins中的config.xml,则可以检查 .jenkins-ci.org

If you are not familiar with config.xml in jenkins, you can check infra_backend-merge-all-repo job in https://ci.jenkins-ci.org

推荐答案

很难从您的问题中确切地知道您在这里寻找什么,但是假设您正在寻找基本结构:

It's hard to tell from your question exactly what you're looking for here, but assuming you're looking for the basic structure:

Python在大多数平台上都对XML解析提供了良好的支持.您可能会想使用一些简单易用的东西,例如minidom.有关您的python版本,请参阅python文档中的 XML处理模块.

Python has good support on most platforms for XML Parsing. Chances are you'll want to use something simple and easy to use like minidom. See the XML Processing Modules in the python docs for your version of python.

打开文件后,先查找project,然后从那里解析,然后使用简单的映射就可以了,因为yaml格式很简单.

Once you've opened the file, looking for project and then parsing down from there and using a simple mapping should work pretty well given the simplicity of the yaml format.

from xml.dom.minidom import parse

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)

def getTextForTag(nodelist,tag):
    elements = nodelist.getElementsByTagName(tag)
    if (elements.length>0):
        return getText( elements[0].childNodes)
    return ''

def printValueForTag(parent, indent, tag, valueName=''):
    value = getTextForTag( parent,tag)
    if (len(value)>0):
        if (valueName==''):
            valueName = tag
        print indent + valueName+": "+value

def emitLogRotate(indent, rotator):
    print indent+"logrotate:"
    indent+='  '
    printValueForTag( rotator,indent, 'daysToKeep')
    printValueForTag( rotator,indent, 'numToKeep')  
def emitProject(project):
    print "- project:"
    # all projects have log rotators, so no need to chec
    emitLogRotate("   ",project.getElementsByTagName('logRotator')[0])
    # next section...

dom = parse('config.xml')
emitProject(dom)

此代码段将仅打印最终配置文件的几行,但它为您提供了使用简单翻译器的正确方向.根据我所看到的,由于命名差异,自动翻译方案没有太多空间.您可以在迭代过程中简化代码以获取更多选项并进行表驱动,但这只是编程问题",这至少会使您开始使用python中的DOM解析器.

This snippet will print just a few lines of the eventual configuration file, but it puts you in the right direction for a simple translator. Based on what I've seen, there's not much room for an automatic translation scheme due to naming differences. You could streamline the code as you iterate for more options and to be table driven, but that's "just a matter of programming", this will at least get you started with the DOM parsers in python.

这篇关于如何在python中将jenkins作业配置config.xml转换为YAML格式以用于jenkins-job-builder?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆