jenkins-job-builder是一个很好的工具,可以帮助我维护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
jenkins,可以在https://ci.jenkins-ci.org中检查infra_backend-merge-all-repo作业。
从您的问题很难确切地知道您在这里寻找什么,但是假设您正在寻找基本结构:
Python在大多数平台上都对XML解析提供了良好的支持。您可能会想使用一些简单易用的东西,例如minidom。有关您的python版本,请参见python文档中的
XML处理模块 。
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解析器。
问题内容: 我在詹金斯(Jenkins)有很多自由式工作,我想转换为多配置工作,这样我就可以在一项工作下跨多个平台进行构建。这些作业指定了很多构建参数,我不想通过创建新的多配置作业来再次手动设置它们。当前,每个作业都将其构建限制为我们一直在构建的平台,而我看到的唯一其他选择是克隆现有作业,并将限制更改为新平台。这不是理想的选择,因为我需要维护2个工作,其中唯一的区别是目标平台。 我没有看到通过UI
我的使用案例: 作业 A 设置为在星期一到星期五的 18:00 运行。 作业 B 依赖于作业 A 是否成功,但应仅在周一至周五的 06:00 运行。(周一早上的跑步将取决于周五晚上的跑步)。我更喜欢设定的时间,而不是工作之间的延迟。 在任何给定的早晨,如果我看到作业A失败(因此作业B从未运行),我希望能够运行(修复)作业A,然后立即触发作业B。 到目前为止,我发现的只是这个用例的一部分。我修改了管
问题内容: 我如何每隔15分钟在Jenkins上执行一次定时任务? 这是我尝试过的: 在詹金斯上,我有一个作业设置为使用以下cron语法每15分钟运行一次: 但是作业将每小时执行一次,而不是每15分钟执行一次。 我收到有关cron语法格式的警告: 这可能是cron作业每小时执行一次而不是15分钟执行一次的原因吗? 问题答案: 您的语法略有错误。说: 表示cron表达式与该字段的所有值匹配。 描述范
问题内容: 我阅读了如何使用Jenkins DSL设置作业超时。设置一项作业的超时时间。我想为所有作业设置它,并且设置略有不同:150%,平均超过10个作业,最多30分钟。 根据相关的job-dsl-plugin文档,我应该使用以下语法: 我在http://job-dsl.herokuapp.com/中进行了测试,这是相关的XML部分: 我使用之前手动编辑过的作业进行了验证,并且XML是正确的。因
问题内容: 为什么Jenkins有两种工作,即多配置项目和自由样式项目?我读过某个地方,一旦选择其中一个,就无法(轻松地)转换为另一个。为什么我不总是选择多配置项目以确保将来的更改安全? 我想为在Windows和Unix(以及其他平台)上构建的项目设置构建。我发现了这个问题),它提出了相同的问题,但我并没有真正找到答案。为什么我需要三个矩阵项目(而不是三个自由样式项目),每个平台一个?为什么不能将
问题内容: 我想将json字符串转换为javascript中的yaml格式。我从过去两天开始尝试在Google上找到任何解决方案或库。有适用于Java的答案,但不适用于javascript。 假设我有这样的json字符串: 转换为yaml: 有一个在线转换器http://www.json2yaml.com/,但是如何在javascript中转换成它。 问题答案: YAML是JSON的超集。由于任何