Удалить артефакты в артефакте по указанному пути в зависимости от того, сколько им лет - PullRequest
0 голосов
/ 10 октября 2019

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

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
Таким образом, основываясь на том, что если эти папки ver_ * старше 30 дней, я бы хотел их удалить. И только эти папки ver_ * не abc - * - xyz и т. Д.

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

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

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

1 Ответ

2 голосов
/ 11 октября 2019

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

{
  "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. С вашего терминала запустите следующую команду CLI JFrog, находясь в том же каталоге, что и delete-folder-spec

jfrog rt del --spec delete-folder-spec

...