2009-04-23 14 views
3

ビルドサーバーで共有認証システムをセットアップしようとしています。 我々が展開たちは(各チームが独自の認証ユーザー/パスワードを持っている)が異なるチームについて行われるべきかを宣言するいくつかのMavenプロジェクトをしている:プロファイルプロパティとしての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> 
:私は、ビルドサーバのsettings.xml内の定義された複数のプロファイルを持って展開するプロジェクトに応じて、最後に

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

を、次のように宣言したサーバーへ私はのユーザー/パスワードを使用してプロパティを置き換えることによって、サーバー認証を変更する場合

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

問題はプロジェクトのデプロイを行うとき、私は次のような認証エラー(HTTP 401)を得たことですチームは、すべて正常に動作しています。

タグなし<サーバ> <サーバ>はプロパティとして値を受け入れますか?

これを達成するために他の人がビルドシステムを設定するにはどうすればよいですか?

ありがとうございました。

編集:私はハドソンを使用しています、私のためのソリューションは、いくつかの時間Maven2をインストールすると、各チームのために(ユーザー/パスワードを除く)の設定を複製していると良いMavenのインストールに各プロジェクトを結びつけることができます。私はこの解決策が私を魅了しないと認めなければなりません...

答えて

1

最も簡単かつ直接的な方法だけ使用されますdistributionManagementの異なるIDです。したがって、rep-releases/rep-snapshotsの代わりにteam1-repo/team2-repoを使用することができます(通常、リリースとスナップショットの間で認証を分離することは価値がありません... repo managerとセキュリティ制御を併用する場合)

ビルドマシンの設定で、ビルドサーバーの各チームのユーザーとパスワードを定義します。

このアプローチでは、単一の企業のpomにリポジトリを定義すると、継承が崩れてしまうというドローバックがありますが、チームレベルのpomがあれば簡単です。

別の考えでは、同じビルドマシンがビルドを行うときに別の人物としてログインする必要があります。ほとんどの場合、マシンを構築して完全にアクセスできるはずはありませんか?

+0

あなたは正しいですブライアン、私たちが望むものを達成する最も簡単な方法は、おそらく少なくともすべてのスナップショットreposに配信するためにビルドマシンに完全な権利を与えることです。各チームは、リリースを行うための独自の資格情報を保持しています。私はこのように行くと思う。ありがとう。 –

0

最初に、dep-team1プロファイルがdistributionManagementタグにどのように接続されているかはわかりません。

第2に、プロファイル要素の構造が少し異なります(distributionManagementタグはありません)。それはここでの違い:

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

を作るかどうかわからない流通管理がある:あなたが複数のチームしたがって、複数の認証スキームを持っている場合

<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

私たちには数多くのプロジェクトがあり、いくつかの研究開発は世界中で行われており、プロファイルの設定によってチーム間の共有が容易になります。 しかし、これはすべて、プロパティを使ってサーバのログイン/パスの正しい解決を行うのに役立ちます。 –

関連する問題