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

#artifactory

#артефактор

Вопрос:

Как бы вы удалили все артефакты, которые соответствуют шаблону (например, старше 6 месяцев) из artifactory?

Используя либо curl, либо библиотеку go

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

1. Я думаю, что это можно было бы изменить github.com/jfrog/artifactory-user-plugins/tree/master/cleanup чтобы сделать это

Ответ №1:

Jfrog cli использует «файл спецификации» для поиска артефактов. Информацию о файлах спецификаций jfrog смотрите здесь

Документация jfrog cli доступна здесь:

Создайте поисковый запрос aql, чтобы найти только нужные артефакты:

Если ваш синтаксис поиска aql был похож:

/tmp/foo.query

 items.find(
  {
    "repo":"foobar",
    "modified" : { "$lt" : "2016-10-18T21:26:52.000Z" }
  }
)
  

И вы могли бы найти артефакты следующим образом:

 curl -X POST -u admin:<api_key> https://artifactory.example.com/artifactory/api/search/aql -T foo.query
  

Тогда файл спецификации будет

/tmp/foo.spec

 {
  "files": [
    {
      "aql": {
        "items.find": {
          "repo": "foobar",
          "$or": [
            {
              "$and": [
                {
                  "modified": { "$lt": "2016-10-18T21:26:52.000Z"}
                }
              ]
            }
          ]
        }
      }
    }
  ]
}
  

И вы бы использовали библиотеку golang следующим образом:

 jfrog rt del --spec /tmp/foo.spec --dry-run
  

Вместо изменения вы также можете указать относительную дату

 "modified": { "$before":"6mo" }
  

Если вы получаете сообщение об ошибке 405 «Метод не разрешен», убедитесь, что у вас правильный API или пароль, и попробуйте использовать PUT вместо POST

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

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

Ответ №2:

Установите jforg cli

настройте jfrog cli для выполнения вызовов API

 jfrog rt c Artifactory --url=https://<>url/artifactory --apikey=<add api key> #can generate api key from user profile
  

Создайте файл спецификации с именем artifactory.spec Вы можете изменить запрос поиска по мере необходимости. Приведенный ниже запрос будет

отображать артефакты из

  • реестр — docker-промежуточный

  • путь — *

  • статус загрузки = null # Не загружено

  • созданные до 6 месяцев

     {
    "files": [
      {
        "aql": {
          "items.find": {
            "repo": {"$eq":"docker-staging"},
            "path": {"$match":"*"},
            "name": {"$match":"*"},
            "stat.downloads":{"$eq":null},
            "$or": [
              {
                "$and": [
                  {
                    "created": { "$before":"6mo" }
                  }
                ]
              }
            ]
          }
        }
      }
    ]
      

Вы можете выполнить поиск пакетов, доступных для удаления, с помощью

 jfrog rt s --spec artifactory.spec
  

Запустите команду удаления

 jfrog rt del --spec artifactory.spec
  

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

1. Этот ответ нуждается в обновлении для jfrog cli 2.0 : jfrog config add ArtifactoryName --interactive=false --artifactory-url="https://<artifactory-url>/" --user="<USERNAME>" --password="<API-KEY>"

2. jfrog rt c больше не поддерживается

Ответ №3:

Мы создали инструмент для управления артефактами Artifactory (очистки)https://github.com/devopshq/artifactory-cleanup

это выглядело бы как

 # artifactory-cleanup.yaml
artifactory-cleanup:
  server: https://repo.example.com/artifactory
  # $VAR is auto populated from environment variables
  user: $ARTIFACTORY_USERNAME
  password: $ARTIFACTORY_PASSWORD

  policies:
    - name: Remove all files from repo-name-here older then 7 days
      rules:
        - rule: Repo
          name: "reponame"
        - rule: DeleteOlderThan
          days: 7
  

затем вы должны запустить его, чтобы увидеть, что он удалит, и когда вы будете готовы — добавьте к нему --destroy флаг!

 artifactory-cleanup