Инфраструктура с 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 для артефактов компании?
Ответы
Ответ 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