Быстрый старт#

Порядок работы с репозиториями на примере 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 \