Хадсон "Исходный код недоступен".

Я использую 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 (где юнит-тесты будут скопированы), но это не сработало.

Любые предложения?

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Есть ли у него это? Укажите пути в нужное место?

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

- Первоначально отправленный Pete в комментарии, перешел на ответ.