Hudson “codice sorgente non è disponibile.”
-
21-09-2019 - |
Domanda
sto usando Hudson per costruire continuamente un Python del progetto. Prove di unità e di lavoro di copertura del codice grande, ma questo messaggio appare nella perforazione di Cobertura rapporto di copertura per i miei file che sono non unit test:
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.
La cosa strana è che il codice sorgente per i test di unità si trovano e visualizzati. Ho cercato di copiare manualmente i file di origine per altri file .py in ~/.hudson/jobs/<projectname>/cobertura
(dove i test di unità vengono copiati), ma non ha funzionato.
Qualche suggerimento?
Soluzione
Questo è un inferno di un brutto hack, ma la sua l'unica cosa che ho potuto venire con per fare finalmente il lavoro ... e dopo ore di usare Google e smanettare cercando di ottenere risultati, questa è l'unica cosa che ho si avvicinò con.
coverage run manage.py test
coverage xml
sed 's/filename="/filename="my\/path\//g' coverage.xml > coverage2.xml
Questa è solo relpacing l'attributo nome dei tag classe XML e aggiungendo il percorso completo ai file di origine all'inizio. Basta fare in modo di aggiornare il report XML modello Cobertura per essere coverage2.xml (se questo è dove stai di tubazioni in uscita di sed a).
Sarebbe bello se il plugin Cobertura permetterebbe di immettere il percorso di origine simile a come il plugin Violazioni fa -. Purtroppo, per quanto io sappia, non
Spero che questo aiuta!
Altri suggerimenti
Il file di report Cobertura (che a questo punto è da qualche parte in $HUDSON/jobs/foo/workspace
) deve contenere qualcosa di simile al principio:
<sources>
<source>/path/to/source</source>
<source>/another/path</source>
</sources>
Ha a che? Fare i percorsi puntano al posto giusto?
Un altro punto:. Quando si dice "build più recente", significa in realtà "più recente build stabile" (vale a dire la palla stato è blu, al contrario di giallo)
Per quanto mi riguarda le altre due soluzioni non hanno funzionato stand-alone, ma una combinazione di entrambi ha fatto:
...
coverage xml
sed 's/<!-- Generated by coverage.py: http:\/\/nedbatchelder.com\/code\/coverage -->/<sources><source>\/path\/to\/sourcefolder<\/source><\/sources>/g'
Questo sostituisce solo un commento inserito da coverage.py con informazioni sulla posizione di origine.
La nostra soluzione era di alterare il nostro uso del compito cobertura-report formica per includere il percorso completo alla directory di origine, piuttosto che il percorso relativo.
<cobertura-report format="xml" destdir="${coverage.dir}" srcdir="${basedir}/${src.dir}"/>
In sostanza, il pathing relativo incluse nella relazione xml cobertura attraversa fino Hudson in modo tale che il plugin Cobertura non è possibile utilizzarlo per trovare il codice sorgente. Nel nostro caso, questo era stata sintomatica delle differenze tra come Hudson fa il suo pathing per i progetti di moduli singoli e progetti multi-modulo.
Il modo "corretto" per risolvere questo problema è quello di mettere il progetto sulla PYTHONPATH e l'esecuzione del test / copertura dall'esterno repo. Dal momento che sembra che si sta utilizzando Django, --settings prova django-admin.py = myproject.settings vi permetterà di fare questo.
-. Messaggio inserito da Pete in un commento, si è trasferito a rispondere