2015-04-21 5 views
1

Я использую CruiseControl.NET с git. У меня настроено два проекта, каждый для другого филиала в том же репозитории. Я сконфигурировал интервалTrigger для buildCondition = «IfModificationExists» для каждого проекта. Проблема в том, что сборка выполняется для обоих проектов всякий раз, когда есть изменение на любом филиале в репозитории, а не только на ветке, настроенной для проекта.В CruiseControl.NET, когда сборка buildCondition = «IfModificationExists» запускается путем изменения в любой ветви, а не изменения настроенной ветки

В частности, я сконфигурировал два проекта CCNet, ProductionCI и ReleaseCandidateCI для соответствующих филиалов Production and ReleaseCandidate. Когда я объединяю изменения в ветку ReleaseCandidate, проект ReleaseCandidateCI создается, как ожидалось. Тем не менее, проект ProductCI тоже, хотя ничто не изменилось на производственной отрасли.

Это в основном просто раздражение, потому что каждый проект выполняется каждый раз, когда он требуется. Они просто исполняются, когда это не полезно.

Вот моя конфигурация:

Файл trigger.xml

<cb:config-template xmlns:cb="urn:ccnet.config.builder"> 
    <triggers> 
     <intervalTrigger 
      name="continuous" 
      seconds="600" 
      buildCondition="IfModificationExists" 
      initialSeconds="5"/> 
     </triggers> 
</cb:config-template> 

ccnet.config Файл

<project> 
    <name>ProductionCI</name> 
    ... 
    <cb:include href="trigger.xml" xmlns:cb="urn:ccnet.config.builder"/> 
    ... 
    <sourcecontrol type="multi"> 
     <sourceControls> 
      <git> 
       <repository>[url to repo]</repository> 
        <branch>Production</branch> 
        <workingDirectory>[path to directory]</workingDirectory> 
        <autoGetSource>true</autoGetSource> 
      </git> 
     </sourceControls> 
    </sourcecontrol>  
    ... 
</project> 
<project> 
    <name>ReleaseCandidateCI</name> 
    ... 
    <cb:include href="trigger.xml" xmlns:cb="urn:ccnet.config.builder"/> 
    ... 
    <sourcecontrol type="multi"> 
     <sourceControls> 
      <git> 
       <repository>[url to repo]</repository> 
       <branch>ReleaseCandidate</branch> 
       <workingDirectory>[path to directory]</workingDirectory> 
       <autoGetSource>true</autoGetSource> 
      </git> 
     </sourceControls> 
    </sourcecontrol>  
    ... 
</project> 

Примечание: Я знаю, что использование отдельных хранилищ вместо ветви будут решать эту проблему, но это не вариант.

Заранее за вашу помощь.

+0

Что делать, если вы совместили работу сборки ваших филиалов в рамках одного проекта, и заменить '' 'с два ' блоки? –

+0

Спасибо за комментарий. Установка типа sourcecontrol = "git" приводит к сбою притяжения. Я столкнулся с этим, когда я изначально задал проекты. Согласно документации, он должен быть установлен в «multi» http://cruisecontrolnet.org/projects/ccnet/wiki/Multi_Source_Control. И объединение проектов сборки не будет делать то, что я хочу, которое строится только на ветке Production или ReleaseCandidate, если они были изменены. –

+0

Какая версия CC.NEt вы используете? – TridenT

ответ

0

Вы должны выяснить, почему блок управления источником git не работает.
Этот стандартный блок работает для меня.

Вы уверены, что используете путь к удаленному репозиторию? Не используйте локальный путь из проверки, которую вы готовите на предыдущем шаге (я не думаю, что вы это сделали, но я предпочитаю быть здесь ясным).

<sourcecontrol type="git"> 
    <repository>git://github.com/rails/rails.git</repository> 
    <branch>ReleaseCandidate</branch> 
    <workingDirectory>[path to repository]</workingDirectory> 
</sourcecontrol> 
+0

У меня нет проблем, тянущихся от git. У меня есть текущая версия CCNet, настроенная в соответствии с их документацией, и она вытягивается из правильной ветки. Проблема в том, что условие сборки IfModicationExists вызывает сборку, когда есть изменения, совершенные в любой ветви, а не только изменения в ветке, которые настроены в блоке управления источником. –

+0

В панели инструментов CC.NET просмотрите ссылку * View Build Log * и просмотрите часть '', чтобы проверить значение 'CCNetBuildCondition'. Это ForcedBuild или IfModificationExists? – TridenT

+0

IfModificationExists –