Артефакт AQL скачать артефакт
Есть ли способ загрузить артефакт с помощью AQL?
У меня есть запрос, отправленный с:
curl -u user:pass \
-X POST https://artifactoryURL/artifactory/api/search/aql \
-H 'content-type: text/plain' \
-T query.aql
И мой query.aql
:
items.find(
{
"repo":{"$eq":"repo"},
"$and": [
{
"path": { "$match": "path/*"},
"name": { "$match": "*.rpm"}
}
]
}
)
.sort({ "$desc": ["modified"] })
.limit(1)
Теперь, когда я знаю, что он возвращает то, что я хочу, есть ли способ изменить запрос api/search/aql
что-то вроде api/download/aql
и получить эти предметы?
РЕДАКТИРОВАТЬ:
Я также пытался сделать это с помощью jfrog cli, но там они не полностью поддерживают AQL (сортировка и лимит не работали).
Это команда, которую я попробовал:
jfrog rt s --spec=query-aql.json
И спецификация, которая не смогла отсортировать и ограничить результаты:
{
"files": [
{
"aql": {
"items.find": {
"repo": "repo",
"$and": [
{
"path": { "$match": "path/*"},
"name": { "$match": "*.rpm"}
}
]
}
},
"sort": {
"$asc": ["modified"]
},
"limit": 1
}
]
}
РЕДАКТИРОВАТЬ 2:
Добавлена проблема jfrog-cli-go: https://github.com/JFrogDev/jfrog-cli-go/issues/56
3 ответа
Простой способ использовать ваш aql-скрипт для загрузки файлов из артефакта - использовать JFrog cli, как указано здесь: https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory
Cli может быть загружен как исполняемый файл для Linux, Mac или Windows и должен соответствовать вашим потребностям
С помощью команды curl единственное, что вы можете сделать, - это затем проанализировать результат из вашего aql-запроса и выполнить запрос на загрузку для каждого файла.
Я просто искал очень похожую вещь - используйте файл спецификации загрузки, чтобы загрузить последний артефакт из заданного репо и пути. Мне все равно, если я использую AQL или нет, я просто хочу это в download-spec.json
файл. Если вы перейдете по ссылке выше, посмотрите на Пример 5.
Модифицировано для вашего примера:
{
"files": [
{
"pattern": "path/*.rpm",
"target": "my/download/path/",
"sortBy": "created",
"sortOrder": "desc",
"limit": 1,
}
]
}
jfrog cli поддерживает аргументы --limit, --sort-order и --sort-by.
Следующие работы для меня:
/ ctcmn / cmn-tools / artifactory / jfrog rt search --spec = / tmp / jfrogfilespec.json --сортировать по созданному --sort-order=desc --limit 1
Содержимое файла спецификации json:
{ "files": [ { "aql": { "items.find": { "repo":{"$eq":"my-release-repo"}, "name":{"$match":"my-artifact-prefix*"} } } } ] }
Это генерирует следующий запрос (в соответствии с режимом отладки):
items.find( { "repo":{"$eq":"my-release-repo"}, "name":{"$match":"my-artifact-prefix*"} } ).include("name","repo","path","actual_md5","actual_sha1","size","type","created").sort({"$desc":["created"]}).limit(1)
Что расстраивает, так это то, что я не могу найти способ использовать "поиск jfrog rt" со спецификацией файла, которая позволяет мне влиять на модификатор "include" поиска.