Проверка подлинности сервера Maven как свойства профиля - PullRequest
3 голосов
/ 23 апреля 2009

Я пытаюсь настроить общую систему аутентификации на сервере сборки. У нас есть несколько проектов 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

Если я изменю аутентификацию сервера, заменив свойства именем пользователя и паролем группы, все будет работать нормально.

Разве теги не принимают значения в качестве свойств?

Как другие настраивают свою систему сборки для достижения того же?

Спасибо за вашу помощь.

Редактировать: Я использую hudson, решение для меня может быть установить несколько раз maven2 и иметь дублированные настройки (кроме пользователя / пароля) для каждой команды и привязать каждый проект к хорошей установке maven. Я должен признать, что это решение не очаровывает меня ...

Ответы [ 2 ]

1 голос
/ 26 апреля 2009

Самый простой и прямой метод, если у вас несколько команд и, следовательно, несколько схем авторизации, это просто использовать другой идентификатор в руководстве Distribution. Таким образом, вместо rep-release / rep-snapshots у вас может быть team1-repo / team2-repo (обычно нет смысла разделять аутентификацию между выпуском и снимками ... особенно если вы используете менеджер репо с хорошим контролем безопасности)

Затем в настройках вашей машины сборки просто укажите пользователя и пароль для каждой команды для сервера сборки.

У этого подхода есть недостаток, заключающийся в том, что он может испортить наследование, если вы определили репозитории в одной корпоративной помпе ... но если у вас есть помпа командного уровня, это будет легко.

Другая мысль заключается в том, почему одна и та же машина сборки должна входить в систему под другим именем при сборке? Разве эта сборочная машина не должна иметь в основном полный доступ?

0 голосов
/ 24 апреля 2009

Прежде всего, я не вижу, как профиль dep-team1 связан с тегом distributionManagement - похоже, что для активации профиля активности требуется.

Во-вторых, мой элемент профиля структурирован немного по-другому (видите, внутри нет тега 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>
...