프로젝트 간의 종속성에 대한 적절한 DAG (Direct Acyclical Graph)를 지원하는 CI 서버 (CruiseControl, Jenkins, Hudson, ...)가 있습니까? 즉, :CI 서버 (프로젝트 종속성 포함) DAG
공통 라이브러리 프로젝트 A, 둘 다 A를 사용하지만 서로 독립적 인 두 개의 유틸리티 라이브러리 프로젝트 B와 C와 B와 C를 모두 사용하는 프로그램 프로젝트 D가 있다고 가정합니다. CruiseControl에서. (현재 사용하고있는) rb라면 B는 A에 의존하고 C는 A에 의존하고 D는 B와 C 모두에 의존한다는 것을 명심하십시오.
누군가가 B 또는 C 중 하나를 커밋하면 CC가됩니다. rb는 그것을 빌드하고 예상대로 D를 빌드합니다. 그러나 누군가가 A로 커밋하면 CC.rb는 A를 빌드 한 다음 B와 C를 동시에 병렬로 빌드합니다. 그러나 B가 처음으로 완성된다고 가정하십시오. 이 시점에서 CC.rb는 열심히 가고 D를 시작합니다. D가 실패 할 확률이 높습니다. C가 완료되면 CC.rb가 완료되고 D를 두 번째 빌드합니다 (이는 빌드입니다. 우리는 실제로 원한다).
이 동작은 CC.rb에만 해당되는 것이 아니라는 점을 알고 있습니다. CI 서버가 한 번에 하나의 프로젝트에 대해서만 종속성을 고려한다면 고유 한 것처럼 보입니다. 내가 찾고있는 것은 CI 서버가 D가 B와 C 모두에 의존하고 B와 C가 같은 버전의 A로 빌딩을 완성 할 때까지 구축을 보류하고 있다고 생각하기에 충분히 똑똑하다. 또는 다른 말로하면 CI 서버 각 프로젝트가 하나의 make 액션 인 경우 "make -j"가 수행했던 것과 유사하게 작동합니다.
그런 짐승이 있습니까?