Jenkins工作从数据库中获取数据并在jenkins

时间:2016-05-25 07:47:14

标签: python html database jenkins report

更上一层楼 - 使用Jenkins(通过创建Job)是否可以从数据库中获取数据并在该作业中显示提取的数据或作为该作业的工件附加?

考虑的一个选择 - 创建一个具有构建步骤的作业,即执行Python脚本'。此脚本连接到数据库并获取数据。

c = sqlite3.connect('db_path.db')
cur = c.cursor()
cur.execute("SELECT column_name from table_name LIMIT 11")
test = cur.fetchall()

使用模板或类似的东西以html格式转储结果

<table>
  {% for row in test %}
  <tr>
    <th> {{ row[0] }}</th>
  </tr> 
  {% endfor %}
</table>

但问题是,如何在Jenkins作业中显示此html文件或附加为工件,考虑到此作业将多次用于各种作业。 我可以使用HTML Publisher插件,但限制是在我的情况下html名称不能是静态的。而且我不认为这会对我的情况有效,而且我不知道如何将html链接到python fetchall()。

任何人都可以帮助我。还有其他/更好的选择来执行此活动吗?

问题1:如何建立从fetchAll()到html页面的连接?

问题2:我在HTML Publisher Plugin中看到index.html是用于发布的html页面。此页面是标准模板吗?或者每当我运行不同配置的作业时,此页面会有所不同吗?

我不知道怎么做! :(

1 个答案:

答案 0 :(得分:0)

您可以将每次运行的html报告归档,即使它同时运行也是如此。如果作业是动态的,您还可以为作业添加说明,以便使用Description plugin对每个运行都有意义。在作业配置中,您可以定义要保留的实例数量,工件数量等等。

一般来说,你的过程听起来不错,你想做什么,限制在哪里?

要在Python中将数据填充到HTML中,您可以使用Mako.Templates

快速举例:

from mako.template import Template
from mako.lookup import TemplateLookup
from mako.runtime import Context



def fill_template(template, data):
  lookup = TemplateLookup(directories=["templates"])
  mytemplate = Template(filename=template, lookup=lookup)
  buf = io.StringIO()
  ctx = Context(buf, data=data)
  mytemplate.render_context(ctx)
  htm = buf.getvalue()
  print(htm)

  file = open("Report/index.html", "wb")
  file.write(bytes(htm.encode('utf-8')))
  file.close()
  return 0

fdata = {'test':data}
fill_template("templates/digest.html", fdata)

模板文件:

<table style="border-bottom:solid black 1pt; cellspacing:5%">
    % for test in sorted(data['test']):
    <tr>
     .... Do something with test data (depends on how you store it) ...
    </tr>
    % endfor
</table>