Что касается «выяснения того, как собрать при загрузке»: я разработал, используя систему фермы сборки, созданную очень быстро одним системным администратором и одним разработчиком. Ведомые сборки запрашивают у мастера задач подходящие запросы на построение в очереди. Это довольно мило.
Запрос является «подходящим» для ведомого устройства, если его требования цепочки инструментов соответствуют версиям цепочки инструментов на ведомом устройстве, в том числе для какой ОС, поскольку продукт является многоплатформенным, а сборка может включать автоматические тесты. Обычно это «текущее состояние дел», но это не обязательно.
Когда ведомое устройство готово к сборке, оно просто начинает опрос мастера задач, сообщая ему, что у него установлено. Он не должен знать заранее, что он собирается построить. Он извлекает запрос на сборку, который говорит ему проверить определенные теги из SVN, а затем запустить скрипт из одного из этих тегов, чтобы взять его оттуда. Разработчикам не нужно знать, сколько ведомых сборок доступно, как они называются или заняты, как добавить запрос в очередь сборки. Сама очередь сборки представляет собой довольно простое веб-приложение. Все очень модульно.
Рабы не обязательно должны быть виртуальными машинами, но обычно они есть. Количество подчиненных устройств (и физических машин, на которых они работают) можно масштабировать для удовлетворения спроса. Очевидно, что подчиненные могут быть добавлены в систему в любое время или могут быть уничтожены в случае сбоя цепочки инструментов. Это на самом деле основной смысл этой схемы, а не ваша проблема с архивированием состояния набора инструментов, но я думаю, что это применимо.
В зависимости от того, как часто вам нужен старый набор инструментов, вы можете захотеть, чтобы очередь сборки была способна запускать виртуальные машины по мере необходимости, поскольку в противном случае тот, кто хочет воссоздать старую сборку, должен также организовать появление подходящего подчиненного устройства. Не то чтобы это обязательно было сложно - это может быть просто вопрос запуска нужной виртуальной машины на машине по их выбору.