Исходный код Hudson недоступен.

Я использую Hudson для постоянного создания проекта Python. Модульные тесты и покрытие кода работают отлично, но это сообщение появляется при переходе к Отчету о покрытии Cobertura для моих файлов, которые не являются модульными тестами:

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.

Странно то, что исходный код модульных тестов обнаруживается и отображается. Я попытался вручную скопировать исходные файлы для других файлов .py в ~/.hudson/jobs/<projectname>/cobertura (где копируются модульные тесты), но это не сработало.

Какие-либо предложения?


person Matt Norris    schedule 18.02.2010    source источник


Ответы (5)


Это чертовски уродливый хак, но это единственное, что я мог придумать, чтобы наконец заставить его работать ... и после нескольких часов поисков в Google и попыток добиться результатов, это единственное, что я придумал. .

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

Это просто замена атрибута имени файла в тегах класса xml и добавление полного пути к исходным файлам в начале. Просто убедитесь, что вы обновили шаблон отчета Cobertura xml, чтобы он был покрытием2.xml (если это то место, куда вы передаете вывод sed по конвейеру).

Было бы неплохо, если бы плагин Cobertura позволял вам вводить исходный путь аналогично тому, как это делает плагин Violations - к сожалению, насколько мне известно, это не так.

Надеюсь, это поможет!

person Matthew J Morrison    schedule 26.05.2010
comment
У меня с Дженкинсом это не работает. Я попробовал указать абсолютный путь к моему исходному коду, но он не работает. Я прочитал на странице github.com/gotwarlost/istanbul/issues/50, что путь должен относиться к каталогу Cobdura рабочей области Jenkins. Я пробовал это и относительно каталога рабочей области, но ни один из них не работал. Кто-нибудь может помочь? - person Mawg says reinstate Monica; 23.10.2015

Файл отчета Cobertura (который на данный момент находится где-то в $HUDSON/jobs/foo/workspace) должен содержать что-то вроде этого в начале:

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

Это есть? Пути указывают в нужное место?

Еще одна проблема: когда говорится «самая последняя сборка», на самом деле это означает «самая последняя стабильная сборка» (т. Е. Статусный шар синий, а не желтый).

person legoscia    schedule 19.02.2010
comment
В нем нет этого элемента. Я вручную добавил в элемент ‹coverage› перед элементом ‹packages›, но без изменений. Это подходящее место? Есть ли способ указать, что покрытие должно включать элемент ‹sources› при создании? Также все сборки стабильны. - person Matt Norris; 20.02.2010

Для меня два других решения не работали автономно, но их комбинация работала:

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

Это просто заменяет комментарий, вставленный coverage.py, на информацию об исходном местоположении.

person deif    schedule 13.08.2010
comment
Это спасло мне день и сработало. Просто убедитесь, что у вас там еще нет тега <sources/> - person Payam; 28.08.2019

Наше решение состояло в том, чтобы изменить использование задачи муравья cobertura-report, чтобы включить полный путь к исходному каталогу, а не относительный путь.

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

По сути, относительный путь, включенный в отчет cobertura xml, пересекает Hudson, так что подключаемый модуль Cobertura не может использовать его для поиска исходного кода. В нашем случае это было симптомом различий между тем, как Hudson выполняет свой путь для проектов с одним модулем и проектов с несколькими модулями.

person Ophidian    schedule 19.10.2010

«Правильный» способ исправить это - поместить ваш проект в PYTHONPATH и запустить тесты / покрытие вне вашего репо. Поскольку похоже, что вы используете Django, django-admin.py test --settings = myproject.settings позволит вам это сделать.

- Первоначально опубликовано Питом в комментарии, перемещен к ответу.

person Community    schedule 31.01.2012