Система непрерывной интеграции для базы кода Python

Я начинаю работать над хобби-проектом с базой кода Python, и я хотел бы настроить некоторую форму непрерывной интеграции (то есть запускать батарею тестовых случаев каждый раз, когда выполняется регистрация, и отправка сообщений электронной почты ответственным лицам. человек, когда тесты терпят неудачу) аналогично CruiseControl или TeamCity .

Я понимаю, что могу сделать это с помощью хуков в большинстве VCS , но для этого необходимо, чтобы тесты выполнялись на том же компьютере, что и сервер контроля версий, что не так элегантно, как хотелось бы. Есть ли у кого-нибудь предложения по небольшой, удобной системе непрерывной интеграции с открытым исходным кодом, подходящей для базы кода Python?

Ответов (7)

Решение

Запускаем Buildbot - Trac на работе. Я не использовал его слишком часто, так как моя кодовая база еще не является частью цикла выпуска. Но мы запускаем тесты в разных средах (OSX / Linux / Win), и он отправляет электронные письма - и он написан на Python.

Мы используем Bitten, интегрированный с trac. И он основан на питоне.

У меня очень хороший опыт работы с Travis-CI для небольших кодовых баз. Основные преимущества:

  • настройка выполняется менее чем на половине экрана файла конфигурации
  • вы можете выполнить установку самостоятельно или просто использовать бесплатную размещенную версию
  • полуавтоматическая настройка репозиториев github
  • учетная запись на сайте не требуется; войти через github

Некоторые ограничения:

  • Python не поддерживается как язык первого класса (на момент написания; но вы можете использовать pip и apt-get для установки зависимостей python; см. Это руководство )

  • код должен быть размещен на github (по крайней мере, при использовании официальной версии)

Одна из возможностей - Хадсон. Он написан на Java, но есть интеграция с проектами Python:

Хадсон принимает Python

Однако сам я никогда не пробовал.

( Обновление , сентябрь 2011 г .: после спора о товарных знаках Хадсон был переименован в Jenkins .)

Во-вторых, интеграция Buildbot - Trac. Дополнительную информацию об интеграции можно найти на веб-сайте Buildbot . На моей предыдущей работе мы написали и использовали упомянутый плагин (tracbb). Плагин переписывает все URL-адреса Buildbot, чтобы вы могли использовать Buildbot из Trac. ( http://example.com/tracbb ).

Что действительно хорошо в Buildbot, так это то, что конфигурация написана на Python. Вы можете интегрировать свой собственный код Python прямо в конфигурацию. Также очень легко написать свои собственные BuildSteps для выполнения определенных задач.

Мы использовали BuildSteps, чтобы получить исходный код из SVN, извлечь зависимости, опубликовать результаты тестирования в WebDAV и т. Д.

Я написал интерфейс X10, чтобы мы могли отправлять сигналы с результатами сборки. Когда сборка не удалась, мы включили красную лавовую лампу. Когда сборка прошла успешно, загорелась зеленая лавовая лампа. Хорошие времена :-)

Мы используем как Buildbot, так и Hudson для разработки Jython. Оба они полезны, но имеют разные сильные и слабые стороны.

Конфигурация Buildbot - это чистый Python и довольно простой, как только вы освоите его (посмотрите документацию API, созданную epydoc для получения самой последней информации). Buildbot упрощает определение задач, не связанных с тестированием, и распространение тестеров. Однако на самом деле в нем нет концепции отдельных тестов, только текстовый, HTML и сводный вывод, поэтому, если вы хотите иметь многоуровневый просматриваемый тестовый вывод и т. Д., Вам придется создать его самостоятельно или просто использовать Hudson.

У Hudson есть потрясающая поддержка для перехода от общих результатов к тестовым комплектам и индивидуальным тестам; он также отлично подходит для сравнения результатов тестирования между сборками, но распределенный (главный / подчиненный) материал сравнительно сложнее, потому что вам также нужна среда Java на подчиненных устройствах; кроме того, Hudson менее терпим к нестабильным сетевым соединениям между ведущим и ведомыми устройствами.

Итак, чтобы воспользоваться преимуществами обоих инструментов, мы запускаем один экземпляр Hudson, который выявляет типичные сбои тестов, а затем выполняем многоплатформенную регрессию с помощью Buildbot.

Вот наши примеры:

TeamCity имеет некоторую интеграцию с Python .

Но TeamCity - это:

  • не с открытым исходным кодом
  • не маленький, а достаточно многофункциональный
  • бесплатно для малых и средних команд.