2016-12-15 3 views
3

Как мы все знаем, Nexus 3 еще не имеет REST API, что для меня очень странно. Я могу загружать артефакты вручную, используя wget или curl. Но, как я использую Maven 3, все снимки артефакты именуются временные метки, как это:Nexus 3: как получить последний снимок?

myartifact-1.0-20161215.141522-4.tar.gz 

Так что я хочу знать, как я могу получить последние снимки из репо? Я хочу автоматизировать процесс загрузки артефактов, но по мере изменения имен я не нашел способа добиться этого.

Спасибо.

+0

Просто любопытно: Почему вы используете Nexus 3 вместе с Maven? –

+0

Поскольку наш проект основан на maven (Java), что бы вы сделали? – brest1007

+0

Мы используем Nexus 2.x, пока Nexus 3 полностью не удовлетворит наши потребности. –

ответ

3

В настоящее время это невозможно. Мы рассматриваем такие варианты использования, как этот, поскольку мы создаем REST API, и вы должны ожидать эту функциональность в ближайшем будущем.

Как уже упоминалось в комментариях, у вас может быть прецедент, где было бы лучше использовать Диспетчер хранилищ Nexus 2. Если вам удобно использовать Groovy и скрипты, вы также можете расширить Nexus Repository Manager 3 с помощью API интеграции, чтобы делать то, что вы описали (и я бы хотел, чтобы это было так). Дополнительная информация об использовании здесь: https://books.sonatype.com/nexus-book/reference3/scripting.html

+0

Привет, разработчик Nexus? Да, я сейчас смотрю на API-интерфейс Groovy REST, я создал проект Maven, и я хотел бы знать, могу ли я загрузить сценарий в мой Nexus repo и запустить скрипт завитой? – brest1007

+0

Я СОРТИРОВКА разработчика, то есть время от времени я пишу плохое код. Здесь есть множество сценариев (включая сценарии оболочки для загрузки и т. Д.), На которые вы можете опираться, чтобы делать то, что вы хотите сделать: https://github.com/sonatype/nexus-book-examples/tree/ nexus-3.x/scripting/simple-shell-example – DarthHater

+0

haha ​​спасибо, я уже сделал git-клон, но в этом примере почти ничего нет, только javadoc, который не так полезен. – brest1007

4

Вы можете создать скрипт в Groovy и загрузить его в Nexus, чтобы сделать то, что вы хотите.

Вот пример сценария, который я использовал для записи, чтобы возвращать все версии для данной группы и репозитория.

Содержание version.json:

{ 
    "name": "version", 
    "type": "groovy", 
    "content": "import org.sonatype.nexus.repository.storage.Query; 
    import org.sonatype.nexus.repository.storage.StorageFacet; 
    import groovy.json.JsonOutput; 

    def groupId = args.split(',')[0]; 
    def repositoryId = args.split(',')[1]; 

    def repo = repository.repositoryManager.get(repositoryId); 
    StorageFacet storageFacet = repo.facet(StorageFacet); 
    def tx = storageFacet.txSupplier().get(); 

    tx.begin(); 
    def components = tx.findComponents(Query.builder().where('group = ').param(groupId).build(), [repo]); 
    def found = components.collect { 
    def baseVersion = it.attributes().child('maven2').get('baseVersion'); 
    \"${baseVersion}\" 
    }; 
    found = found.unique(); 
    tx.commit(); 
    def result = JsonOutput.toJson(found); 

    return result;" 
} 

Интересная часть здесь является tx.findComponents(), которая возвращает общий Component класс. Этот класс предоставляет дополнительную информацию о своем контейнере с функцией attributes(). Затем вы можете использовать его, чтобы получить baseVersion, то есть версию Maven, используемую для использования (с суффиксом -SNAPSHOT).

Чтобы установить этот скрипт, просто выполните следующее:

curl -v -X POST -u <NEXUS_ADMIN>:<NEXUS_PWD> --header "Content-Type:application/json" http://<SERVER_NEXUS>/nexus/service/siesta/rest/v1/script -d @version.json 

Вы можете проверить это легко с:

curl -v -X POST -u <NEXUS_ADMIN>:<NEXUS_PWD> --header "Content-Type: text/plain" "http://<SERVER_NEXUS>/nexus/service/siesta/rest/v1/script/version/run" -d "com.my.groupid,snapshots" 

Это вернет все версии, которые вы хотите, как вы хотите:

{ 
    "name" : "version", 
    "result" : "[\"1.5.2-SNAPSHOT\",\"1.5.3-SNAPSHOT\",\"1.6.1-SNAPSHOT\",\"1.5.0-SNAPSHOT\"]" 
} 

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

+0

Я бы настоятельно рекомендовал запустить это внутри блока try/finally и закрыть транзакцию (через 'tx.close()') внутри окончательной части. Я использовал это как отправную точку для сценария, и через 12-48 часов работы моя установка Nexus зависала и больше не отвечала на запросы артефакта. Этот скрипт даже включен в [билет] (https://issues.sonatype.org/browse/NEXUS-14612), который описывает мою точную ситуацию. – richid

0

Я нашел ответ на другой пост здесь: Nexus 3 Rest api to check if component exist

я комментировал в линии

found = found.unique().sort(); 

и назвал его со следующими параметрами:

-d'<reponame>,<groupid>,<artifactid>,<version>-SNAPSHOT,latest' 

YMMV, но это сделал для меня. Тогда я смог построить wget с результатом этого запроса.