2012-01-19 4 views
20

나는 최상위 레벨의 maven 프로젝트를 포함하고있는 Git 저장소를 가지고있다. (각각은 자신의 서브 디렉토리에 pom.xml로있다.) 여기서 최상위 수준은이 프로젝트가 저장소 루트 바로 아래의 하위 디렉토리에 있음을 의미합니다. 이 모든 프로젝트는 동일한 Git 저장소에 남아 있어야합니다.Jenkins : git 저장소에서 최상위 프로젝트를 여러 개 만드는 방법은 무엇입니까?

repo 
+--- projectA 
    +--- pom.xml 

+--- projectB 
    +--- pom.xml 

이들은 독립적 인 젠킨스 작업으로 만들거나 할 수 있습니다. 그래서 우리는 projectA와 projectB를위한 직업을 가지고 있습니다.

이전에는 Subversion을 사용하여 프로젝트 소스 만 체크 아웃하고 pom.xml에서 Maven 빌드를 실행하는 Jenkins 작업 (각 프로젝트마다)을 설정할 수있었습니다.

Git 모델 (아마도 모든 DVCS와 동일 함)이 변경되어 모범 사례가 확실하지 않습니다. 내가보고있는 것도에서 내가 정말 좋아하는 몇 가지 옵션이 있습니다 :

  1. 각 젠킨스 작업을 복제하는 configured이다가/전체 망할 놈의 repo를 끌어 는 메이븐 빌드의 /pom.xml을 의미합니다. 따라서 작업 에는 모든 코드가 있지만 슬라이스 만 빌드됩니다.
  2. 는 힘내 하는 것 (http://book.git-scm.com/5_submodules.html)를 처리 할 수 ​​까다로운 비트 수 (쉽게 깰 수)
  3. 가 (프로젝트가 모두 포함 게이터) 각 프로젝트 빌드 트리거 프로젝트 받는다는 부모 만들기 (갖는 서브 모듈을 제공합니다 단일 젠킨스 직업). 이 pom.xml에는 projectA 및 projectB의 요소가 포함되어 있습니다.

더 많은 유용한 접근 방식이 있습니다 (일반적인 설정). 당신의 경험은 무엇입니까? 모범 사례?

+0

Subversion과 비교했을 때, Git이 repo의 하위 프로젝트를 체크 아웃 할 능력이없는 martin.ahrer와 매우 동의합니다. 이는 제한적인 요소입니다. 나는이 질문에 대한 멋진 대답이 될 것이다. – djangofan

답변

4

여기 곡물에 맞서고 있다고 생각합니다. 이러한 프로젝트가 버전 단위로 배포되면 실제로 부모 POM을 만들어야합니다. 하지만 당신은 아마 단 하나의 CI 작업을해야합니다. 해당 빌드를 신속하게 진행하려면 마지막 빌드 이후 변경된 모듈 만 빌드하도록 구성 할 수 있습니다 (빌드 섹션의 고급 버튼 - "증분 빌드 - 변경된 모듈 만 빌드"). 동시에 여러 커밋을 테스트하기 위해 Jenkins에게 "필요한 경우 동시 빌드 실행"이라고 말할 수도 있습니다.

하지만 왜 여러 CI 작업을 원한다고 생각하는지 궁금합니다. 이 두 프로젝트가 서로 다른 라이프 사이클을 가지고 있다고 인식한다면 아마도 버전을 따로 따로 만들어야 할 것이므로 별도의 git 리포지토리에 있어야합니다. git 저장소를 보존하지 마십시오. 값이 쌉니다. 사실, 거의 모든 경우에 더 행복합니다.

일반적으로 주어진 pom이 하나의 이슈를 생성하기를 원합니다. Aggregator Poms는 큰 이슈의 일부를 하위 모듈로 분할하는 데 유용하지만 하위 모듈이 단독으로 해제되지 않는 경우에만 유용합니다.

0

자신을 반복하지 않는 것이 좋습니다. 그러므로 슈퍼 POM을 갖는 것이 그 입장에서 좋은 것입니다.

아마도 옵션 1로 이동하십시오. 디스크 공간은 일반적으로 저렴합니다.

그러나 3을 사용하면 Jenkins를 다시 설정하지 않고도 새 시스템에 쉽게 배포 할 수 있습니다.

1

@recampbell, 나는 동일한 문제가 있습니다. 우리는 하나의 Hg 저장소에 여러 가지 상호 연관된 프로젝트를 가지고 있습니다.

우리가 정확히 어떤 버전 (hg 버전 번호)을 알고 있는지 그 방법으로 서로 컴파일합니다. 내가 정확하게 말할 때, 나는 그것이 동일하다는 것을 확인할 수 있다는 것을 의미한다.

릴리스 번호 사용은 너무 거칠다. 예를 들어 오늘은 hg 버전 3367에서만 재현 가능한 버그를 발견했지만 hg 버전 3368에서는 그렇지 않습니다. 여러 Hg repos를 사용하면 재현 할 수 없었을 것입니다. 매일 프로젝트마다 여러 커밋이 있기 때문에 각 개별 프로젝트의 버전이 정확히 사용되었는지 확인하기가 불가능하며, 단지 hg 버전 만 사용하면됩니다 (bisect를 사용하여 버그를 찾음).

우리는 서브 프로젝트 중 하나에서 클라이언트 데이터베이스 드라이버 버전을 변경했고 NPE를 사용하여 자동화 된 DAO 생성을 실패하게 만들었다. 드라이버는 물론 우리가 쓰지 않는 릴리스 버전이라면 단순히 벤더가 제공 한 버전을 사용합니다. 며칠간 디버깅을 하긴했지만 Jenkins를 사용하여 매시간을 빌드 했으므로 검색에 10 ~ 20 개의 커밋이 있었고 3 ~ 4 개만 DAO 생성기를 건드렸으므로 쉬운 작업이었습니다.

우리가 여러 다른 dao-generator-3.1.2.jar를 갖기 때문에 모든 프로젝트의 혼합 버전을 사용하면 후면 후면의 아픔이 줄어 듭니다. 매번 커밋 한 후에 버전 번호를 바꾸기를 기대하거나 Jenkins/maven /에 어떤 설정이 있다면 자동으로 그렇게 할 것인가?

관련 문제