Еще одно руководство по CCnet + SVN

Cruise Control — одна из достаточно большого количества CI (continuous integration) систем. Речь пойдет о том, как настроить ее для связи с SVN и деплоя сайта на .NET.

Для начала немного о задачах СС на данном сервере:
  • Взять код из 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.
Решение: По факту — неправильно указывались параметры.

Остальные проблемы — не вызывали неочевидных подходов в решении.

Использованая литература:
Статья Омара Аль Забира

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 3

    +1
    Я только не понял, зачем IIS стопить? Есть же app_offline.htm.
      0
      Спасибо!
      Не знал об этом. Путь, который, изначально, видел лучше — застопить конкретный домен, но в данном случае не имело серьезного смысла.
      Теперь воспользуюсь этим вариантом. После проверки результата самостоятельно — допишу апдейт.
      0
      Для деплоя на сайт я использую стандартный функционал, а не robocopy.
      Publishers

      Only users with full accounts can post comments. Log in, please.