2009-11-05 11 views
8

na przykład:Jak skonfigurować CruiseControl.net do tworzenia współzależnych projektów?

chcę zbudować projektu A. project Zależy Projektu B i C projektu

Edit: Każdy projekt ma swój kufer w SVN: [repozytorium]/Projecta/trunk [repozytorium]/ProjectB/trunk [repozytorium]/ProjectC/trunk

Moje pytanie ma kilka części:

  1. Jakie jest podejście/konfiguracja CCNET, aby osiągnąć tę "zależną" kompilację?
  2. Jak skonfigurować projekty tak, aby projekt B lub C został zbudowany, a następnie uruchamia kompilację projektu A?
  3. Kiedy każdy projekt otrzymuje zależności, jakie jest skalowalne podejście/konfiguracja, aby skalować proces budowania?

Jestem początkującym użytkownikiem CCNET, więc jeśli istnieją pewne podstawowe pojęcia, proszę nie zakładać, że je znam. Szczegóły są moim przyjacielem :-D

Edytuj: Używam SVN jako dostawcy kontroli źródła.

+1

Czy możesz dodać więcej szczegółów na temat struktury subversion dla tych projektów? Czy wszystkie projekty znajdują się w jednym miejscu lub są inne repozytoria? –

+0

Dzięki Jason za pytanie, zobacz pierwszą zmianę w pytaniu. – Achilles

+0

http://confluence.public.thoughtworks.org/display/CCNET/Project+Trigger – Achilles

Odpowiedz

10

Można użyć Project Trigger zacząć Projecta gdy ProjectB powodzeniem zbudowany tak:

<project name="ProjectA"> 
    <triggers> 
     <projectTrigger project="ProjectB"> 
      <triggerStatus>Success</triggerStatus> 
      <innerTrigger type="intervalTrigger" 
          seconds="60" 
          buildCondition="ForceBuild" /> 
     </projectTrigger> 
    </triggers> 
    ... 
</project> 

This ankiety wynika build dla ProjectB co 60 sekund, a jeśli nie jest to nowa udany build następnie Projecta jest rozsierdzony. Domyślnie będzie szukał projektu na tym samym serwerze CCNET, ale możesz go wskazać na inny z atrybutem serverUri. Możesz dodać kolejny wyzwalacz dla ProjectA, jeśli chcesz go także skompilować, gdy jego repozytorium Subversion zostanie zaktualizowane.

Jeśli używasz kompilacji na tym samym serwerze, możesz umieścić je w tej samej kolejce, jeśli mogą w jakikolwiek sposób ingerować w siebie nawzajem, w przeciwnym razie możesz je jednocześnie budować w tym samym czasie.

+0

To wydaje się być dokładnie tym, czego potrzebowałem. Odłożę słuchawkę i zobaczę, jak to działa. – Achilles

3

Mam zainstalowany system składający się z około 20 rozwiązań i może 100 projektów przy użyciu skryptów NAnt z CCNet jako silnikiem kompilacji. Aby obsłużyć zależności między rozwiązaniami, użyłem narzędzia Java Ivy.

Ivy wykorzystuje zależności binarne, w których zależność jest kwalifikowana za pomocą informacji o wersji. Dane wyjściowe kompilacji są przechowywane w repozytorium binarnym, tj. Systemie plików lub nawet w subwersji. Podczas kompilacji zależności binarnych są pobierane do systemu plików.

To podejście sprawdza się w przypadku projektów, w których występują stosunkowo luźne połączone moduły (reprezentowane przez rozwiązanie MS), które ewoluują stosunkowo niezależnie od siebie. W przypadku konfiguracji takiej jak twoja, gdzie masz osobny bagażnik dla każdego projektu/rozwiązania, projekty/rozwiązania naprawdę muszą być luźno połączone, inaczej będziesz robił strasznie dużo tagowania i rozgałęziania, gdy system staje się większy.

Jeśli potrzebujesz bardziej ścisłego połączenia między Twoimi projektami, poleciłbym przenieść je do tego samego pnia.

Uwaga: Ivy musi być wywoływane jako plik wykonywalny wiersza poleceń i nie można uzyskać ładnej integracji Java Ant.

+0

Przeniesienie projektów do tego samego pnia byłoby idealne, ale chcę, aby ich elastyczność była luźno zorganizowana w repozytorium. Czy w trakcie procesu budowania zakładam, że budowanie struktury katalogów rozwiązania w katalogu roboczym umożliwiłoby kompilowanie projektów razem? – Achilles

Powiązane problemy