Удалять артефакты в артефакте по указанному пути в зависимости от возраста.

Мне нужно удалить версии артефактов для одного из моих репозиториев в artifactory, которые старше определенного количества дней. Под этим я подразумеваю, что предположим, что мой репозиторий с искусственным URL-адресом: -

https://artifactory.mycompany.com/artifactory/myrepo/

и в этом репо есть несколько папок с шаблоном имени abc - * - xyz, что означает, что здесь для этих папок будут указаны полные пути: -

https://artifactory.mycompany.com/artifactory/myrepo/abc-1-xyz
https://artifactory.mycompany.com/artifactory/myrepo/abc-2-xyz
https://artifactory.mycompany.com/artifactory/myrepo/abc-3-xyz

Теперь в каждой из этих папок хранятся актуальные версии папок артефактов, которые я хотел бы только удалить, что означает, что вся папка с версией, например, для двух URL-адресов: -

https://artifactory.mycompany.com/artifactory/myrepo/abc-1-xyz/ver_11
https://artifactory.mycompany.com/artifactory/myrepo/abc-1-xyz/ver_12
https://artifactory.mycompany.com/artifactory/myrepo/abc-2-xyz/ver_3
https://artifactory.mycompany.com/artifactory/myrepo/abc-2-xyz/ver_5
So based on say if these folders ver_* are older than 30 days, i would like to get them deleted. And only these ver_* folders not abc-*-xyz, etc

Я мог видеть приведенный ниже вопрос о stackoverflow и мог заставить это работать для этого варианта использования, но не смог построить AQL для моего варианта использования, чтобы я мог иметь соответствующий файл спецификации, который можно использовать для удаления того, что мне нужно здесь.

Artifactory удаляет все артефакты старше 6 месяцев

Любая помощь здесь, чтобы помочь мне создать файл AQL, а затем файл спецификации, который может быть вызван для фактического удаления, как всегда, будет очень признателен.


person Ashley    schedule 10.10.2019    source источник


Ответы (2)


Следующая спецификация файла делает то, что вы ищете:

{
  "files": [
    {
      "aql": {
        "items.find": {
          "repo": "myrepo",
          "path": {"$match":"abc-*-xyz"},
          "name": {"$match":"ver_*"},
          "type": "folder",
          "$or": [
            {
              "$and": [
                {
                  "created": { "$before":"7d" }
                }
              ]
            }
          ]
        }
      }
    }
  ]
}

Приведенная выше спецификация файла находит все папки, которые соответствуют следующим критериям:

  1. Они находятся в репозитории my-repo.
  2. Они находятся внутри папки с именем, которое соответствует abc - * - xyz, и находятся в корне репозитория.
  3. Их имя совпадает с ver_ *
  4. Они были созданы более 7 дней назад.

Чтобы удалить все папки, найденные в этой спецификации файла, сделайте следующее.

  1. Создайте спецификацию файла и назовите ее как хотите. Для примера назовем его delete-folder-spec.
  2. На своем терминале запустите следующую команду JFrog CLI, находясь в том же каталоге, что и delete-folder-spec.

jfrog rt del --spec удалить папки-spec

person Eyal Ben Moshe    schedule 11.10.2019
comment
Спасибо, Эяль. Все работает так, как вы указали в решении, за исключением того, что оно ничего не удаляет. Так написано [Информация] Поиск артефактов ... [Информация] Найдено 12 артефактов. а затем команда работает вечно и фактически не удаляет. Что мне не хватает для операции удаления в артефакте с использованием AQL? - person Ashley; 11.10.2019
comment
stackoverflow.com/questions/40118550/ - person Jobin James; 01.07.2020
comment
Отвечая на комментарий Эшли выше: Может ли быть, что ваш экземпляр Artifactory использует базу данных Derby по умолчанию? Если вы не заменили ее реальной базой данных, ожидается, что выполнение некоторых поисковых запросов займет очень много времени. - person Eyal Ben Moshe; 02.07.2020

Его можно решить, используя --quiet = true в команде, поскольку без него он застревает, как вы можете видеть на следующей фотографии:

явно запрашивает удаление папок

person Naman Sethi    schedule 05.07.2021
comment
Пожалуйста, не используйте скриншоты для кода или сообщений об ошибках. Вместо этого я рекомендую размещать текст дословно в формате выделения кода. - person Flair; 10.07.2021