JFrog CLI не может установить свойства для артефакта в JFrog Artifactory для имени первого свойства и использования примеров ключей SSH для поиска нескольких свойств - PullRequest
0 голосов
/ 28 февраля 2019

JFrog Artifactory: 5.8.4 Professional.

JFrog CLI: 1.12.1

Я использую официальныйдокументация JFrog CLI для установки нескольких свойств артефакта, доступного в репозитории Artifactory.

  • ПРИМЕЧАНИЕ: я не хочу сейчас использовать Artifactory AQL и пытаюсь заставить это работать, используя jfrog cli.

Я успешно настроил клиент CLI(файл ~/.jfrog/jfrog-cli.conf с записями для аутентификации с использованием имени пользователя / пароля и с ключом API был успешно создан).

Для настройки свойств артефакта я сослался на следующий пример:

jfrog rt sp "generic-local/*.zip" "a=1;b=2,3"

и выполнил следующую команду (в задании Дженкинса в свободном стиле):

$ jfrog rt sp --server-id="artifactory-dev-instance" --url=${ARTIFACTORY_URL} ${REPO}/${FILE_PATH}/${FILE_NAME} -- props="release=${RELEASE};VERSION=${VERSION};PIPELINE_VERSION=${RELEASE}_${VERSION}_${BUILD_NUMBER};fileType=automated-file;PROJECT=${PROJECT}"

Эта команда успешно завершилась без ошибки и применила все свойства с ожидаемыми значениями, кроме первого свойства release=${RELEASE}.

Вопрос: Почему jfrog rt sp не применяет release свойство артефакта, в то время как все остальные свойства были успешно применены с правильными значениями.

Фактические значения переменных не имеют значения, так как я вижу, как другие свойства успешно применяются в данном экземпляре Artifactory (ARTIFACTORY_URL) на целифайл (сидит в репо / путь / файл) и соответствующие свойства с их значениями.

1 Ответ

0 голосов
/ 28 февраля 2019

Итак, это доказывает это на самом деле ( ошибка часть в jfrog cli).повторно добавьте это первое свойство, то есть дважды добавьте отсутствующее первое свойство, и оно будет работать для всех свойств (включая первое), одновременно давая свойства для добавления.

Теперь свойство release также применяется.

$ jfrog rt sp --server-id="artifactory-dev-instance" --url=${ARTIFACTORY_URL} ${REPO}/${FILE_PATH}/${FILE_NAME} -- props="release=${RELEASE};release=${RELEASE};VERSION=${VERSION};PIPELINE_VERSION=${RELEASE}_${VERSION}_${BUILD_NUMBER};fileType=automated-file;PROJECT=${PROJECT}"

или

$ jfrog rt sp --server-id="artifactory-dev-instance" --url=${ARTIFACTORY_URL} ${REPO}/${FILE_PATH}/${FILE_NAME} -- props="release=${RELEASE};VERSION=${VERSION};PIPELINE_VERSION=${RELEASE}_${VERSION}_${BUILD_NUMBER};fileType=automated-file;PROJECT=${PROJECT};release=${RELEASE}"

ПРИМЕЧАНИЕ. При настройке свойств jfrog rt sp вы можете указать несколько значений для одного и того же имени свойства, используя ,, то есть --props="prop1=value1;prop2=value22,prop2=value23;prop3=value3", но во время jfrog rt s(поиск), вы не можете использовать , (если вы вообще используете , или ; для сопоставления свойства для более чем 1 возможных значений, jfrog rt s --prop="..." не даст вам все результаты, так каквыберет только последнее значение и переопределит все остальные предыдущие значения для данного свойства).

ТАКЖЕ, используя jfrog cli --server-id = "..." и --url = "ArtifactoryURL "(как указано выше) может использоваться более безопасным способом , если вы используете ключ SSH.

Пример использования JFROG с ключом SSH (для лучшей аутентификации) не требует имени пользователя / пароля или идентификатора сервера в командной строке (для чего требуется файл ~ / .jfrog / jfrog.conf):

Просто создайте свой SSH паб / закрытый ключ.Добавьте ключ публикации для пользователя (запустив команду в настройках Artifactory wide / repo wide), затем установите переменную JFROG_URL в виде:

JFROG_URL="ssh://artifactory-develop:1339"

, а затем просто выполните:

Для настройки свойств артефакта: jfrog rt sp --ssh-key-path=/home/${USER}/.ssh/id_rsa --url=${JFROG_URL} ...same command as above for sp command

или для поиска

jfrog rt s --ssh-key-path=/home/${USER}/.ssh/id_rsa --url=${JFROG_URL} ...same command as above for s searching artifacts (см. Справку JFROG cli на их сайте документации).

JFROG cli НЕ поддерживает «И» и «ИЛИ» в разделе --props="...." для данного свойства, т. Е. Если вы хотите найти артефакт, где свойство prop1 содержит более одного значения, тогда jfrog cli, как показано выше, который использует --props=".....", не будет работать.

