Я работаю над следующим шагом моего проекта непрерывной интеграции, который должен получить TeamCity для создания моего приложения, автоматического изменения номера версии всех сборок и создания установщика ,Необходимые предложения для TeamCity + WiX + MSBuild
Сначала немного:
Я был запущен TeamCity успешно в течение последних нескольких месяцев, и она строит свои конфигурации и запускает свой NUnit и NCover тесты просто отлично.
Я потратил немного времени на изучение инсталляторов - я всегда ненавидел InstallShield и никогда не рассматривал его для моего текущего приложения. Мне нравится NSIS, но потом случилось встретить WiX. У меня нет интимного знания архитектуры MS Installer, которая, как я понимаю, опасна для сложных проектов, поэтому в какой-то момент мне нужно будет узнать больше об этом. Тем не менее, через несколько дней после прохождения вопросов SO, поиска в Интернете и чтения блогов, у меня есть проект WiX, который успешно создает, устанавливает, запускает приложение и все удаляет чисто. Большой!
Я также хотел, чтобы конфигурация сборки TeamCity автоматически обновляла номер версии всех моих сборок. Я смог объединить эту функциональность, установив MSBuild Community Tasks на мою машину разработки и создав конфигурацию развертывания, которая использует цель BeforeBuild и задачу FileUpdate, чтобы изменить номер версии. Это работает правильно, за исключением того, что на моей машине разработки у меня нет переменной окружения build_vcs_number_1 для замены.
Так вот, где я сейчас - мне нужно, чтобы TeamCity выполнял обновление, и хотя у него есть переменная окружения build_vcs_number_1, я не могу понять, как добраться до задач сообщества WiX MSBuild.
Одно сообщение, которое я прочитал, рекомендуется проверить в целевых MSBuild в папку SVN. У меня есть папка/extlib для вещей, как это, так что мои правила Кассовые TeamCity VCS выглядеть примерно так:
+:tags/2010-10-15=>src
+:extlib=>extlib
Как добраться до extlib из переменной окружения? Когда я запускаю сборку, TeamCity жалуется (и правильно), что не может найти c:\wix30\MSBuildCommunityTasks
. Фактическая папка C:\TeamCity\buildAgent\work\3e073d2b74226378\extlib\wix30\MSBuildCommunityTasks
. Папка автоматически генерируется, так как я выполняю проверку на стороне сервера, поэтому должна быть какая-то переменная среды, которую TeamCity устанавливает, чтобы я мог использовать правильный путь.
Одна вещь, которую я должен отметить, это то, что я перешел в конфигурацию сборки -> Свойства и переменные среды и нашел неинтуитивный дропсет со всеми существующими переменными и не видел ничего, что звучало как переменная, указывающая на рабочий путь.
Один из возможных способов решения проблемы - просто установить MSBuild Community Tasks на сервере сборки, а затем я могу создать переменную системной среды, к которой можно получить доступ: <WixToolPath>
.
Есть ли у кого-нибудь другие предложения?
Мне просто интересно, работаете ли вы так. Раньше я делал нечто похожее примерно в то же время, когда этот вопрос был создан, но затем появились Git и NuGet, и я медленно перешел на использование NuGet в качестве основного способа управления зависимостями. У TeamCity, конечно, теперь есть патчер AssemblyInfo, и в следующей версии они делают все, что могут сделать задачи сообщества MSBuild. –
Я все еще работаю таким образом, и в настоящее время это еще достаточно хорошее решение для меня, но поскольку я получаю больше пропускной способности, я обязательно буду изучать изменения. Я хотел уйти от задач сообщества MSBuild, потому что мне нужно изменить каждую новую сборку, и это неудобно. – Dave