#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