Настройка этапов сборки TeamCity

Я пытаюсь понять, как настроить шаги сборки TeamCity для выполнения следующих задач:

  1. Вызовите консольное приложение, которое объединяет ветвь разработки с ветвью тестирования (в TFS) и вручную изменяет некоторые файлы в ветке теста, которые используются для конфигураций проектов. Этот процесс работает отлично и был протестирован. Также обратите внимание, что на этом шаге не возвращаются объединенные или измененные файлы в тестовую ветвь.
  2. Этот шаг сборки запустит фактическую сборку решения для тестовой ветки. (Это C # .NET, но я не думаю, что это важно)
  3. На этом этапе сборки выполняется перенос базы данных для любых добавленных сценариев SQL. (Этот шаг также был протестирован и работает)
  4. Этот шаг вызывает другое консольное приложение. Этот шаг будет выполняться, даже если предыдущие шаги завершились неудачно. Если сборка прошла успешно, он проверит ожидающие изменения с шага 1 и выполнит развертывание сборки. Если сборка завершилась неудачно на предыдущем шаге, отложенные изменения с шага 1 будут отменены.

Это кажется достаточно простым, но я не знаю, как сделать взаимодействие между шагами 1 и 2. Если я использую проверку на стороне сервера для шага 2, он будет извлекать источник с сервера и не использовать мои изменения на шаге 1. Если я выполняю проверку на стороне агента пользователя, я понимаю, что он создаст новое рабочее пространство и извлечет источник из сервер, снова не использующий мои изменения на шаге 1.

Есть ли способ сделать шаг 2 сборки с отложенными изменениями, созданными на шаге 1? Единственный другой вариант, который я могу придумать, - это проверить изменения после шага 1 и откатить набор изменений на шаге 4, если сборка не удалась. Но в таком случае, как шаг 4 узнает об откате набора изменений?


Также у меня есть один вопрос поменьше: как передать успех сборки в качестве параметра на шаг 4? Я просмотрел встроенные параметры, но не нашел ни одного для сбоя / успеха сборки?

Спасибо!


person user2097151    schedule 22.07.2014    source источник


Ответы (1)


Было бы полезно, если бы вы могли указать имя VCS, которое вы используете (Git / SVN). Я вижу, ваш вопрос в основном состоит из двух основных моментов.

  • Если вы используете этапы сборки Teamcity, где все этапы сборки являются частью одной цели, вам не нужно беспокоиться о взаимодействии между Шагом 1 и Шагом 2. Все шаги могут выполняться в одном каталоге. Вы всегда сохраняете статус своей рабочей копии на всех подэтапах.
  • Единственная проблема в teamcity заключается в том, что вы не можете запустить сборку / шаг «только в том случае, если предыдущий шаг завершился неудачно». Чтобы обойти это, вы можете создать файл сбоя
    на любом из предыдущих шагов и запустить сборку только в том случае, если этот файл присутствует. Удаляйте файл в конце каждой сборки, чтобы убедиться, что в следующей сборке не будет случайных проблем.

Итак, вкратце, ваши шаги сборки могут (1) проверить ветку, (2) объединить в нее другую ветку, (3) запустить сборку и развернуть базу данных, а затем (4) зафиксировать ваш код / ​​выполнить откат изменений базы данных, если он не работает на основе в файле сбоя.

Что касается вашего второго вопроса, каждый шаг teamcity знает статус успеха всей сборки и предыдущих шагов как упоминалось здесь. Единственный пропущенный шаг - это «выполнить шаг, если какой-либо из предыдущих шагов не удался».

person Biswajit_86    schedule 23.07.2014