Использование CruiseControl для копирования головной папки SVN в папку Release - PullRequest
3 голосов
/ 08 октября 2009

Я только начинаю работать с CruiseControl.NET и nAnt и не совсем понимаю, как работает весь процесс. В настоящее время у нас есть большинство наших решений в Visual Source «Safe», и сервер сборки помечает каждый выпуск автоматически, используя файл AssemblyInfo.

Мы переносим наши проекты VSS в SVN и соответственно изменили файлы сборки проекта, чтобы проверить и обновить репозитории SVN. Чего мы хотим добиться, так это иметь копию исходного кода в системе контроля версий, которая точно соответствует версии развертываемого проекта.

Наш SVN настроен таким образом:

svn://solution/  
    TRUNK/
    RELEASES/
         1.0.0/
         1.2.0/
    BRANCHES/

Поэтому, когда мы принудительно собираем наше решение с его версией assemblyinfo равным 1.3.0, мы хотим, чтобы сервер сборки скопировал каталог TRUNK в каталог RELEASES / 1.3.0 /.

Команда SVN довольно проста. svn скопировать src / directory dst / directory. Но куда мне поместить эту команду и как получить номер версии для пункта назначения?

На сервере сборки это пример XML-файла:

    <sourcecontrol type="svn">
    <trunkUrl>svn://project/trunk</trunkUrl>
            <workingDirectory>D:\Builds\project\Src</workingDirectory>
            <executable>C:\Subversion\bin\svn.exe</executable>
    <username>sf_service_dev</username>
    <password>SFx4vi-r</password>
            <tagOnSuccess>true</tagOnSuccess>
    <cleanCopy>true</cleanCopy>
</sourcecontrol>

В файле проекта .build у нас есть это (и многое другое, конечно):

<target name="Deploy_Release">
     <property name="fileandpathformyfile" value="${CCNetWorkingDirectory}\Bin\project.exe"/>
  <echo message="fileandpathformyfile is ${fileandpathformyfile}."/>
  <property name="ReleaseNumber" value="${fileversioninfo::get-file-version(fileversioninfo::get-version-info(fileandpathformyfile))}"/>
  <echo message="ReleaseNumber has been detected to be ${ReleaseNumber}."/>

  <!--Use version as needed-->

  <!--Create the release direcory-->
  <mkdir dir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"/>
  <!--Copy stuff to the release directory-->
  <copy todir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}">
    <fileset basedir="${CCNetWorkingDirectory}\bin">
      <include name="*.dll" />
      <include name="*.exe" />
      <include name="*.config" />
      <include name="*.xml" />
      <include name="*.stp" />
    </fileset>
  </copy>
</target>

Теперь, если я хочу запустить команду SVN, чтобы скопировать $ {trunkURL} в $ {trunkURL} /../ release / $ {ReleaseNumber}, как бы я это сделал и в какой файл он попадет? Насколько я понимаю, нам нужно либо получить ReleaseNumber из файла .build, в файл .xml и запустить оттуда. Или нам нужно пройти через trunkURL из .XML в .build и запустить команду svn из файла .build.

Пожалуйста, помогите!

1 Ответ

5 голосов
/ 08 октября 2009

Один из вариантов - пометить (он же svn copy) при каждой успешной сборке.На самом деле для этого есть встроенная функциональность.

я вижу, что у вас <tagOnSuccess> включено true

, вам также следует установить <tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl> или <tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>

Проблема, с которой вы столкнулисьС этим может иметь дело каждая удачная сборка, будь то принудительная или непрерывная пометка.Я предполагаю, что вы не хотите копировать в Release каждую сборку.

Что вы можете сделать, это

  1. выполнить командный файл с помощью nAnt exec task
  2. написать оператор if, проверяющий %CCNetRequestSource% переменную окружения для ForceBuild
  3. выполнить команду svn командной строки (CCNetWorkingDirectory будет доступна как переменная окружения, возможно, вам придется передать в выпуске # какпараметр)

Можно также оформить nantcontrib, похоже, есть svn task

РЕДАКТИРОВАТЬ

Возможно, вы захотитечтобы посмотреть на CC.Net, управляющую вашей версией # через labeller и передающую ее nAnt через переменную окружения CCNetLabel.Из того, что я прочитал, вы, скорее всего, захотите File Labeller , потому что другие автоматически генерируют метку для вас, я лично использую итератор этикеток.

Преимущество использования ярлыка CC.Net для управления версиями заключается в том, что письма электронной почты сборки показывают правильную версию выпуска, и я считаю, что <tagOnSuccess> использует метку для имени каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...