У меня нет решения вашей проблемы с дублирующимися ccnet-проектами. но я расскажу вам, как мы используем ccnet (и мы очень довольны этим).
у нас есть 20 проектов на сервере сборки и несколько веток релизов предыдущих версий. мы только начинаем сборку по требованию, используя приложение cctray. поэтому после того, как разработчик завершил реализацию функции, он нажимает кнопку «принудительная сборка», и ccnet начинает делать свое дело (сборка, тестирование, тегирование, копирование результатов сборки на сетевой диск, уведомление других разработчиков, ...).
преимущество в том, что разработчики могут решить, когда начинать сборку. проекты, которые не изменились, не создаются. проекты с незавершенной работой могут быть построены несколькими коммитами позже, только когда разработчик считает, что ему нужна сборка.
Одна идея, которая приходит на ум при запуске ночных сборок, - это использовать интерфейс удаленного взаимодействия ccnet (который также используется cctray), подключить его к экземпляру ccnet и вызвать метод force-build-метод в полночь.
относительно "назначения двоичных файлов одному и тому же тегу":
В ccnet существует проблема, из-за которой он иногда помечает ревизию из ствола, а иногда - рабочую копию. он делает это в зависимости от того, были ли изменения со времени последней сборки (в этом случае он помечает ревизию из ствола), или если не было изменений со времени последней сборки (в этом случае он помечает рабочую копию).
это довольно раздражает, потому что вы никогда не знаете, что будет зафиксировано - в первом случае ваши двоичные файлы не будут зафиксированы, во втором случае они будут.
мы на самом деле сами исправили ccnet, чтобы он всегда фиксировал рабочую копию, чтобы получить детерминированное поведение. я однажды представил патч, но он так и не сделал его ...