2

我被分配了一项与 Ruby 相关的任务,但由于我是新手,所以我正在互联网上搜索合适的解决方案来解决它:

  1. 我在网页中有一个日志文件报告列表,实际上分为通过或失败。
  2. 我需要获取日志文件并将它们转换为与 Jenkins Junit XML 文件格式兼容的格式。
  3. 一切,从日志到 XML 的通道都必须用 Ruby 编写。

有任何想法吗?!

我查看了整个互联网并找到了信息,但仍然没有明确的想法如何解决这个问题。

是否有任何 Ruby 库可以使这更容易?有没有人处理过这样的事情?

4

2 回答 2

1

你没有显示你需要的格式,我也不知道 Jenkins 需要什么,但是创建 XML 很容易。不幸的是,您想要的将是一本书或几篇文章,这超出了 Stack Overflow 的范围。虽然基本上...

您可以使用模板系统,例如ERB,您可以在其中为整个 XML 文档创建模板,或者Nokogiri::Builder可用于生成 XML,或者您可以使用老式的方法并使用简单的字符串插值来创建 XML。

系统日志文件通常结构良好,至少对于前几个字段,然后是作为各种命令输出的自由格式文本。来自 Apache 的日志文件与此类似,包含文本列,后跟一些自由格式但易于解析的文本。这里和那里都有宝石,还有关于如何解析日志的教程,所以到处搜索,你会发现一些东西。这个想法是您希望将读取的每一行分解为可以分配给 XML 节点的文本。

一旦你有了你的字段,你可以将它们替换到模板中,或者让 Ruby 将变量插入到字符串中,或​​者使用 Builder 在标签之间添加文本。

这并不难,但需要完成几个小任务。

使用字符串插值,如果你想要 XML 像:

<xml>
  <tag1>
    <tag2>some text</tag2>
    <tag2>some more text</tag2>
  </tag1>
</xml>

您可以像这样创建它:

var1 = "some text"
var2 = "some more text"
xml = %Q{
<xml>
  <tag1>
    <tag2>#{var1}</tag2>
    <tag2>#{var2}</tag2>
  </tag1>
</xml>
}
puts xml

同样,如果你想使用 ERB:

require 'erb'

var1 = "some text"
var2 = "some more text"

template = ERB.new <<-EOF
<xml>
  <tag1>
    <tag2><%= var1 %></tag2>
    <tag2><%= var2 %></tag2>
  </tag1>
</xml>
EOF
puts template.result(binding)

哪个输出:

<xml>
  <tag1>
    <tag2>some text</tag2>
    <tag2>some more text</tag2>
  </tag1>
</xml>

或者,使用 Nokogiri::Builder:

require 'nokogiri'

var1 = "some text"
var2 = "some more text"
builder = Nokogiri::XML::Builder.new do |node|
  node.xml {
    node.tag1 {
      [var1, var2].each do |t|
        node.tag2(t)
      end
    }
  }
end
puts builder.to_xml

哪个输出:

<?xml version="1.0"?>
<xml>
  <tag1>
    <tag2>some text</tag2>
    <tag2>some more text</tag2>
  </tag1>
</xml>
于 2012-12-13T15:26:24.000 回答
1

在此链接下有一个小解释可能会有所帮助 https://pzolee.blogs.balabit.com/2012/11/jenkins-vs-junit-xml-format/

基本上,您只需使用https://wiki.jenkins-ci.org/display/JENKINS/xUnit+Plugin 来导入遵循 Junit 模式的 XML。您可以将 XML 转换为具有该方案的 Junit 格式。可以在以下位置找到对 Junit 格式的一个很好的描述:llg.cubic.org/docs/junit/

于 2016-01-26T15:38:07.570 回答