2009-04-23 5 views
3

J'essaye de configurer un système d'authentification partagé sur un serveur de construction. Nous avons plusieurs projets de Maven qui déclare comment le déploiement doit se faire en ce qui concerne les différentes équipes que nous avons (chaque équipe a son propre utilisateur d'authentification/mot de passe):Authentification du serveur Maven en tant que propriétés de profil

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

Je déclare dans le settings.xml l'authentification aux serveurs déclarés comme suit:

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

Enfin, en fonction des projets que je veux déployer J'ai plusieurs profils définis dans le settings.xml du serveur de build:

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

Le problème est que lorsque vous faites un deploy du projet, je suis une erreur d'authentification (HTTP 401) comme ce qui suit:

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

Si je modifie l'authentification du serveur en remplaçant les propriétés avec l'utilisateur/mot de passe l'équipe, tout fonctionne bien.

Ne pas les balises <serveurs> <serveur> accepter les valeurs en tant que propriétés?

Comment les autres installent-ils leur système de construction pour atteindre le même résultat?

Merci pour votre aide.

Edit: J'utilise hudson, une solution pour moi peut être d'installer plusieurs maven2 de temps et ont des paramètres dupliqués (sauf l'utilisateur/mot de passe) pour chaque équipe et attacher chaque projet à la bonne installation de Maven. Je dois admettre que cette solution ne m'enchante pas ...

Répondre

1

La méthode la plus simple et la plus directe si vous avez plusieurs équipes et donc plusieurs régimes auth, est d'utiliser seulement ID différent dans la distributionManagement. Ainsi, au lieu de rep-releases/rep-snapshots, vous pouvez avoir team1-repo/team2-repo (il n'y a généralement aucune valeur pour séparer l'auth entre release et snapshots ... particulièrement si vous utilisez un repo manager avec de bons contrôles de sécurité)

Ensuite, dans les paramètres de votre machine de construction, définissez simplement un utilisateur et un mot de passe pour chaque équipe pour le serveur de génération.

Cette approche a un inconvénient: elle gâcherait l'héritage si vous définissiez les repos dans un seul pom ... mais si vous avez un pom au niveau de l'équipe, ce serait facile.

Une autre idée est pourquoi la même machine de construction doit-elle se connecter en tant que personne différente lors des builds?Cette machine de construction ne devrait-elle pas avoir un accès complet?

+0

Vous avez raison Brian, le moyen le plus simple d'obtenir ce que nous voulons est probablement de donner au moins tous les droits à la machine de construction pour livrer tous les dépôts de snapshots. Chaque équipe garde ses propres informations d'identification pour effectuer les sorties. Je pense que nous irons dans cette direction. Merci. –

0

Tout d'abord, je ne vois pas comment le profil dep-team1 est connecté à la balise distributionManagement - il semble que le release-profile soit actif. Deuxièmement, j'ai mon élément de profil structuré un peu différemment (voir, il n'y a pas de balise distributionManagement à l'intérieur). Je ne sais pas si elle fait la différence .:

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

Voici la gestion de la distribution:

<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. Si vous n'utilisez pas maven pour livrer votre projet, bien sûr, vous n'avez besoin d'aucune balise distributionManagement. 2. Bien sûr, dans mon processus de livraison, tous les profils requis sont activés. –

+0

J'utilise maven pour livrer mon projet et ça fonctionne. Au départ, j'avais la même erreur "erreur de déploiement d'artefacts", mais ensuite je l'ai compris. Mon élément distributionManagement ne fait pas partie du profil, mais fait plutôt partie du projet (ce qui est plus logique, btw). –

+0

Nous avons des centaines de projets dans notre entreprise, avec plusieurs R & D lancer le monde afin que les configurations dans les profils facilitent le partage entre les équipes. Mais tout cela aide à avoir une résolution correcte du login/pass du serveur avec les propriétés. –

Questions connexes