Система непрерывной интеграции для базы кода 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 (по крайней мере, при использовании официальной версии)