Я присматриваю за внутренней веб-системой (Java, JSP, Mediasurface и т. Д.), Которая постоянно используется (24/5).
Пользователи собирают заявки на улучшения, исправления ошибок и другие бизнес-изменения. Эти проблемы подписываются индивидуально и передаются одному из трех или четырех разработчиков.
Как только проблема завершена, она создается и код передается только в SVN. Измененные файлы (шаблоны, html, классы, jsp) затем копируются на сервер разработчика и фиксируются в другом хранилище, из которого они извлекаются на сервер UAT для тестирования. (для этого часто требуется перезапуск службы Tomcat, а иногда и службы Mediasurface).
Пользователи затем тестируют и либо отклоняют, либо одобряют выпуск. В случае одобрения отредактированные файлы извлекаются на сервер Live и выполняется тот же процесс, что и в UAT.
В случае отклонения разработчик вносит соответствующие изменения и снова запускает процесс выпуска.
Все это делается вручную без особого контроля. Когда разные разработчики работают над одинаковыми файлами, изменения иногда перезаписываются сборками, выполненными из несинхронизированного кода, в других случаях изменения в UAT переносятся в состояние ошибки, поскольку они смешиваются в файлах, связанных с подписанным выпуском.
Я бы хотел перенести это на более контролируемый и автоматизированный процесс, где весь исходный код и выходные файлы хранятся в SVN и выпускаются в Dev, UAT и Live, управляемые системой CI (у нас есть TeamCity для нашей .NET приложения).
Мой вопрос заключается в том, как управлять выпусками нескольких изменений, при которых некоторые будут подписаны и перенесены, а другие отклонены и возвращены разработчику. Изменения могут относиться к перекрывающимся файлам, и простое объединение каждого выпуска в Release Release означает, что отклоненные изменения должны быть удалены из ветви.
Есть ли способ управлять этим с помощью SVN и CI, или мне просто придется жить с текущей системой.