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

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

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

7 ответов

Решение

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

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

Хадсон обнимает Питона

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

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

Вторая интеграция 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, который улавливает типичные неудачи тестирования, а затем делаем многоплатформенную регрессию с помощью Buildbot.

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

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

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

Но TeamCity это:

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

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

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

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

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

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

Другие вопросы по тегам