11

Ich benutze Hudson um kontinuierlich ein Python Projekt zu bauen. Unit-Tests und Code-Coverage-Arbeit groß, aber diese Meldung erscheint, wenn in den Bericht Cobertura Coverage Bohren für meine Dateien, die nicht Unit-Tests:Hudson "Quellcode ist nicht verfügbar."

Source code is unavailable.Some possible reasons are: 

* This is not the most recent build (to save on disk space, this plugin only keeps the most recent builds source code). 
* Cobertura found the source code but did not provide enough information to locate the source code. 
* Cobertura could not find the source code, so this plugin has no hope of finding it. 

Das Merkwürdige ist, dass der Quellcode für die Einheit Tests werden gefunden und angezeigt. Ich habe versucht, die Quelldateien für andere .py-Dateien manuell in ~/.hudson/jobs/<projectname>/cobertura zu kopieren (wo die Komponententests kopiert werden), aber es hat nicht funktioniert.

Irgendwelche Vorschläge?

Antwort

6

Dies ist ein höllisch hässlicher Hack, aber es ist das Einzige, was ich mir einfallen lassen könnte, um es endlich zum Laufen zu bringen ... und nach stundenlangem Googlen und Hacken, um Ergebnisse zu erzielen, ist das das Einzige Ich hatte die Idee dass.

coverage run manage.py test 
coverage xml 
sed 's/filename="/filename="my\/path\//g' coverage.xml > coverage2.xml 

Dies wird relpacing nur die Dateinamen Attribut der Klasse XML-Tags und das Hinzufügen von dem vollständigen Pfad zu den Quelldateien am Anfang. Stellen Sie nur sicher, dass Sie das Cobertura XML-Berichtsmuster auf coverage2.xml aktualisieren (wenn Sie die Ausgabe von sed dorthin leiten).

Es wäre schön, wenn das Cobertura-Plugin Ihnen erlauben würde, den Quellpfad ähnlich wie das Violations-Plugin einzugeben - leider, soweit ich weiß, tut es das nicht.

Ich hoffe, das hilft!

+0

Das geht bei mir nicht, mit Jenkins. Ich habe einen absoluten Pfad zu meinem Quellcode ausprobiert und das funktioniert nicht. Ich lese unter https://github.com/gotwarlost/istanbul/issues/50, dass der Pfad relativ zum Jenkins Workspace Cobdura-Verzeichnis sein sollte. Ich habe das und relativ zum Arbeitsbereichsverzeichnis versucht, aber keiner von beiden hat funktioniert. Kann jemand helfen? – Mawg

6

Die Cobertura Report-Datei (die irgendwo an dieser Stelle in $HUDSON/jobs/foo/workspace ist) braucht so etwas wie dies am Anfang enthalten:

<sources> 
    <source>/path/to/source</source> 
    <source>/another/path</source> 
</sources> 

es, dass verfügt nicht? Zeigen die Wege auf den richtigen Ort?

Ein weiteres Problem: Wenn "neuste Version" heißt, bedeutet dies "neueste stabile Version" (d. H. Die Statusanzeige ist blau, nicht gelb).

+0

Es hat dieses Element nicht. Ich habe innerhalb des Elements vor dem Element manuell hinzugefügt, aber keine Änderung. Ist das der richtige Ort? Gibt es eine Möglichkeit, Abdeckung zu teilen, um das Element beim Generieren zu enthalten? Außerdem sind alle Builds stabil. –

+0

+1 Es ist wichtig, dass diese Pfade korrekt sind. – Johan

4

Für mich sind die beiden anderen Lösungen funktionierten nicht stand-alone, sondern eine Kombination von beiden von ihnen haben:

... 
coverage xml 
sed 's/<!-- Generated by coverage.py: http:\/\/nedbatchelder.com\/code\/coverage -->/<sources><source>\/path\/to\/sourcefolder<\/source><\/sources>/g' 

Dies ersetzt einfach einen Kommentar eingefügt durch coverage.py mit Informationen über den Quellenort.

1

Unsere Lösung bestand darin, die Verwendung des cobertura-Berichts ant-Tasks so zu ändern, dass der vollständige Pfad zum Quellverzeichnis und nicht der relative Pfad enthalten ist.

<cobertura-report format="xml" destdir="${coverage.dir}" srcdir="${basedir}/${src.dir}"/> 

Grundsätzlich ist die relative Wegfindung im cobertura xml Bericht enthalten Kreuze bis Hudson, so dass das Cobertura Plugin nicht verwenden können den Quellcode zu finden. In unserem Fall war dies symptomatisch für die Unterschiede zwischen der Art und Weise, wie Hudson für einzelne Modulprojekte und Multimodulprojekte vorgeht.

-1

Der "richtige" Weg, dies zu beheben, besteht darin, Ihr Projekt auf den PYTHONPATH zu setzen und die Tests/Coverage von außerhalb Ihres Repos auszuführen. Da es so aussieht, als würden Sie Django verwenden, können Sie dies mit django-admin.py test --settings = myproject.settings tun.

- Ursprünglich von Pete in einem Kommentar geschrieben, bewegt, um zu antworten.