2014-11-26 4 views
1

Maven을 빌드 도구로 사용하고 Jenkins를 빌드 서버로 사용하고 있습니다. 나는 쉽게 개발하고 건설하도록 노력하고있다.스냅 샷에서 Maven과 jenkins로 출시하는 방법

나는 다음과 같습니다

글로벌 치어

<project> 
    <!-- ... --> 
    <artifactId>global-pom</artifactId> 
    <!-- ... --> 
</project> 

라이브러리 치어,이 일반적인 도서관의 부하가 (부모 치어는 글로벌이다)

<project> 
    <!-- ... --> 
    <version>2.0-SNAPSHOT</version> 
    <artifactId>libraries-pom</artifactId> 

    <parent> 
     <!-- ... --> 
     <artifactId>global-pom</artifactId> 
     <version>2.0-SNAPSHOT</version> 
    </parent> 

    <properties> 
     <libraries.version>2.0-SNAPSHOT</libraries.version> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <!-- ... --> 
       <artifactId>library-one</artifactId> 
       <version>${libraries.version}</version> 
      </dependency> 
      <dependency> 
       <!-- ... --> 
       <artifactId>library-two</artifactId> 
       <version>${libraries.version}</version> 
      </dependency> 
      <!-- ... --> 
     </dependencies> 
    </dependencyManagement> 

    <modules> 
     <module>library-one</module> 
     <module>library-two</module> 
     <!-- ... --> 
    </modules> 
</project> 

공통 라이브러리 (부모 pom은 Libraries 임) 전자이 :

<project> 
    <!-- ... --> 
    <version>2.0-SNAPSHOT</version> 
    <artifactId>library-one</artifactId> 

    <parent> 
     <!-- ... --> 
     <artifactId>libraries-pom</artifactId> 
     <version>2.0-SNAPSHOT</version> 
    </parent> 

    <!-- ... --> 
</project> 

그런 다음 서비스 치어과 같이 보일 수 있습니다 (부모 치어가 라이브러리입니다) : 나는 로컬 개발하고 때

<project> 
    <!-- ... --> 
    <version>1.0-SNAPSHOT</version> 
    <artifactId>service-one</artifactId> 

    <parent> 
     <!-- ... --> 
     <artifactId>libraries-pom</artifactId> 
     <version>2.0-SNAPSHOT</version> 
    </parent> 

    <!-- ... --> 
</project> 

지금이 잘하고 좋다. Intellij 프로젝트에서 이러한 모든 폼을 사용할 수 있습니다. 프로젝트 중 하나에서 사용할 라이브러리 중 하나를 변경하면 로컬로 빌드하고 실행할 때 라이브러리를 먼저 빌드하는 것이 좋습니다.

무언가가 체크인 될 때마다 SNAPSHOT 버전이 자동으로 Jenkins에 빌드됩니다.

실제로 출시 할 때 SNAPSHOT 버전을 사용하고 싶지 않지만 "실제"버전을 사용하고 싶습니다. 개발 또는 출시에 영향을 미치지 않도록 관리하는 것이 가장 좋습니다.

누구에게 아이디어가 있습니까? 이상적으로, 내가 공개하고 싶을 때, 나는 빌드 서버에 가서 빌드를 클릭하고 자동으로 모든것을 분류한다. 가능한가?

답변

0

일부 Maven 명령 줄 명령을 일괄 처리 모드로 실행하여 모든 아티팩트의 자동 릴리스를 수행하려면 Maven 릴리스 플러그인을 사용해야합니다.

는이를 위해 부모의 치어에 다음과 같은 구성을 포함한다 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <autoVersionSubmodules>true</autoVersionSubmodules> 
     <tagNameFormat>[email protected]{project.version}</tagNameFormat> 
     <goals>deploy</goals> 
    </configuration> 
</plugin> 

당신은 두 단계를 실행해야, 릴리스를 확인하려면. 먼저 mvn -B release:preparemvn -B release:perform.

Maven을 일괄 처리 모드 (-B)에서 실행하면이 단계에서 자동으로 릴리스, 태그, 원격 저장소에 배포 한 다음 pom에 지정해야하는 버전 제어 시스템 (git 가정)으로 변경 사항을 푸시합니다. . 단계는 당신이하고자하는 일을하는 경우

그러나, 테스트, 내가 먼저 플러그인에 몇 가지 추가 구성을 포함한 대화 형 모드 (-B 제외)에서 로컬로 실행 한 것입니다 :

<localCheckout>true</localCheckout> 
<pushChanges>false</pushChanges> 

이 것 git에 푸시를 방지합니다. 릴리즈에 뭔가 이상한 것이 있다면 mvn release:rollback을 실행하고 로컬에서 git repo를 정리 한 다음 릴리즈 플러그인 구성을 수정하면됩니다.

Jenkins에서 실행하려면 prepareperform 명령을 일괄 처리 모드로 실행하는 새 작업을 만들어야합니다.

관련 문제