2011-09-30 4 views
1

다중 상호 의존 모듈을 가진 Maven 프로젝트를 생각해 봅시다 : war 모듈 Z에 대한 종속성 인 3 개의 jar 모듈 A, B 및 C를 가정 해 봅시다. 이러한 모듈 각각에 대해 별도의 허드슨 빌드가 필요하므로 변경된 모듈 만 다시 빌드됩니다.Hudson에게 하나의 커밋으로 변경된 여러 모듈을 올바르게 빌드하는 방법

내 문제는 모듈 A와 모듈 Z를 모두 변경하는 변경 집합을 커밋하면 A가 완료되기 전에 Z가 빌드되고 완료된 후 A가 완료되고 이제 전달되는 Z의 다시 작성을 트리거한다는 것입니다. "실제"오류보다는 빌드 순서와 관련하여 빌드가 정기적으로 실패하도록 허용하면 실제 오류가 발생하지 않게됩니다. 우리는 그것이 결국 뒤집을 것이라고 가정하는 데 익숙해 져 있기 때문에 합법적으로 부러진 빌드를 무시하게됩니다.

저는 조용한 기간을 사용하여 업스트림 빌드가 실행될 때 차단하는 등의 작업을 관리했습니다.하지만 실제로는 빌드에 많은 시간이 걸리는 예제보다 빌드가 더 많습니다. 테스트. 나는 또한 빈번한 커밋을하는 근면 한 개발자들의 작은 무리가있다.

이것은 나의 jar 모듈이 계속해서 빌드되고 있음을 의미하며, war 모듈을 빌드 할 때 틈새를 거의 남기지 않습니다. 그래서 전쟁은 자주 일어나지 않습니다. 즉, 전쟁이 언제 깨 졌는지 알아내는 데 오랜 시간이 걸리며, 어떤 변화가 그것을 어겼는지 확인하는 데 더 오래 걸립니다.

또한 빌드의 지속적인 실행은 jar A와 B에 접촉하는 변경 사항을 커밋하면 war 파일 Z가 jar A (빠르게 빌드 됨)에 대해 한 번 빌드 된 다음 jar B 시간이 오래 걸린다. 이것은 주어진 커밋의 결과를 이해하기 어렵게 만든다.

나는 조인 플러그인을 사용하는 것을 고려해 봤지만, 모든 모듈을 매번 빌드해야하는 것처럼 보입니다. 실제로는 꽤 많은 jar 모듈을 가지고 있기 때문에 항상 모든 것을 빌드해야하는 것은 아니기 때문에 주어진 커밋에 맞게 변경된 모듈 만 빌드하려고합니다.

더 좋은 방법이 있습니까?

감사

+0

재미있는 질문입니다. 그러나 해결하기 어려울 것입니다. – Spedge

답변

0

우리가 지금보고있는 접근 방식은 모듈을 작업에 일대일로 매핑하는 대신 일부 Maven 모듈을 단일 Hudson 작업으로 결합하는 것입니다.

특히 전쟁 모듈의 종속성이 상당히 작고 스스로 구축하기가 쉽다면 전쟁과 동일한 작업에서 빌드하면 단일 커밋의 모든 코드가 적어도 주어진 코드에 대해 함께 빌드되도록 보장합니다 전쟁 파일.

이 중복 될 않습니다 - 우리가 같은 병을 사용하여 여러 전쟁 파일을 가지고 있기 때문에 단지는 본질적으로 대신 한 번만보다, 모든 전쟁을 다시 작성됩니다. 그러나 실제로는 항아리가 빨리 만들어지기 때문에 전쟁 파일을 개념적으로보다 깨끗하게 만듭니다. 결합 된 항아리 + 전쟁 작업 후 꽤 긴 것 때문에 단지 오래 피드백이 단지 내에서 문제 루프를 우리에게 제공, 구축 렸어요 및 테스트 경우

이 덜 매력적이 될 것입니다. 균형을 올바르게 얻는 것이 중요합니다.

제 테이크 어웨이 : 모듈 당 하나의 허드슨/젠킨스 직업이 최선의 방법이라고 가정하지 말고, 여러 코드에서 동일한 코드를 재구성하는 것을 두려워하지 마십시오.

0

이 항상 어려운 문제 (그리고 내가 한 번 이상이 답변을 작성 다시 한!) 기술 솔루션의 측면에서

, 당신은 빌드를 기다립니다 뭔가를 원하는 여러 다른 작업이 실행되기 전에 실행 중이 아님을 나타냅니다. 정량화가 어렵다면 설치하기가 어려울 것입니다. 나는이 스레드에서 기술적 인 솔루션이 무엇인지 제안하는 것에 매우 관심을 가질 것이다.

나는 당신의 직업이 왜, 그리고 얼마나 자주 운영되고 있는지보아야 할 것 같다. WAR에서 유닛 테스트가 필요한 코드가 있다면, 자신의 모듈로 옮길 수 있습니까? 그렇게하면 전쟁을 사용하여 매시간/30 분마다 통합 테스트 만 실행할 수 있으며 개별 모듈이있는 위치와 시간은 걱정하지 않아도됩니다.

모듈에 포함 된 것을 살펴볼 수도 있습니다. 그들은 모두 모듈이어야합니까? 조각화를 줄일 수 있습니까? 일정 계획의 복잡성을 줄이는 데 도움이 될 수 있습니다.

가능한 한 빨리 많은 테스트를 받으려는 노력을 이해하고 찬사를 보냅니다.하지만 때때로 연기 테스트는 일정한 코드 변경이 있으면 할 수 있습니다.

+0

우리가 가진 테스트의 양은 과도하다고 생각하지 않습니다. 문제는 모든 테스트를 실행하는 데 시간이 부족하지 않습니다. 올바른 버전이 함께 구성되도록 종속성을 조정하는 것이 더 중요합니다. 나는 당신이 우리가 사물의 구조를 다시 생각할 필요가 있다고 확신합니다. 그러나 Maven 모듈을 Hudson 프로젝트에 일대일로 매핑하는 것이 올바른지 여부는 질문하는 것이 좋습니다. – Kief

+0

현명한 아이디어처럼 보입니다. :) – Spedge

관련 문제