2011-08-05 5 views
30

우리는 maven을 사용하고 있습니다. 인프라를 설정하여 자동으로 생성 된 아티팩트가 Nexus 리포지토리에 저장되도록합니다. 그리고 그들은 개발자들에 의해 사용될 수 있습니다.Maven, Jenkins, Nexus와의 인프라

저는 이미 우리 프로젝트에 대해 1 개의 직업으로 젠킨스를 설립했습니다. 그리고 동일한 서버에 Nexus를 설정했습니다.

개발자의 PC에서 기본 maven 설정을 C : \ Users {user} .m2 \ settings.xml 에 복사했습니다. 참고 :

Configuring Maven to Use a Single Nexus

Maven Settings Reference

<mirror> 
    <!--This sends everything else to /public --> 
    <id>nexus</id> 
    <mirrorOf>*</mirrorOf> 
    <url>http://myserver:8081/nexus/content/groups/public</url> 
</mirror> 

(난 그냥 Repository Management with Nexus 책을 따라)

해야한다 나의 다음 단계는 무엇인가? Jenkins 직무가 mvn install일까요? 회사 이슈의 Nexus 저장소를 만드는 방법은 무엇인가요?

답변

16

Nexus에 아티팩트를 배포하려면 distributionManagement section을 포함시켜야합니다. Nexus는 특정 저장소가 이미 스냅 샷과 릴리스에 모두 설치되어 제공됩니다. maven이 스냅 샷을 배포하고 아티팩트를 올바른 저장소에 릴리스 할 수 있도록 각각에 올바른 경로를 제공해야합니다. 그러면 일반적으로 mvn deploy 또는 maven release plugin을 사용하여 이슈를 배포 할 때마다 아티팩트가 배포됩니다. Nexus는 기본적으로 쓰기 인증을 사용하므로 올바른 자격증 명으로 server section을 아티팩트를 배포 할 모든 사용자의 settings.xml에 추가해야합니다. 젠킨스 (Jenkins)는 다른 사용자들처럼 대접받을 수 있습니다. 빌드로 deploy을 사용하면 모든 빌드가 Nexus에 배포됩니다. Jenkins 작업에서 나중에이 작업을 수행하기 위해 이슈를 배치하기위한 사후 구축 조치도 있습니다.

+0

이 작동하지만에 대한 젠킨스 프로젝트 받는다는 명령 줄과의 저장소 인증

-Dusername=<> -Dpassword=<> 

사용, 그것은 당신의 유물 저장소의 위치를 ​​알 수있는 프로젝트를 강제로. Jenkins가 이슈 배포를 독점적으로 처리하게하려면 [이 대답] (http://stackoverflow.com/a/11952832/235179)을보십시오. –

12

갱신 후 pom.xml

<distributionManagement> 
    ... 
    <repository> 
     <id>deploymentRepo</id> 
     <name>Internal Releases</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases</url> 
    </repository> 
    ... 
    </distributionManagement> 

받는다는 ~/.m2/settings.xml 추가에 대한

<server> 
    <id>deploymentRepo</id> 
    <username>deployment</username> 
    <password>deployment123</password> 
</server> 

다음 mvn deploy

그럼 어떤에 배치 된 아티팩트를 사용할 수있다 (이것은 넥서스의 기본 배포 사용자입니다) 프로젝트, 표준 아티팩트와 마찬가지로. 이 경우 는

<!-- company repositories --> 
    <repository> 
     <id>deploymentRepoReleases</id> 
     <name>Releases (Nexus)</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases/</url> 
    </repository> 
    <repository> 
     <id>deploymentRepoSnapshots</id> 
     <name>Snapshots (Nexus)</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/snapshots/</url> 
    </repository> 

UPDATE를 pom.xml 파일에 추가 : 나중에 우리는 멀리 스냅 샷 저장소에서 가서에만 릴리스 유형의 저장소를 필요로 maven-release-plugin를 사용했다.

16

내 프로젝트 pom.xml을 변경할 필요가 없습니다. 대신, jenkins "Post-Build Actions"에서 "Maven 저장소에 아티팩트 배포"를 선택한 다음 "Advanced"를 선택하고 리포지토리 URL을 http://nexusserver:8081/nexus/content/repositories/releases으로 설정하고 리포지토리 ID를 deploymentRepo으로 설정했습니다.이것은 젠킨스의 질문 메이븐 질문이 아닌 경우 젠킨스 시스템에서 ~/.m2/settings.xml에서

내가

<settings> 
    <servers> 
    <server> 
     <id>deploymentRepo</id> 
     <username>deployment</username> 
     <password>deployment123</password> 
    </server> 
    </servers> 
    ... 

</settings> 
+0

릴리스 저장소에 대한 Nexus 기본 설정은 1 버전 만 배포 할 수 있도록 허용하는 것입니다. 출시 전용 (즉, Nexus에 배포)에 2 번째 직업이 있습니까? –

+1

@PaulVerest 쉘을 실행하기 위해 Pre Step을 추가하고'mvn versions : set -DnewVersion = 1.. $ {BUILD_NUMBER} versions : commit'을 실행하여 빌드 번호 다음에 버전을 명명 할 수 있습니다. 그런 다음이 빌드 이후 작업이 발생하면 해당 버전으로 배포합니다. –

+0

@JoshJohnson 이것은 Steve Brown의 대답입니다. 개인적으로 maven-release-plugin을 사용하고 version-maven-plugin (버전 : 집합)을 사용하지 말 것을 권장합니다. –

1

을 추가, 나는 붙박이 젠킨스는 "메이븐 저장소에 유물을 배포"사용하는 것이 좋습니다 것 포스트 액션을 구축 대부분의 경우. 내 의견

장점 :

  • 더 많은 휴대용 (우리는 수명주기의 각 단계에 대해 서로 다른 저장소를 사용), 각 젠킨스 인스턴스가 젠킨스 작업을 읽는 사람에게
  • 더 명백한 그것의 자신의 저장소를 알고 받는다는 출시 - 플러그인 받는다는 목표 인수를 다음을 수행 가지
1

의 젠킨스 방법과 일치

  • 더는 nexu을 전달하는 데 사용할 수 있습니다 넥서스 REPO 인증