О, мальчик. Вы сталкиваетесь с реальными проблемами с CD. Действительно хорошие вопросы.
Ответ немного зависит от тесно связанных между собой разработок различных проектов.
В моей идеальной ситуации для вас было бы иметь ряд "усилий" конкретных тестовых сред. В одном случае вы могли бы рассмотреть тестовую среду для каждого проекта. Когда есть завершенная сборка проекта A, вы помещаете ее в среду A, в которой установлены последние утвержденные / производственные версии для B / C, и вы можете выполнять там базовые интеграционные тесты. Если они пройдут, вы продвинете сборку в среду тестирования интеграции, где последняя версия A будет развернута вместе с последней версией B & C для того же выпуска. Когда среда тестирования интеграции проходит тестирование, ее содержимое можно рекламировать как набор релизов, содержащий известные версии A, B и C. Этот набор релизов будет развернут в любых средах UAT, Staging или Production.
Основная идея состоит в том, чтобы дать каждому проекту определенную степень изоляции, чтобы его можно было хорошо протестировать, даже если другие проекты (временно) сильно повреждены, и в то же время максимально быстро пройти к полным интеграционным тестам. Мы также хотим убедиться, что все, что мы на самом деле пройдем, пройдёт интеграционные тесты. Выбор и выбор версий проекта, которые не были протестированы вместе, слишком рискован на мой вкус.
На самом деле, это тема, о которой я часто говорю. Если вы не возражаете, я перечислю несколько презентаций по этим темам.
1) Масштабирование CI для параллельной разработки (совместно с Крисом Луккой из Accurev)
Это хорошо говорит о широких стратегиях для уравновешивания изоляции и интеграции. Во многом это предполагает, что подпроекты объединяются в общую базу кода, но принципы могут быть применены к независимо построенным и развернутым модулям с небольшим воображением.
2) Использование uDeploy с Jenkins
(требуется регистрация)
Это больше сфокусировано на продукте, но почти точно показывает идею использования среды тестирования интеграции для нескольких проектов, создания набора релизов (мы называем это «снимком») и продвижения этого. Наша интеграция с TeamCity очень похожа, но я думаю, что стратегия, которая там находится, может быть более важной
3) Слайды, визуализирующие многокомпонентный конвейер:
http://www.slideshare.net/Urbancode/adapting-deployment-pipelines-for-complex-applications