11

Sto usando Hudson per costruire continuamente un progetto diPython. Prove di unità e la copertura del codice grande lavoro, ma questo messaggio appare durante la foratura nella relazione Cobertura Copertura per i miei file che sono non unit test:Hudson "Il codice sorgente non è disponibile."

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 l'unità i test vengono trovati e visualizzati. Ho provato a copiare manualmente i file sorgente per altri file .py in ~/.hudson/jobs/<projectname>/cobertura (dove vengono copiati i test dell'unità), ma non ha funzionato.

Qualche suggerimento?

risposta

6

Questo è un brutto colpo di brutto, ma è l'unica cosa che ho potuto inventare per farlo funzionare ... e dopo ore passate a cercare su Google e cercare di ottenere risultati, questa è l'unica cosa Mi sono inventato.

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

questo è solo relpacing l'attributo nome dei tag classe XML e aggiungendo il percorso completo ai file di origine all'inizio. Assicurati semplicemente di aggiornare il modello di report di Cobertura xml in modo che sia coverage2.xml (se questo è il punto in cui stai trasmettendo l'output di sed a).

Sarebbe bello se il plug-in di Cobertura ti consentisse di inserire il percorso di origine simile a come funziona il plugin Violations - sfortunatamente, per quanto ne so, non lo è.

Spero che questo aiuti!

+0

Questo non funziona per me, con Jenkins. Ho provato un percorso assoluto per il mio codice sorgente, e che non funziona. Ho letto su https://github.com/gotwarlost/istanbul/issues/50 che il percorso dovrebbe essere relativo alla directory di Cobdura dell'area di lavoro di Jenkins. L'ho provato e relativo alla directory dello spazio di lavoro, ma nessuno dei due ha funzionato. Qualcuno può aiutare? – Mawg

6

file di report Il 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> 

abbia il fatto che? I percorsi indicano il posto giusto?

Un altro punto: quando si dice "build più recente", che in realtà significa "recente costruzione più stabile" (vale a dire la palla stato è blu, al contrario di giallo).

+0

Non ha quell'elemento. Ho aggiunto manualmente l'elemento prima dell'elemento , ma nessuna modifica. È il posto giusto? C'è un modo per dire che la copertura include l'elemento durante la generazione? Inoltre, tutte le build sono stabili. –

+0

+1 È importante che quei percorsi siano corretti. – Johan

4

Per me 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 inserita da coverage.py con informazioni sulla posizione di origine.

1

La nostra soluzione era di alterare il nostro uso dell'attività cobertura-report ant 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 sintomatico delle differenze tra il modo in cui Hudson fa il suo percorso per progetti di moduli singoli e progetti multi-modulo.

-1

Il modo "corretto" per risolvere questo problema è collocare il progetto su PYTHONPATH e eseguire i test/copertura dall'esterno del repository. Dal momento che sembra che tu stia usando Django, django-admin.py test --settings = myproject.settings ti consentirà di farlo.

- Originariamente pubblicato da Pete in un commento, spostato per rispondere.