Search code examples
artifactory

Artifactory delete all artifacts older than 6 months


How would you delete all artifacts that match a pattern (e.g older than 6 months old) from artifactory?

Using either curl, or the go library


Solution

  • The jfrog cli takes a 'spec file' to search for artifacts. See here for information on jfrog spec files

    The jfrog cli documentation is available here:

    Create an aql search query to find just the artifacts you want:

    If your aql search syntax were like:

    /tmp/foo.query

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

    And you could find the artifacts like so:

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

    Then the spec file would be

    /tmp/foo.spec

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

    And you would use the golang library like so:

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

    Instead of modified, you can also do a relative date

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

    If you get error 405 Method not allowed, verify you have an api or password correct, and try using PUT instead of POST