2016-05-25 7 views
0

Auf einer höheren Ebene - Mithilfe von Jenkins (durch Erstellen eines Jobs) können Daten aus der Datenbank abgerufen und extrahierte Daten in diesem Job angezeigt oder als Artefakt für diesen Job angehängt werden ?Jenkins-Job zum Abrufen von Daten aus der Datenbank und Anzeigen in jenkins

Eine Option, die in Betracht gezogen wurde - Erstellen Sie einen Job mit dem Build-Schritt "Ausführung von Python-Skript". Dieses Skript verbindet sich mit der Datenbank und ruft Daten ab.

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

Und die Ergebnisse im HTML-Format Dump eine Vorlage oder etwas wie das hier ist

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

Aber die Frage mit, wie kann ich diese HTML-Datei in Jenkins Job oder anhängen als Artefakt angezeigt werden, wenn man bedenkt Dieser Job wird mehrmals für verschiedene Jobs verwendet. Ich könnte HTML Publisher Plugin verwenden, aber die Einschränkung ist, dass in meinem Fall der HTML-Name nicht statisch sein kann. Und ich denke nicht, dass dies in meinem Fall funktioniert und ich weiß nicht, wie man html mit python fetchall() verbindet.

Kann mir bitte jemand dabei helfen. Gibt es eine andere/bessere Option, um diese Aktivität durchzuführen?

Frage 1: Wie kann ich eine Verbindung von fetchAll() zur HTML-Seite herstellen?

Frage 2: Ich sah in HTML Publisher Plugin, dass index.html ist die HTML-Seite zum Veröffentlichen verwendet. Wird diese Seite eine Standardvorlage sein? Oder wird diese Seite bei jedem Job mit unterschiedlichen Konfigurationen anders aussehen?

Ich weiß nicht, wie es geht !!! :(

Antwort

0

Sie können den HTML-Bericht für jeden Lauf archivieren, auch wenn er gleichzeitig ausgeführt wird.Wenn der Job dynamisch ist, können Sie auch eine Beschreibung für den Job hinzufügen, so dass jeder Durchlauf für Sie sinnvoll ist, wenn Sie Description plugin verwenden Konfiguration können Sie festlegen, wie viele Instanzen, die Sie behalten möchten, wie viele mit Artefakten usw.

Im allgemeinen Ihren Prozess klingt ok für das, was Sie tun wollen, wo die Begrenzung ist?

Daten zu füllen in HTML in Python können Sie Mako.Templates verwenden

Quick Beispiel:

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) 

Template-Datei:

<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> 
+0

meinen Beitrag mit Fragen Edited –

+0

Mine mit einer möglichen Antwort herausgegeben. – Dvir669

+0

das ist informativ @ Dvir669, danke dafür. Aber wenn ich unter ** Vorlage ** Inhalt in _digest.html_ und _index.html_hereverdauen.html habe, wie kann ich mehrere HTML-Dateien erstellen (ein HTML für eine Runde der Ausführung) unter Berücksichtigung, dass ich historische Daten in Jenkins angezeigt (verknüpft zu früheren Auftragsdurchführungen). Sorry, noch unklar :(für mich –