Быстрый старт#
Порядок работы с репозиториями на примере Maven#
Пользователь запускает Maven командной mvn compile [ -s settings.xml\].
Maven обращается к локальному репозиторию в поисках плагина compile, а также прочих зависимостей проекта.
Если артефакты не нашлись, Artifactory обращается к глобальным репозиториям.
В случае наличия артефактов, Artifactory скачивает их на файловую систему и публикует в корпоративном публичном репозитории.
Maven скачивает артефакты в локальный репозиторий, после чего производит компиляцию проекта.
Настройка проекта для использования публичного репозитория#
Для настройки работы с публичным корпоративным репозиторием нужно создать или внести изменения в файл settings.xml:
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>Mirror of central</id>
<name>Mirror of central</name>
<url>https://nexus.my-url.ru/nexus/content/groups/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
Публикация артефактов на примере Maven-зависимостей внутренней разработки#
Для возможности публикации артефактов необходимо изменить два файла.
В файле settings.xml пропишите следующее:
<settings
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>release.repo</id>
<username>AC_SuperProject</username>
<password>AC_SuperProjectPass</password>
</server>
<server>
<id>snapshot.repo</id>
<username>AC_SuperProject</username>
<password>AC_SuperProjectPass</password>
</server>
</servers>
<mirrors>
<mirror>
<id>Mirror of central</id>
<name>Mirror of central</name>
<url>https://nexus.my-url.ru/nexus/content/groups/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
В файле pom.xml пропишите секцию distributionManagement:
[...]
<distributionManagement>
<repository>
<id>release.repo</id>
<url>https://nexus.my-url.ru/nexus/content/repositories/corp-releases</url>
</repository>
<snapshotRepository>
<id>snapshot.repo</id>
<url>https://nexus.my-url.ru/nexus/content/repositories/corp-snapshots</url>
</snapshotRepository>
</distributionManagement>
[...]
Примечание
Значения внутри тегов <id> обоих файлов должны совпадать.
Загрузка артефакта в third-party репозиторий без pom-файла#
mvn deploy:deploy-file -s D:\\Project\\settings.xml
-DgroupId=com.example -DartifactId=project -Dversion=1.0.1
-DgeneratePom=true -Dpackaging=jar -DrepositoryId=release.repo
-Durl=http://ip:port/artifactory/content/repositories/corp-releases
-Dfile=D:\\Project\\3rdparty-libs.jar
Загрузка артефакта в third-party репозиторий с использованием pom-файла#
mvn deploy:deploy-file -s D:\\Project\\settings.xml -DgeneratePom=false
-DrepositoryId=release.repo
-Durl=http://ip:port/artifactory/content/repositories/corp-releases
-DpomFile=pom.xml -Dfile=D:\\Project\\3rdparty-libs.jar
Примечание
Ключ -s позволяет указать файл settings.xml, если он находится в директории, отличной от директории по умолчанию - .m2 (~.m2 в Linux).
Плагин Maven deploy plugin может использоваться также для загрузки артефактов в Snapshot-репозиторий (текущая рабочая копия). Требования к файлу settings.xml те же, что и при загрузке артефакта в Release-репозиторий.
Загрузка артефакта в Snapshot-репозиторий#
mvn deploy:deploy-file -DgroupId=com.somecompany -DartifactId=project
-Dversion=1.0.0-SNAPSHOT -DgeneratePom=true -Dpackaging=jar
-DrepositoryId=snapshot.repo
-Durl=http://ip:port/artifactory/content/repositories/corp-snapshots
-Dfile=target/project-1.0.0-SNAPSHOT.jar
Получение дистрибутива из Artifactory#
Инструмент получения дистрибутива из Artifactory не регламентируется. Однако он должен выводить полную ссылку (URL) на файл дистрибутива в Artifactory в лог-файл задания (job) CID. Если применяемый инструмент не выводит в лог-файл требуемую информацию, то ее необходимо поместить в лог-файл самостоятельно.
Публикация дистрибутива в Artifactory#
Загрузка артефакта с готовым pom-файлом#
curl -v \
-F r=releases \
-F hasPom=true \
-F e=jar \
-F file=\@pom.xml \
-F file=\@project-1.0.jar \
-F c=distrib \
-u <user>:<password> \
http://ip:port/artifactory/service/local/artifact/maven/content
Примечание
Параметр file должен идти последним, или команда curl не будет работать. Если загружаете файл pom, то параметр pom file должен идти после всех остальных параметров.
Загрузка артефакта с генерацией pom-файла#
curl -v \
-F r=releases \
-F hasPom=false \
-F e=jar \
-F g=com.test \
-F a=project \
-F v=1.0 \
-F p=jar \
-F c=distrib \
-F file=@project-1.0.jar \
-u <user>:<password> \
http://ip:port/artifactory/service/local/artifact/maven/content
Параметры REST API запроса#
Ниже приведены все доступные параметры REST API запроса:
r— репозиторий;hasPom— указывает, поставляется ли pom-файл или нужно его сгенерировать. Если требуется загрузить pom, то параметрыg,a,v,p, иcне нужны как часть команды, так как эти значения извлекаются из pom.xml.e— расширение;g— идентификатор группы;a— идентификатор артефакта;v— версия;p— упаковка;c— классификатор;file— каждый файл для загрузки, используйте один параметр на файл.
Ограничения#
Не загружайте артефакты посредством «Прямой загрузки» (DirectDeploy), т.к. в этом случае по таким артефактам не будет обсчитываться метаинформация и индекс, а следовательно, по ним не будет работать поиск.
Не загружайте артефакты в Snapshot репозитории, т.к. при прямой загрузке (DirectDeploy) артефакты не будут являться snapshots, а загрузка с использованием REST API выдаст ошибку «This is a Maven SNAPSHOT repository, and manual upload against it is forbidden!»
Примеры#
$ curl -v \
-F r=Nexus_PROD \
-F hasPom=true \
-F c=distrib \
-F g=Nexus_PROD \
-F a=CI0000000_AS \
-F v=VERSION \
-F e=rar \
-F p=rar \
-F file=@pom.xml \
-F file=@ARTIFACT_PATH.rar \
-F c=distrib \
-u <user>:<password> \
$ curl -v \
-F r=Nexus_PROD \
-F hasPom=false \
-F c=distrib \
-F g=Nexus_PROD \
-F a=CI00722675_SUKKR-IFRS \
-F v=nexus_test_file_v2 \
-F p=rar \
-F e=rar \
-F file=@nexus_test_file_v2.rar \
-F c=distrib \
-u CI-SUKKR-CI00237179:XXXX \