Итак, это доказывает это на самом деле ( ошибка часть в 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).