Как получить 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
Другие вопросы по тегам