2009-04-23 8 views
3

빌드 서버에 공유 인증 시스템을 설정하려고합니다. 그런 다음프로필 속성으로 Maven 서버 인증

<profile> 
    <id>release-profile</id> 
    <distributionManagement> 
    <repository> 
     <id>rep-releases</id> 
     <name>rep-releases</name> 
     <url>http://somewhere-releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>rep-snapshots</id> 
     <name>rep-snapshots</name> 
     <url>http://somewhere-snapshots</url> 
    </snapshotRepository> 
    </distributionManagement> 
</profile>  

내가 Settings.XML의위한 인증에 선언 우리는 여러 받는다는 프로젝트를 전개는 우리가 (각 팀은 자체 인증 사용자/암호가) 한 다른 팀에 대한 수행 방법을 선언합니다 다음과 같이 선언 된 서버 :

<profile> 
    <id>dep-team1</id> 
    <activation> 
    <activeByDefault>false</activeByDefault> 
    </activation> 
    <properties> 
    <release.user.name>team1-user</release.user.name> 
    <release.user.password>team1-password</release.user.password> 
    </properties> 
</profile> 
:

<servers> 
    <server> 
    <id>rep-releases</id> 
    <username>${release.user.name}</username> 
    <password>${release.user.password}</password> 
    </server>  
    <server> 
    <id>rep-snapshots</id> 
    <username>${release.user.name}</username> 
    <password>${release.user.password}</password> 
    </server>  
</servers> 

마지막으로, 프로젝트에 따라 나는 여러 프로필을 빌드 서버의 Settings.XML의에서 정의한 배포 할 내가의 사용자/암호를 사용하여 속성을 대체하여 서버 인증을 수정하는 경우

Error deploying artifact: Failed to transfer file: http://......./my-project-0.2-20090423.123247-3.pom. Return code is: 401 

:

문제는 프로젝트의 배포를 수행 할 때 나는 다음과 같은 인증 오류 (HTTP 401)를 가지고 있다는 것입니다 팀, 모두 잘 작동합니다.

태그가 없습니다. < 서버 > < 서버 >은 값을 속성으로 사용할 수 있습니까?

다른 사람들이 어떻게 동일한 빌드 시스템을 설정합니까?

도움 주셔서 감사합니다.

편집 : 나는 허드슨을 사용하고, 저를위한 솔루션은 몇 시간 maven2를 설치하고 (사용자/암호 제외) 설정을 복제 한 각 팀과 좋은 받는다는 설치에 각 프로젝트를 묶을 수 있습니다. 나는이 솔루션이 나를 매혹하지 않는다는 것을 인정해야한다. ...

답변

1

여러 팀 따라서 여러 인증 제도가있는 경우 가장 쉽고 가장 직접적인 방법, 단지를 사용한다 : 그것은 차이 : 여기

<profile> 
    <id>release-profile</id> 
    <repositories> 
    <repository> 
     <id>central</id> 
     <url>http://central</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>true</enabled></snapshots> 
    </repository> 
    </repositories> 
</profile> 

는 유통 관리입니다 만드는 경우 확실하지 않음 distributionManagement의 다른 ID입니다. 따라서 rep-releases/rep-snapshots 대신 team1-repo/team2-repo를 사용할 수 있습니다 (일반적으로 릴리스와 스냅 샷간에 인증을 분리 할 가치가 없습니다 ... 특히 repo manager에 양호한 보안 컨트롤이있는 경우)

그런 다음 빌드 시스템의 설정에서 빌드 서버의 각 팀에 대한 사용자 및 비밀번호를 정의하십시오.

이 접근법은 한 기업의 pom에 repos를 정의하면 상속을 망칠 수 있다는 단점이 있습니다. 그러나 팀 수준의 pom이 있으면 쉽게 될 수 있습니다.

또 다른 생각은 빌드를 수행 할 때 동일한 빌드 시스템이 다른 사람으로 로그인해야하는 이유입니다.빌드 머신이 대부분 전체 액세스 권한을 가지고 있어야합니까?

+0

맞습니다. Brian, 우리가 원하는 것을 성취하는 가장 쉬운 방법은 최소한 모든 스냅 샷 repos에 제공하기 위해 빌드 머신에 완전한 권한을 부여하는 것입니다. 각 팀은 릴리스를 만들기 위해 자신의 자격 증명을 유지합니다. 나는 우리가이 길로 갈 것이라고 생각한다. 감사. –

0

우선 dep-team1 프로필이 distributionManagement 태그에 어떻게 연결되어 있는지 보지 못한다. - 활성화하려면 release-profile이 필요해 보인다.

두 번째로 프로필 요소를 조금 다르게 구조화했습니다 (내부에 distributionManagement 태그가 없음).

<project> 
    <distributionManagement> 

    <repository> 
     <id>releases</id> 
     <url>http://myurl/releases</url> 
    </repository> 

    <snapshotRepository> 
     <id>snapshots</id> 
     <url>http://myurl/snapshots</url> 
    </snapshotRepository> 

    </distributionManagement> 
</project> 
+0

1. maven을 사용하여 프로젝트를 전달하는 경우에는 distributionManagement 태그가 필요하지 않습니다. 2. 배송 과정에서 필요한 모든 프로필이 활성화됩니다. –

+0

저는 프로젝트를 제공하기 위해 maven을 사용합니다. 처음에는 동일한 "오류 배포 아티팩트"오류가 있었지만 그때 알아 냈습니다. 내 distributionManagement 요소는 프로필의 일부가 아니라 프로젝트의 일부입니다 (더 논리적 인, btw입니다). –

+0

우리 회사에는 수 백 개의 프로젝트가 있으며, 여러 R & D 팀이 세계를 던져 프로파일의 설정을 통해 팀 간 공유를 용이하게합니다. 그러나이 모든 것은 서버 로그인/특성 전달을 올바르게 해석하는 데 도움이됩니다. –