При использовании зависимостей моментальных снимков Team City вы используете файлы моментальных снимков после сборки или просто номер версии SVN? - PullRequest
7 голосов
/ 28 октября 2011

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

  • Код сборки и тестирования
  • Код развертывания

Я хочу, чтобы код развертывания выполнялся только в том случае, еслиПостроение и тестирование кода успешно завершены, поэтому я настроил зависимость моментального снимка.

Означает ли зависимость моментального снимка, что Deploy Code извлечет ту же версию SVN, что и Build & Test Code, а затем запустит скрипт NAnt для этой проверки, который не будет содержать файлы, созданные компилятором после сборки?Или будет ли зависимость моментального снимка от кода сборки и тестирования из кода развертывания означать, что NAnt будет работать с файлами рабочей директории кода сборки и тестирования после агента сборки?

UPDATE:

Кажется, если я добавлю зависимость моментального снимка в код сборки и тестирования для кода развертывания, и у меня будет сборка последней версии для кода сборки и тестирования, мой сценарий NAnt развернет файлы после сборкидля этой сборки Build & Test Code.

Я все еще хотел бы подтвердить, что я понимаю концепцию, поскольку я не очень понимаю документацию Team City.Я думаю, что мне следует убедиться, что Deploy Code работает на том же агенте сборки, что и Build & Test Code, иначе я могу столкнуться с ситуацией, когда Deploy Code проверяет версию SVN, а затем просто развертывает файлы кода предварительной сборки.Это правильно?

Моя путаница в основном из-за того, что вам, кажется, нужно настроить VCS для Deploy Code.Это потому, что ему нужно сравнить номера ревизий с зависимостью моментального снимка?

Ответы [ 2 ]

7 голосов
/ 10 ноября 2011

Из раздела Зависимость моментального снимка на странице документа Зависимые сборки :

Снимок зависимости от конфигурации сборки A для сборки конфигурация B обеспечивает, чтобы каждая сборка A имела «подходящую» сборку B, так что обе сборки используют один и тот же моментальный снимок источников (используемые источники редакции соответствуют одному и тому же моменту).

Таким образом, идея зависимости моментального снимка состоит в том, что вы можете запустить сборку с точно такой же кодовой базой , как и другая сборка, которая успешно запустила ее.

Если вы хотите, чтобы сборка «развернуть код» запускалась только после успешного запуска «сборки и проверки кода», создайте зависимость моментального снимка во второй сборке и убедитесь, что она установлена ​​на «Использовать только успешные сборки из подходящих» .

Имейте в виду, что это не имеет ничего общего с артефактами; вторая сборка просто извлечет ту же кодовую базу и перекомпилирует ее заново. Если вы хотите развернуть артефакты, созданные в первой сборке, вместо этого вы должны рассмотреть зависимости артефактов . Это именно то, о чем Павел написал в своем ответе, и это правильный подход.

Что касается вашего обновления, похоже, что эти файлы после сборки доступны только потому, что они все еще находятся в агенте сборки после первой сборки. Попробуйте запустить первую сборку, а затем «очистить источники» на агенте и запустить вторую сборку. Вы обнаружите, что оригинального вывода компиляции больше нет, и он потерпит неудачу. Это важно, потому что если у вас есть несколько агентов сборки или вы проводите некоторое время между двумя сборками, вы просто не можете рассчитывать на вывод, который не сохранен, поскольку артефакты все еще там.

И да, документация TeamCity сбивает с толку:)

6 голосов
/ 30 октября 2011

У меня очень похожая настройка в TeamCity за исключением того, что я использую MSBuild, а не NAnt, но я использую тот же двухэтапный процесс сборки, и если я объясню, как я его настроил, то, надеюсь, он позволит вам понять, что вам нужно .

Итак, в моей настройке Build 1 извлекает код из системы контроля версий, компилирует его и запускает модульные тесты. Затем он публикует все файлы, необходимые для развертывания, как артефакты.

Сборка 2 имеет снимок и зависимость артефакта от сборки 1, и это означает, что он не тянет код, он просто берет артефакты из сборки 1 и развертывает их.

На практике это означает, что я могу запустить сборку 2, и происходит одна из двух вещей. Если Build 1 обновлен, он просто развертывает артефакты из последней успешной сборки Build 1. Однако если Build 1 не обновлен, TeamCity автоматически запустит Build 1, а затем сразу же запустит Build 2, используя артефакты из этого строить.

...