2009-04-23 6 views
3

Ich versuche, ein gemeinsames Authentifizierungssystem auf einem Build-Server einzurichten. Wir mehrere Maven Projekte, die erklärt, wie die Bereitstellung sollten die verschiedenen Teams in Bezug auf durchgeführt werden, die wir haben (jedes Team seine eigene Authentifizierung Benutzer/Passwort hat):Maven Server-Authentifizierung als Profileigenschaften

<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>  

Dann erkläre ich in der settings.xml die Authentifikation zu den angegebenen Server, wie folgend:

<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> 

Schließlich abhängig von den Projekten möchte ich ich habe mehrere Profile in der settings.xml des Build-Server definiert implementieren:

<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> 
Ich habe einen Authentifizierungsfehler (HTTP 401) wie folgt

Das Problem ist, dass, wenn ein deploy des Projekts zu tun:

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

Wenn ich durch den Austausch der Eigenschaften mit dem Benutzer/Passwort, um die Server-Authentifizierung ändern von das Team, alles funktioniert gut.

Nicht die Tags <Server> <Server> Werte als Eigenschaften akzeptieren?

Wie richten andere ihr Build-System ein, um dasselbe zu erreichen?

Danke für Ihre Hilfe.

Edit: Ich benutze Hudson, eine Lösung für mich kann mehrere Male maven2 installieren und doppelte Einstellungen (außer Benutzer/Passwort) für jedes Team und binden jedes Projekt an die gute maven Installation. Ich muss zugeben, dass diese Lösung mich nicht verzaubert ...

Antwort

1

Die einfachste und direkteste Methode, wenn Sie mehrere Teams und damit mehr Authentifizierungsschemata haben, ist die Verwendung nur unterschiedliche ID im DistributionManagement. Statt Rep-Releases/Rep-Snapshots können Sie also team1-repo/team2-repo haben (es gibt normalerweise keinen Wert beim Trennen des Auth zwischen Release und Snapshots ... besonders wenn Sie einen repo manager mit guten Sicherheitskontrollen verwenden)

Dann definieren Sie in den Einstellungen Ihres Build-Rechners einfach einen Benutzer und ein Passwort für jedes Team für den Build-Server.

Dieser Ansatz hat einen Nachteil, dass es Vererbung verderben würde, wenn Sie die Repos in einem einzigen Unternehmen Pom definiert ... aber wenn Sie einen Team-Level Pom haben, wäre es einfach.

Ein anderer Gedanke ist, warum die gleiche Maschine sich als eine andere Person anmelden muss, wenn sie Builds macht?Sollte diese Maschine nicht in der Regel vollen Zugriff haben?

+0

Sie haben Recht, Brian, der einfachste Weg, um das zu erreichen, was wir wollen, ist wahrscheinlich, die vollen Rechte an die Build-Maschine zu geben, um zumindest alle Snapshots-Repos auszuliefern. Jedes Team behält seine eigenen Anmeldeinformationen, um die Releases zu erstellen. Ich denke, wir werden diesen Weg gehen. Vielen Dank. –

0

Zunächst einmal sehe ich nicht, wie das dep-team1-Profil mit dem Tag vertriebsManagement verbunden ist - es scheint, dass das Release-Profil aktiv sein muss.

Zweitens habe ich mein Profilelement ein bisschen anders strukturiert (siehe, es gibt keine DistributionManagement-Tag innerhalb). Nicht sicher, ob es den Unterschied macht .:

<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> 

Hier ist das Vertriebsmanagement:

<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. Wenn Sie maven nicht verwenden, um Ihr Projekt zu liefern, brauchen Sie natürlich kein distributionManagement-Tag. 2. Natürlich sind in meinem Auslieferungsprozess alle benötigten Profile aktiviert. –

+0

Ich benutze Maven, um mein Projekt zu liefern, und es funktioniert. Anfangs hatte ich den gleichen "Fehler bei der Bereitstellung von Artefakten" Fehler, aber dann habe ich es herausgefunden. Mein distributionManagement-Element ist kein Teil des Profils, sondern Teil des Projekts (was logischer ist, btw). –

+0

Wir haben Hunderte von Projekten in unserem Unternehmen, mit mehreren F & E werfen die Welt, so dass die Setups in Profilen erleichtern den Austausch zwischen den Teams. Aber all dies hilft bei einer korrekten Auflösung des Servers Login/Pass mit Eigenschaften. –