詹金斯-职业建设者是一个很好的工具,可以帮助我维护YAML文件中的作业。参见配置章节中的示例。
现在我有了很多旧的jenkins作业,最好有一个python脚本xml2yaml将现有的jenkins作业config.xml转换成YAML文件格式。
您对在python中找到一个快速解决方案有什么建议吗?
我不需要它直接在jenkins-job-builder中使用,只是可以将其转换为YAML以供参考。
对于转换,某些部分可以被忽略,比如命名空间。
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如果您不熟悉詹金斯的config.xml,可以在https://ci.jenkins-ci.org中检查后端-合并所有回购作业
发布于 2014-01-26 12:18:59
从您的问题中很难确切地知道您在这里寻找的是什么,但假设您正在寻找基本结构:
Python在大多数平台上都有很好的XML解析支持。很可能你想使用一些简单易用的东西,比如minidom。请参阅python中的XML处理模块,以了解您的python版本。
打开文件后,查找project,然后从那里解析并使用简单的映射,考虑到yaml格式的简单性,应该可以很好地工作。
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解析器。
发布于 2015-08-26 23:05:37
我正在编写一个程序来完成从XML到YAML的转换。它可以动态地查询Jenkins服务器并将所有作业转换为YAML。
https://github.com/ktdreyer/jenkins-job-wrecker
现在它适用于非常简单的工作。我已经采取了一种安全/悲观的方法,如果程序遇到还无法转换的XML,程序就会退出。
发布于 2016-04-27 09:30:23
我建议在命令行和shell脚本中使用xpath表达式查询和访问xpath。对XML的低级编程访问没有问题。XMLStarlet是命令行上的XPath瑞士军刀.
"xmlstarlet el“将整个XML的元素结构显示为XPath表达式。
"xmlstarlet sel -t -c XPath-expression“将精确提取您想要的内容。
也许你想花一个小时(或两个)来提前更新你的XPath诀窍。
一旦您认识到在使用XMLStarlet之前您在编程XMLStarlet上花费了多少时间,您就会流下几滴眼泪。
https://stackoverflow.com/questions/21351996
复制相似问题