4

В среде разработки программного обеспечения, где я работаю, у нас есть группа разработчиков, работающих в одной и той же (Java) кодовой базе (в настоящее время использующей SVN). Я замечаю, что люди хотят часто фиксировать то, что они построили, не «разбивая сборку». Поэтому именно по этой причине я смотрю на такие инструменты, как Git и Mercurial, которые делают разветвление и особенно слияние намного проще.Идея рабочего процесса непрерывной интеграции

Одна из вещей, которые я вижу, заключается в том, что если разработчик совершает «плохой код», тогда код нарушается для всех. Как идея избежать этого, мне хотелось бы иметь репозиторий промежуточной единственной функции, который просто является текущим «мастером», ТОЛЬКО одним набором изменений для этой единственной новой функции. Такой репозиторий «промежуточная единая функция» затем может быть автоматически протестирован (качество кода, модульное тестирование, ручная проверка кода и т. Д.), Прежде чем стать частью основной базы кода.

Итак, рабочий процесс, который я имею в виду, выглядит примерно так :.

  1. Разработчик создает новую функцию и ежедневно ее фиксирует.
  2. По прошествии некоторого времени разработчик завершает работу и отправляет весь набор изменений для интеграции в «основной» репозиторий.
  3. Система непрерывной интеграции принимает текущий «мастер», применяет набор изменений и проверяет код (конфликты слияния, PMD, Findbugs, ...), запускает модульные тесты, проверяет стиль кодирования и т. Д.
  4. Если система CI решает «плохой код», разработчик уведомляется о причинах, и разработчик должен устранить указанные проблемы. В этом случае основной репозиторий не изменяется.
  5. Если система CI решила «достаточно хорошо», код достигнет «ведущего разработчика» или «рецензента кода», который проверяет выбранное решение и утверждает или отклоняет его.
  6. Утвержденный набор изменений затем включается в основной репозиторий и доступен для всех разработчиков для переустановки/слияния.

У меня есть некоторые вопросы по поводу этого вида процесса:

  • ли вы, что это будет хорошо работать на практике (то есть это хорошая идея или действительно Braindead один)?
  • С кем-то из вас раньше работали? Каковы были про и кон?
  • Есть ли сценарий «готовый к запуску»/procedure/tool/..., который позволяет запустить такой рабочий процесс (или вариант этой идеи) за минимальное время?

Спасибо.


Справка:

Я работал разработчиком около 13 лет назад в компании, где они строят подобный рабочий процесс внутри и у них были два ночных сборках:

  1. В «производство 'версия: Основная кодовая база
  2. «старшая версия: основная база кода со всеми новыми версиями всех измененных файлов.

Поскольку это была вся SCCS (модель блокировки-редактирования-разблокировки), на основе которой не было возможности «совершать часто», у вас были взаимоблокировки для изменения кода и всех других видов неприятных эффектов. То, что я ищу, это в основном хорошие вещи о том, что я использовал тогда, используя гораздо лучшие инструменты сегодняшнего дня.

ответ

2

TeamCity имеет претест фиксации функцию.

http://www.jetbrains.com/teamcity/delayed_commit.html

+0

Я прочитал страницу и, кажется, что если вы «совершить» изменение, то система сразу начинает работать. Как это работает, если вы хотите «совершать часто», но только хотите начать, когда думаете, что закончили. Если вы используете Test Driven Development, вы начинаете с выполнения (и совершения) тестов, которые преднамеренно «разбивают сборку», чтобы показать функции, которые все еще необходимо добавить. –

+0

Вы не добавляете модульные тесты, которые ломают сборку, они могут терпеть неудачу с отдельными тестами, но сборка по-прежнему действительна, иначе вы никогда не сможете запускать тесты, ну конечно же, в моей среде. Это зависит от правил, которые вы настраиваете, чтобы определять, что такое «сломанная сборка» или нет. – redsquare

+0

@niels - Я бы категорически не согласился с тем, что вы совершили сломанные тесты. Всегда выполняйте рабочий код и тесты. Не предварительно заполняйте пустые или ожидающие проверки. Используйте только действующий код, который используется. – Harmon

2

В компании, в которой я сейчас работаю, мы подумали об использовании такого подхода. В итоге мы решили использовать что-то более простое. Мы разрешаем автоматическим сборкам устанавливать ярлык после успешной сборки, и у нас есть инструмент, который мы используем для синхронизации с этим ярлыком. Поэтому, когда кто-то нарушает сборку, другие люди все равно смогут получить рабочую версию из репозитория. Инструмент, который синхронизируется, также гарантирует, что если вы только что представили что-то, ваши изменения не будут заменены версиями, принадлежащими метке. Для нас эта работа отлично, но она не подходит для вашей ситуации.

С уважением,

Sebastiaan

Смежные вопросы