Инфраструктура с maven, Jenkins, Nexus - программирование

Инфраструктура с maven, Jenkins, Nexus

Мы используем maven. Я хочу настроить инфраструктуру, чтобы автоматически создаваемые артефакты переходили в хранилище Nexus. И тогда они могут быть использованы разработчиками.

Я уже создал Jenkins с 1 работой для нашего проекта. И я настроил Nexus на тот же сервер.

На компьютерах разработчиков я скопировал настройку по умолчанию maven на C:\Users {user}.m2\settings.xml добавив этот раздел. Ссылки:

Настройка Maven для использования одного Nexus

Справка по настройке Maven

<mirror>
  <!--This sends everything else to /public -->
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://myserver:8081/nexus/content/groups/public</url>
</mirror>

(я просто следую Руководство по хранилищу с помощью книги Nexus)

Какими должны быть мои следующие шаги? Должна ли работа Дженкинса mvn install? Как создать репозиторий Nexus для артефактов компании?

4b9b3361

Ответ 1

Чтобы развернуть артефакты в Nexus, вам нужно будет включить раздел distributionManagement в вашем pom. Nexus поставляется с определенными репозиториями, которые уже настроены как для моментальных снимков, так и для релизов. Вы должны указать правильный путь для каждого из них, чтобы maven установил моментальный снимок и выпустил артефакты в правильные репозитории. Затем в любое время, когда вы развертываете артефакты - обычно с помощью mvn deploy или с помощью плагина выпуска maven, там будут развернуты артефакты. У Nexus по умолчанию установлена ​​аутентификация записи, поэтому вам нужно обязательно добавить раздел сервера с правильными учетными данными в settings.xml любого, кто будет развертывать артефакты. Дженкинса можно рассматривать практически как любой другой пользователь. Если у вас есть deploy как его сборка, то каждая сборка будет развернута в Nexus. Также существует пост-сборка для развертывания артефактов, если вы хотите, чтобы это произошло позже в задании Дженкинса.

Ответ 2

Мне не нужно было вносить какие-либо изменения в мои проекты pom.xml. Вместо этого в jenkins "Действия после сборки" я выбрал "Развертывание артефактов в репозиторий Maven", затем выбрал "Дополнительно" и установил URL-адрес репозитория http://nexusserver:8081/nexus/content/repositories/releases, а идентификатор репозитория - deploymentRepo.

В ~/.m2/settings.xml на машине jenkins я добавил

<settings>
  <servers>
    <server>
      <id>deploymentRepo</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server>
  </servers>
   ...

</settings>

Ответ 3

update pom.xml

 <distributionManagement>
    ...
    <repository>
      <id>deploymentRepo</id>
      <name>Internal Releases</name>
      <url>http://nexusserver:8081/nexus/content/repositories/releases</url>
    </repository>
    ...
  </distributionManagement>

то для maven ~/.m2/settings.xml add (это пользователь по умолчанию для развертывания в Nexus)

<server>
  <id>deploymentRepo</id>
  <username>deployment</username>
  <password>deployment123</password>
 </server>

затем mvn deploy

Тогда можно использовать развернутый артефакт в любом проекте, как стандартные артефакты. В этом случае добавьте pom.xml

<!-- company repositories -->
    <repository>
        <id>deploymentRepoReleases</id>
        <name>Releases (Nexus)</name>
        <url>http://nexusserver:8081/nexus/content/repositories/releases/</url>
    </repository>
    <repository>
        <id>deploymentRepoSnapshots</id>
        <name>Snapshots (Nexus)</name>
        <url>http://nexusserver:8081/nexus/content/repositories/snapshots/</url>
    </repository>

UPDATE: позже мы ушли из хранилищ Snapshot и использовали maven-release-plugin, которым нужны только репозитории типа выпуска.

Ответ 4

Если это вопрос Дженкинса, а не вопрос Maven, я бы рекомендовал использовать встроенный Jenkins "Развертывание артефактов в репозитории Maven". Пост-сборка Action для большинства случаев.

Преимущества на мой взгляд:

  • Более портативный (мы используем разные репозитории для разных этапов жизненного цикла), и каждый экземпляр Jenkins знает его собственный репозиторий
  • Более очевидным для любого, кто читает работу Дженкинса.
  • Больше в соответствии с способом Дженкинса делать вещи

Ответ 5

Следующие аргументы maven для модуля maven-release-plugin могут использоваться для передачи аутентификации репозитория нексуса

-Dusername=<> -Dpassword=<>

использовать проект jenkins, командную строку maven, для аутентификации репликации nexus