問題描述
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
,可以查看infra_backend-merge-all-repo 作業">https://ci.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 文檔中的 XML 處理模塊,了解您的 Python 版本.
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?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!