Как узнать, существует ли артефакт уже в Jfrog Artifactory от Дженкинса

jenkins #jenkins-pipeline #jenkins-plugins #artifactory #jenkins-job-dsl

#Дженкинс #дженкинс-трубопровод #дженкинс-плагины #artifactory #дженкинс-задание-dsl

Вопрос:

Я разрабатываю декларативный конвейер Дженкинса. У меня есть версия в качестве параметра, и в зависимости от этой версии я хотел бы знать, существует ли определенная папка в Jfrog Artifactory, прежде чем загружать ее. У меня установлен плагин Jenkins Artifactory. Есть ли способ, которым я могу узнать эту информацию перед ее загрузкой?

Редактировать: я понял, что мой вопрос был немного вырван из контекста. В конце концов, то, что я хочу сделать, это загрузить артефакт. Но в случае, если артефакт уже существует, я хотел бы предупредить пользователя, если он захочет продолжить. И мне было интересно, есть ли решение, отличное от загрузки артефакта, чтобы проверить, существует ли он, выдача предупреждения в зависимости от того, была ли загрузка успешной, и после этого загрузка артефакта.

Комментарии:

1. По какой причине вы хотите проверить, существует ли файл перед загрузкой? Почему бы просто не попробовать загрузить?

2. @yahavi просто отредактировал ответ, чтобы дать больше контекста.

Ответ №1:

Вы можете использовать jfrog rt s команду командной строки JFrog для поиска файлов в Artifactory.

Добавление --count в команду подсчитывает общее количество элементов, найденных в Artifactory по указанному пути. Например, предположим, вы хотите проверить, существует ли файл с именем f.zip в generic-local репозитории, в разделе a/b/ путь, выполните следующую команду

 jfrog rt s generic-local/a/b/f.zip --count
 

Вывод, вероятно, будет

 [Info] Searching artifacts...
[Info] Found 0 artifacts.
0
 

Обратите внимание, что в приведенном выше примере он вернул 0. Если бы файл существовал, он вернул бы 1.
Поскольку в стандартный вывод отправляется только последняя строка вывода, вы можете получить ее, например, записав в файл.

Ответ №2:

Одним из вариантов было бы использовать curl, как если бы вы загружали файл. Но вместо того, чтобы вызывать запрос GET, просто запустите запрос HEAD.

 curl -X HEAD ...

curl --head ...
 

Метод HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН возвращать тело сообщения в ответе. Метаинформация, содержащаяся в заголовках HTTP в ответ на запрос HEAD, ДОЛЖНА быть идентична информации, отправленной в ответ на запрос GET. Этот метод можно использовать для получения метаинформации о сущности, подразумеваемой запросом, без передачи тела сущности itself.https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html