Cruise Control — одна из достаточно большого количества CI (continuous integration) систем. Речь пойдет о том, как настроить ее для связи с SVN и деплоя сайта на .NET.
Для начала немного о задачах СС на данном сервере:
Далее будут выложены куски конфигурационного файла, с комментариями по каждой хоть как-то интересной строчке. По кускам, фактически выложен полный рабочий конфиг.
Итак, блок internal secirty:
Параметры, из разряда самых простых — Имя пользователя, как его отображать в системе и, наконец, пароль.
Ветка permissions это, собственно говоря — создание группы пользователей. Force build — возможность запускать билд вручную, view project — возможность просматривать проекты. И то и другое желательно добавить для пользователя, которому предстоит работать с системой. Подветка users — добавление пользователя в группу. Вот и все, коротко по части безопаности.
Далее начинается ветка project. Для удобства будет разбита на несколько блоков.
Первая часть — основное объявление.
С первой и со второй строкой все просто — это объявление имени проекта, и рабочей папки проекта. Третья же папка иногда вводит в сомнения. Итак — там хранятся побочные продукты билда — логи, например.
Вторая часть — source control
Где указывается путь к исполняемому файлу, который может забрать файлы с репозитория, путь, собственно к репозиторию проекта (в данном случае лежал на этой же машине, что совсем не обязательно), в user и passwd важно указать пользователей имеющих доступ к конкретному репозиторию.
Третья часть — ветка tasks. В этой ветке лежат команды на выолнение. В ней можно вызвать, например, собственные скрипты даже.
Останавливаем IIS для решения возможных проблем одновременного пользования ресурсами (в моем случае это можно сделать и позже, прямо перед копированием в папку к IIS однако нередко полезно выключить заранее. Конечно, если компиляция и перекачка проекта не занимают астраномическое время). В принципе — можно выключать и только отдельный проект. Подробнее о подобном — в ссылках, ниже.
К сожалению именно об этом блоке мне сказать особо нечего. Ссылка, на исполняемый файл, название файла, который ему передается (собственно относительный путь к нему от workingfirektory), параметры вызова и время отводимое на компиляцию.
Робокопи — стандартная консольная утилита для копирования, начиная с win7/2008 Т.к. мне выпало второе — ссылкой для скачки я не озаботился. Итак — параметры.
executable — либо так как есть для новых окон, либо путь к файлу для старых.
baseDirectory — Папка, которую робокопи будет считать стартовой.
buildargs — по порядку — .\ — означает, что копирование мы будем производить прямо из стартовой папки.
Второй параметр — путь к папке — куда копировать. *.* — маска копирования. далее по порядку
/E — рекурсивное копирование поддиректорий
/XA:H — копировать скрытые файлы
/PURGE — Замена удалением
/XO — Не копировать старые
/XD "" Исключить из копирования директорию указанную в кавычках
/NDL /NC /NS /NP — не показывать отчет о копировании
buildTimeoutSeconds — время на выполение. Иногда его бывает маловато, из-за чего тоже может быть ошибка.
successExitCodes — коды выхода, при которых считаем операцию успешной. Можно прямо так оставить.
Запускаем обратно IIS. На этом конец части tasks.
И, наконец, последняя но не менее важная часть — допуски к проекту:
Тут, собственно, объявляется правило доступа по умолчанию, и группа, которой разрешено управление проектом.
Проблема первая — недоверие сертификату SVN.
Решение: Зайти в систему из под пользователя под которым запускается ccnet, сделать из под консоли svn update, из нужного репозитория. И когда встанет вопрос о сертификате ввести p — что будет значить accept permanent
Проблема вторая — RPC. Сервер выпадает с ошибкой о недоступности RPC.
Решение: По факту — неправильно указывались параметры.
Остальные проблемы — не вызывали неочевидных подходов в решении.
Использованая литература:
Статья Омара Аль Забира
Для начала немного о задачах СС на данном сервере:
- Взять код из SVN репозитория
- Скомпилировать его
- Положить в директорию к IIS
Далее будут выложены куски конфигурационного файла, с комментариями по каждой хоть как-то интересной строчке. По кускам, фактически выложен полный рабочий конфиг.
Итак, блок internal secirty:
<internalSecurity>
<users>
<passwordUser name="Dude">
<display>Dude the Builder</display>
<password>blah-blah-blah</password>
</passwordUser>
</users>
<permissions>
<rolePermission name="Builders">
<forceBuild>Allow</forceBuild>
<defaultRight>Deny</defaultRight>
<viewProject>Allow</viewProject>
<users>
<userName>
<name>Dude</name>
</userName>
</users>
</rolePermission>
</permissions>
</internalSecurity>
Параметры, из разряда самых простых — Имя пользователя, как его отображать в системе и, наконец, пароль.
Ветка permissions это, собственно говоря — создание группы пользователей. Force build — возможность запускать билд вручную, view project — возможность просматривать проекты. И то и другое желательно добавить для пользователя, которому предстоит работать с системой. Подветка users — добавление пользователя в группу. Вот и все, коротко по части безопаности.
Далее начинается ветка project. Для удобства будет разбита на несколько блоков.
Первая часть — основное объявление.
<project name="mysite"><workingDirectory>C:\develop\CCnet\mysiteCCnetMain</workingDirectory>
<artifactDirectory>C:\develop\CCnet\mysiteCCnetArtifacts</artifactDirectory>
С первой и со второй строкой все просто — это объявление имени проекта, и рабочей папки проекта. Третья же папка иногда вводит в сомнения. Итак — там хранятся побочные продукты билда — логи, например.
Вторая часть — source control
<sourcecontrol type="svn">
<executable>C:\Program Files (x86)\VisualSVN Server\bin\svn.exe</executable>
<trunkUrl>https://127.0.0.1:443/svn/someproject</trunkUrl>
<username>user</username>
<password>passwd</password>
</sourcecontrol>
Где указывается путь к исполняемому файлу, который может забрать файлы с репозитория, путь, собственно к репозиторию проекта (в данном случае лежал на этой же машине, что совсем не обязательно), в user и passwd важно указать пользователей имеющих доступ к конкретному репозиторию.
Третья часть — ветка tasks. В этой ветке лежат команды на выолнение. В ней можно вызвать, например, собственные скрипты даже.
<exec>
<executable>iisreset</executable>
<buildArgs>/stop</buildArgs>
</exec>
Останавливаем IIS для решения возможных проблем одновременного пользования ресурсами (в моем случае это можно сделать и позже, прямо перед копированием в папку к IIS однако нередко полезно выключить заранее. Конечно, если компиляция и перекачка проекта не занимают астраномическое время). В принципе — можно выключать и только отдельный проект. Подробнее о подобном — в ссылках, ниже.
<msbuild>
<executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
<projectFile>mysite.sln</projectFile >
<buildArgs>
/p:Configuration=Debug
</buildArgs>
<targets>ReBuild</targets >
<timeout>600</timeout >
</msbuild>
К сожалению именно об этом блоке мне сказать особо нечего. Ссылка, на исполняемый файл, название файла, который ему передается (собственно относительный путь к нему от workingfirektory), параметры вызова и время отводимое на компиляцию.
<exec>
<executable>robocopy.exe</executable>
<baseDirectory>C:\develop\CCnet\mysiteCCnetMain</baseDirectory>
<buildArgs>.\ C:\Inetpub\vhosts\mysite\httpdocs *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP</buildArgs>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
<successExitCodes>1,0</successExitCodes>
</exec>
Робокопи — стандартная консольная утилита для копирования, начиная с win7/2008 Т.к. мне выпало второе — ссылкой для скачки я не озаботился. Итак — параметры.
executable — либо так как есть для новых окон, либо путь к файлу для старых.
baseDirectory — Папка, которую робокопи будет считать стартовой.
buildargs — по порядку — .\ — означает, что копирование мы будем производить прямо из стартовой папки.
Второй параметр — путь к папке — куда копировать. *.* — маска копирования. далее по порядку
/E — рекурсивное копирование поддиректорий
/XA:H — копировать скрытые файлы
/PURGE — Замена удалением
/XO — Не копировать старые
/XD "" Исключить из копирования директорию указанную в кавычках
/NDL /NC /NS /NP — не показывать отчет о копировании
buildTimeoutSeconds — время на выполение. Иногда его бывает маловато, из-за чего тоже может быть ошибка.
successExitCodes — коды выхода, при которых считаем операцию успешной. Можно прямо так оставить.
<exec>
<executable>iisreset</executable>
<buildArgs>/start</buildArgs>
</exec>
Запускаем обратно IIS. На этом конец части tasks.
И, наконец, последняя но не менее важная часть — допуски к проекту:
<security type="defaultProjectSecurity">
<defaultRight>Deny</defaultRight>
<permissions>
<rolePermission name="Builders" ref="Builders" />
</permissions>
</security>
Тут, собственно, объявляется правило доступа по умолчанию, и группа, которой разрешено управление проектом.
Немного о подводных камнях, встреченных мною.
Проблема первая — недоверие сертификату SVN.
Решение: Зайти в систему из под пользователя под которым запускается ccnet, сделать из под консоли svn update, из нужного репозитория. И когда встанет вопрос о сертификате ввести p — что будет значить accept permanent
Проблема вторая — RPC. Сервер выпадает с ошибкой о недоступности RPC.
Решение: По факту — неправильно указывались параметры.
Остальные проблемы — не вызывали неочевидных подходов в решении.
Использованая литература:
Статья Омара Аль Забира