Для этого у вас есть схема поиска файлов JFrog и команда --spec ~/somefile.json или команда curl с -T file.json.

ПРИМЕЧАНИЕ : файл json (синтаксис) для открытия { и } отличается при использовании jfrog (с --spec file.json) и при использовании curl с -T file.json

Давайте посмотрим, какдля использования сначала с командой curl.

Создайте файл curl-aql.json, который содержит следующее (в качестве примера):

items.find( 
           { "repo": { "$eq" : "libs-snapshot-local" }}, 
           { "@yourCustomProperty1": { "$match" : "someValue1" }},
           { "@yourCustomProp2": { "$match" : "anotherValue2" }},
           { "@moreCustomProps3": { "$match" : "string_or_number_or_alnum" }},
           { "$or":[ { "@customPropertyWhichHasMultipleValues" : "PASS", "@customPropertyWhichHasMultipleValues" : "UNSTABLE" } ]}
          ).include("*", "@customProperty5iWantAQLToReturnToMeBack", "@yourCustomProperty1","@yourCustomXProp","@yourCustomYProp")

ПРИМЕЧАНИЕ: Все свойства, которые вы создаете (т. Е. Которые Artifactory не предоставляет вам бесплатно, такие как 'name', 'repo') ДОЛЖНЫ иметь префикс @ в AQL, так как вы найдете странное сообщение об ошибкечто-то не так с форматом в символе # 74 или 75.

Затем выполните эту команду curl (идентификатор пользователя: 123456 и пароль содержится в $p):

curl -u123456:$p -H 'content-type: text/plain' -X POST http://artifactory-develop:8081/artifactory/api/search/aql -T ~/curl-aql.json

Это менее безопасно, но работает хорошо (если вы определите и MASK переменные пароля в Jenkins и вызовете свой скрипт).Тем не менее, я бы предпочел использовать jfrog --props="..." для простых поисков или --spec jsonfile (для более сложных поисков или других операций, которые поддерживает jfrog CLI), используя БОЛЬШЕ безопасный --ssh-key-path=/your/home/.ssh/your_private_key_id_rsa способ с использованием --url=$JFROG_URL (SSH url).

В jfrog, если вы хотите использовать возможности Artifactory AQL , попробуйте следующее:

Создайте файл jfrog-aql.json, содержащий:

{ 
    "files": [
    {
        "aql": 
        {
            "items.find":  
            {
                "repo": "libs-snapshot-local" , 
                "@yourCustomProperty1": { "$match" : "ABC1.22.33" },
                "@yourCustomProperty2": { "$match" : "Project1" },
                "name": { "$match" : "ArtifactX-*.json" },
                "@yourCustomProperty3": { "$match" : "2.*" },
                "@yourCustomProperty4": { "$match" : "some-manifest-file" }
            }
        },
        "sortBy" : ["created"],
        "sortOrder" : "desc",
        "limit" : 1
    }
    ]
}

ПРИМЕЧАНИЕ: этот json-файл имеет jfrog cli * --spec jsonfile требований и имеет немного другой синтаксис, чем тот, который мы использовали в json-файле (во время curl выполнения).

Теперь вы можете запустить его, используя jfrog через:

jfrog rt s --ssh-key-path=/home/${USER}/.ssh/id_rsa --url=${JFROG_URL} --spec ~/jfrog-aql.json

Наконец нашел лучший AQL, где вы можете использовать $and или $or для многократного поиска по значениямодно свойство (вы можете добавить больше, настроив его).См. Файл AQL здесь:

( ПРИМЕЧАНИЕ : Лучше использовать $qa, чем $match, когда значение известно, т. Е. Жестко запрограммировано, и лучше использовать simple form (посмотрите, как repo используется ниже. Используйте или $match имеет смысл, когда ваше значение содержит *, посмотрите, как свойство name используется ниже):

{ 
    "files": [
      {
        "aql": 
        {
            "items.find":  
            {
                "repo": "libs-snapshot-local" , 
                "@yourCustomProperty1": "ABC1.22.33",
                "@yourCustomProperty2": "Artifact1",
                "name": { "$match" : "ArtifactX-*.json" },
                "@yourCustomProperty3": { "$match" : "2.*" },
                "@yourCustomProperty4": "some-manifest-file",
                "$or": [
                    {
                       "@customProperty5": "Hard-Coded-Known-Value1",    
                       "@customProperty5": "Hard-Coded-Known-Value2"
                    }
                ]    
            }
        },
        "sortBy" : ["created"],
        "sortOrder" : "desc",
        "limit" : 1
      }
    ]
}

ПРИМЕЧАНИЕ. См. Соответствующий пост. Установка Chef Berks (Berkshelf) Тайм-аут, связывающийся с хранилищем артефактов (Faraday Timeout / Actor Crashed) , если вы используете Chef и berks install (для поиска и блокировки версий поваренных книг для стабильной работы)повторяющиеся развертывания с использованием berks apply (закрытые версии поваренных книг) и knife create <Chef-Env> -c ... для создания сред / файлов Chef).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...