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 中声明对声明的服务器的身份验证如下:

<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 中定义了几个配置文件:

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

问题是,在部署项目时,我遇到了如下的身份验证错误(HTTP 401):

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

如果我通过将属性替换为团队的用户/密码来修改服务器身份验证,则一切正常。

标签 <servers><server> 不接受值作为属性吗?

其他人如何设置他们的构建系统以实现相同的目标?

谢谢你的帮助。

编辑:我正在使用 hudson,我的解决方案可以是安装多次 maven2 并为每个团队设置重复的设置(用户/密码除外),并将每个项目与良好的 maven 安装联系起来。我必须承认这个解决方案不会让我着迷......

4

2 回答 2

1

如果您有多个团队并因此有多个身份验证方案,那么最简单和最直接的方法就是在 distributionManagement 中使用不同的 id。因此,您可以使用 team1-repo / team2-repo 而不是 rep-releases/rep-snapshots(将发布和快照之间的身份验证分开通常没有价值……特别是如果您使用具有良好安全控制的repo 管理器)

然后在您的构建机器的设置中,只需为构建服务器的每个团队定义一个用户和密码。

这种方法确实有一个缺点,如果您在单个公司 pom 中定义 repos,它会弄乱继承......但如果您有一个团队级别的 pom,那就很容易了。

另一个想法是为什么同一台构建机器在构建时需要以不同的人身份登录?那台构建机器不应该具有完全访问权限吗?

于 2009-04-25T21:14:06.217 回答
0

首先,我看不到 dep-team1 配置文件如何连接到 distributionManagement 标签 - 它似乎需要 release-profile 才能激活。

其次,我的配置文件元素的结构有点不同(请参阅,其中没有 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>
于 2009-04-23T20:37:28.193 回答