Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Публикация своей либы в Nexus репозиторий


(heartwilltell) #1

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

У нас поднят Sonatype Nexus, есть библиотека (обертка вокруг селениума которую я пишу) которая собирается как jar файл Дженкинсом. Сейчас после каждой сборки я деплою ее руками в нексус - работает все замечательно, но это отнимает время.

Знаю что что можно настроить деплой как средствами дженкинса так и самим мавеном. Но что-то я уже сколько прочитал а так и не разобрался как сделать. Возможно кто-то сталкивался?


(Sergey Korol) #2

Если settings.xml сконфигурирован на нексус, то можно сделать по офф. гайду, т.е. через mvn deploy.


(heartwilltell) #3

В settings.xml прописано такое:

<servers>
   <server>
      <id>vpn.company.automated-testing</id>
      <username>jenkins</username>
      <password>jenkinspassword</password>
    </server>
</servers>

В дженкинсе в настройках билда в Post-build Actions добавляю такое: тыц


(Kolesnik Nickolay) #4

Небольшое уточнение: mvn deploy - это для сохранения SNAPSHOT-сборок. Для финальных версий - это mvn release:prepare release: perform


(Sergey Korol) #5

Еще раз перечитал заголовок: так вам все же нужно залить либу в локальный мейвен репозиторий или нексус?

Если в локальный, все делается командой mvn install.

У нас лично для нексуса прописываются секции repository / pluginRepository + mirror в settings.xml. Т.е. при деплое / релизе, мейвен будет знать, куда идти.


(heartwilltell) #6

Да в нексус, покажите пример вашего settings.xml если не сложно


(Sergey Korol) #7

Лучше все же сделать через pom.xml, дабы не привязваться к settings.xml:


	<repositories>
		<repository>
			<id>yourID</id>
			<url>http://nexus.address/nexus/content/groups/public</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>

	<pluginRepositories>
		<pluginRepository>
			<id>yourID</id>
			<url>http://nexus.address/nexus/content/groups/public</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

	<distributionManagement>
		<repository>
			<id>deployment</id>
			<name>Internal Releases</name>
			<url>http://nexus.address/nexus/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>deployment</id>
			<name>Internal Releases</name>
			<url>http://nexus.address/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

Далее mvn deploy сделает все остальное. Ну или как выше заметили: mvn release:prepare release:perform


(heartwilltell) #8

Отлично, с деплоем разобрался, теперь хочу разобратся с автоматическим задаванием версии.

Как сделать так что бы не морочить себе голову и не пилить ручками а что бы оно само ставилось как-то.

Я так понял что при команде deploy если в версие присутствует *-SNAPSHOT то оно задеплоит его в репозиторий для снепшота а если нет то загрузит его в релиз?

mvn release:prepare release:perform потребовал у меня внести в pom.xml что-то такое:

<scm>    <developerConnection>scm:svn:https://svn.mycompany.com/repos/myapplication/trunk/mycomponent/</developerConnection>
</scm>

Из того что прочитал - если правильно понял оно будет делать коммит в котором будет в pom.xml изменять версию?


(Kolesnik Nickolay) #9

Да, именно так. В процессе релиза происходит переключение версии (с убиранием суффикса SNAPHOT) с последующим deploy и отправкой в Nexus. После этого версия увеличивается на 1 и добавляется суффикс SNAPSHOT. Оба изменения версий сопровождаются коммитом.