Подтвердить что ты не робот

Sonatype Nexus 3 - получите последний снимок

Мы только что обновили установку nexus до последней версии (3.x). Есть ли способ получить последнюю версию данного артефакта моментального снимка? У Nexus 2 был хороший API, который больше не поддерживается.

На тот же вопрос (но для старой версии) был дан ответ: Sonatype Nexus REST Api извлекает последнюю версию сборки

Любые идеи высоко ценятся.

Бест, Daniel

4b9b3361

Ответ 1

  У Nexus 2 был хороший API, который больше не поддерживается.

Похоже, вы имеете в виду следующее:

/service/local/artifact/maven/content
/service/local/artifact/maven/redirect

Если вы хотите найти последнюю версию x.y.z-SNAPSHOT, в которой угадываются x, y, z - у Nexus никогда не было этой функции (она работала только для плагинов).

Это просто неверно - см. следующую статью, в которой ясно показано, что вы можете указать базовые версии LATEST, RELEASE или SNAPSHOT.

https://support.sonatype.com/hc/en-us/articles/213465488-How-can-I-retrieve-a-snapshot-if-I-don-t-know-the-exact-filename-

Это возможно, но не в 1 строке.

Да, если у вас нет удобного инструмента, такого как artifact-resolver, который использует однострочную команду для извлечения артефакта.

Ответ 2

Что за шутка Re: Nexus 3, не имеющий API REST.

Я нашел хак, который облегчает мою проблему. Оказывается, что ansible имеет хороший maven_artifact модуль, который каким-то образом может определить последний моментальный снимок. И вы можете запускать доступную локально. Таким образом, это выглядит следующим образом:

ansible all -i localhost, -c local -m maven_artifact -a "repository_url=https://my-nexus/repository/maven-snapshots/ group_id=com.whatever artifact_id=my-artifact version=2.0-SNAPSHOT dest=./my-artifact.jar"

Ответ 3

Если вы запросите x.y.z-SNAPSHOT, то по умолчанию будет загружена последняя версия моментального снимка x.y.z-timestamp. Нет необходимости делать что-либо дополнительно

Если вы просите найти последнюю версию x.y.z-SNAPSHOT, где угадываются x, y, z - Nexus никогда не выполнял эту функцию (он работал только для плагинов). И я не думаю, что для этого есть хороший прецедент. Если это необходимо, вы, вероятно, делаете что-то неправильно. Вы всегда должны работать с определенной версией. На самом деле даже для первой функциональности я не могу придумать хорошие варианты использования.

Ответ 4

недавно мы столкнулись с той же проблемой с Nexus версии 3.12.1-01, поэтому определенно нет остальных API, чтобы получить последний снимок напрямую

мы смогли решить эту проблему с помощью Python One Liner

JSON_RESPONSE=$(curl -u un:pw -X GET "http://nexus-host/nexus/service/rest/beta/search/assets?maven.groupId=sample.group.id&maven.artifactId=sample&maven.extension=jar" -H  "accept: application/json")

echo $JSON_RESPONSE | python -c 'import sys, json; lines = json.load(sys.stdin)["items"]; sortedlines = sorted(lines, key=lambda k: k["downloadUrl"], reverse=True); print(sortedlines[0]["downloadUrl"])'

надеюсь, это поможет

Ответ 5

Это возможно, но не в 1-лайнере. Вам необходимо получить maven-metadata.xml для каждого моментального снимка моментального снимка (обратите внимание, что многомодульные проекты имеют разные временные метки для каждого модуля, включая родителя).

Мы используем xlstproc, чтобы извлечь соответствующие переменные, чтобы мы все еще могли работать из командной строки без тяжелых инструментов, таких как maven или плющ, чтобы сделайте разрешение.

Ответ 6

Я собрал отличный скрипт, который можно загрузить в Nexus, который решает эту проблему с помощью запроса POST.

Вы можете найти скрипт и некоторые инструкции по использованию здесь: https://github.com/rbjorklin/resolve-latest-nexus-artifact

Ответ 7

Вы можете скачать с curl

curl -L --header 'Accept: application/json' "https://${NEXUS_URL}/service/rest/beta/search/assets/download?repository=${NEXUS_REPO_NAME}&maven.groupId=${MVN_GROUP_ID}&maven.artifactId=${MVN_ARTIFACT_ID}&maven.baseVersion=${APP_VERSION}&maven.extension=${MVN_EXTENSION}"

Ответ 8

Bash однострочно, используя curl, jq, sort и tail:

NEXUS_URL=https://your-nexus.com
MAVEN_REPO=maven-snapshots
GROUP_ID=...
ARTIFACT_ID=...
VERSION=2.0.1-SNAPSHOT
FILE_EXTENSION=jar

download_url=$(curl -X GET "${NEXUS_URL}/service/rest/v1/search/assets?repository=${MAVEN_REPO}&maven.groupId=${GROUP_ID}&maven.artifactId=${ARTIFACT_ID}&maven.baseVersion=${VERSION}&maven.extension=${FILE_EXTENSION}" -H  "accept: application/json"  | jq -rc '.items | .[].downloadUrl' | sort | tail -n 1)

wget $download_url

Ответ 9

Начиная с апреля 2019 года, в Sonatype Nexus 3 есть REST API для доступа к последнему артефакту

Документация здесь

http://community.sonatype.com/t/nxrm-3-16-rest-search-and-filtering-enhancements/1586

Используйте эту конечную точку /service/rest/v1/search/assets/download с аргументами repository, group и name. Сортировка по version даст вам последний снимок с меткой времени.

https://nexus.blahblah.com/service/rest/v1/search/assets/download?repository=maven-snapshots&group=com.my.company&name=myArtefact&sort=version&direction=desc