Как получить URL при поиске с использованием артефакта JFrog Cli
jfrog
Cli for Artifactory может использоваться для поиска артефактов на нескольких серверах, настроенных в ~/.jfrog/jfrog-cli.conf
:
jfrog rt s repo_name/path/to/artifact*
URL-адрес в результате является только частью, относящейся к базовому URL-адресу сервера, и не содержит ссылок на сервер, на котором был обнаружен артефакт:
[
{
"path": "repo_name/path/to/artifact.tar"
}
]
Я знаю, что могу просмотреть список серверов в конфигурационном файле или использовать REST API, но я бы предпочел, чтобы cli мог его вернуть. Я не нашел никакой возможности рассказать jfrog
включить URL-адрес сервера в результат, так что, похоже, это невозможно. Надеюсь, я ошибаюсь.
URL должен быть отправлен в последующем событии другим компонентам, которые не имеют ни малейшего представления о том, что такое ARM.
Образец jfrog-cli.conf
{
"artifactory": [
{
"url": "https://arm1.foo.bar/artifactory/",
"apiKey": "AKEY",
"serverId": "1",
"isDefault": true
},
{
"url": "https://arm2.foo.bar/artifactory/",
"apiKey": "ANOTHERKEY",
"serverId": "2",
"isDefault": false
}
],
"Version": "1"
}
1 ответ
jfrog
cli не выполняет поиск по списку настроенных серверов. Вместо --server-id
вариант для jfrog rt s
следует использовать, или jfrog rt use <server id>
используется для установки сервера по умолчанию, см. https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory.
Вы можете настроить несколько экземпляров Artifactory с помощью команды config. Команда "use" используется для указания того, какой из настроенных экземпляров Artifactory следует использовать для следующих команд CLI.
$ jfrog rt использует artifactory-server-1
Это обновляет isDefault
установка на true
для данного сервера, и false
что касается прочего. Я бы не рекомендовал использовать этот способ в скриптах, так как будут помехи, если выполняется более одного одновременно.
Серверы должны проходить по одному, а URL-адрес сервера выбирается из файла JSON jfrog-cli.conf или с использованием jfrog rt c show <server id>
команда. Немного кода на Python:
import json
import os
from subprocess import check_output
def find_one_artifact(pattern):
# Make jfrog less talkative so that JSON parsing works
os.environ['JFROG_CLI_LOG_LEVEL'] = 'ERROR'
with open(os.getenv('HOME') + '/.jfrog/jfrog-cli.conf') as fp:
conf = json.load(fp)
for server in conf['artifactory']:
output = check_output(['jfrog', 'rt', 's', '--server-id',
server['serverId'], pattern])
hits = json.loads(output)
if hits and 'errors' not in hits:
for hit in hits:
return server['url'] + '/' + hit['path']
return None