пятница, 15 ноября 2013 г.

TeamCity настройка билд процесса для ASP.NET веб сайта.

TeamCity установлен, теперь займемся его настройкой.
Для начала создаем новый проект.

Далее создаем новый билд, это кнопка "Create build configuration".
На странице "General Settings" задаем следующие параметры:
  • Name: "Build"
  • Description "Build and run unit tests"
остальные параметры по умолчанию и нажимаем кнопку "VCS settings".

На странице "Version Control Settings" нажимаем кнопку "Create and attach new VCS root". Я к примеру использую GIT хранилище, задаем следующие параметры:
  • Type of VCS: Git
  • VCS root name: MyGit
  • Fetch URL: git@git.myserver.git (путь к вашему хранилищу)
Authentication Settings: выбираем метод аутентификации на GIT сервере, я использую авторизацию по приватному ключу, сам ключ нужно скопировать TeamCity сервер. Т.е. задаем
  • Authentication method: Private Key
  • Private key path: C:\Keys\RomanDemo
Все остальные поля оставляем по умолчанию и жмем "Test connection", если все в порядке, сохраняем наше подключении к GIT серверу. 
Мы должны увидеть сообщение:
VCS root created.

Следующий шаг "Add Build Step", так как мы будем билдить NET приложение, то мы используем MSBuild, следовательно выбираем такой же "Runner type". Далее заполняем следующие поля:
  • Build file path: DemoSolution.sln - имя солюшена нашего приложения
  • MSBuild version: версия используемого фреймворка.
Жмем "Save" - мы создали автоматический билд нашего приложения при каждом комите, теперь можем вручную запустить билд с помощью кнопки "Run". Что бы посмотреть прогресс билда и результаты нам нужно перейти на главную страницу TeamCity. Для этого можно надать ссылку "Projects" в верхнем левом углу.

К сожалению наш проект не билдится:
Что бы понять в чем проблема достаточно нажать на самой ошибке. Наша проблема в том что проект использует функцию Nuget Restore

  • C:\TeamCity\buildAgent\work\ad79b1c1983611f5\.nuget\NuGet.targets(88, 9): Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, click on Package Manager node and check 'Allow NuGet to download missing packages during build.' You can also give consent by setting the environment variable 'EnableNuGetPackageRestore' to 'true'.
  • Решения два: добавить переменную окружения или создать дополнительный билд шаг, который восстановит все пакеты.

  • Возвращаемся в редактирование билд конфигурации
  • Первый вариант - это добавление переменной окружения. 
  • Переходим в 7-й шаг Build Parameters и создаем новую переменную окружения env.EnableNuGetPackageRestore с значением "true"

Второй вариант - это добавить предварительный билд шаг
Переходим во 2-й шаг Build Steps и создаем новый шаг с типом "Command Line". Задаем параметры
  • Step name: "Restore" 
  • Custom script: .nuget\nuget.exe restore DemoSolution.sln. 
Сохраняем новый шаг и ставим его первым перед собственно билдом.
*команда Restore появилась недавно и возможно вам придется обновить nuget в вашем проекте.

Запускаем наш исправленный билд снова. И снова ошибка
Compilation error: Demo\Demo.csproj
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found
Проблема в том что на нашем билд сервере не стоит Visual Studio и нет содержимого папки "Microsoft.WebApplication.targets", самое простое решение это скопировать эту папку (C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio) с компьютера с установленной студией на билд сервер.
Другой вариант это установить на билд сервере Microsoft Visual Studio 2012 Shell (Integrated) Redistributable Package.

После решения этой проблемы вновь запускаем билд и бинго билд прошел успешно.
Теперь добавим запуск юнит тестов. Переходим в редактирование билд конфигурации и добавляем новый билд шаг с типом "NUnit" и параметрами:
  • Step name: Run unit tests
  • .NET Runtime: v4.0
  • Run tests from: **\bin\debug\*UnitTest*.dll
Сохраняем этот шаг, как последний и после запуска теста, мы увидим количество пройденных тестов, если хоть один тест упадет, наш билд будет считаться проваленным.

В итоге мы реализовали Continuous integration процесс при помощи Teamcity. Сервер будет автоматически проверять новые версии вашего проекта, билдить его и запускать юнит тесты.

Далее я расскажу как реализовать деплоймент процесс при помощи Octopus Deploy.

Комментариев нет:

Отправить комментарий